Portable Multi- and Many-Core Performance for Finite Difference Codes; Application to the Free-Surface Component of NEMO

Andrew Porter, Jeremy Appleyard, Mike Ashworth, Rupert W. Ford, Jason Holt, Hedong Liu, Graham Riley

Research output: Contribution to journalArticlepeer-review

Abstract

We present an approach which we call PSyKAl that is designed to achieve portable performance for parallel, finite-difference Ocean models. In PSyKAl the code related to the underlying science is formally separated from code related to parallelisation and single-core optimisations. This separation of concerns allows scientists to code their science independently of the underlying hardware architecture and for optimisation specialists to be able to tailor the code for a particular machine independently of the science code. We have taken the free-surface part of the NEMO ocean model and created a new, shallow-water model named NEMOLite2D. In doing this we have a code which is of a manageable size and yet which incorporates elements of full ocean models (input/output, boundary conditions, etc.). We have then manually constructed a PSyKAl version of this code and investigated the transformations that must be applied to the middle/PSy layer in order to achieve good performance, both serial and parallel. We have produced versions of the PSy layer parallelised with both OpenMP and OpenACC; in both cases we were able to leave the natural-science parts of the code unchanged while achieving good performance on both multi-core CPUs and GPUs. In quantifying whether or not the obtained performance is `good' we also consider the limitations of the basic roofline model and improve on it by generating kernel-specific CPU ceilings.
Original languageEnglish
JournalGeoscientific Model Development
DOIs
Publication statusSubmitted - 2017

Fingerprint

Dive into the research topics of 'Portable Multi- and Many-Core Performance for Finite Difference Codes; Application to the Free-Surface Component of NEMO'. Together they form a unique fingerprint.

Cite this