@misc{37d1159b9caa4748ad3848b42b341998,
title = "From PeleC to PeleACC, to PeleC++",
abstract = "PeleC is an Exascale Computing Project application for simulating compressible combustion in complex geometries. It has been built on top of the popular AMReX library. In the beginning of the Exascale Computing Project, PeleC was focused on KNL. It uses a mixture of C++, C, and kernels written in Fortran to obtain performance by focusing on vectorization. Recently we have taken two approaches in deciding PeleC's future for obtaining performance on exascale GPU machines. In the first programming model, we decorated the Fortran kernels with OpenACC directives. This expedited our ability to run at large scales on Summit's GPUs, where we achieved a significant speedup over the CPUs on Summit. The second programming model involved rewriting the Fortran kernels in C++ and using AMReX's Kokkos-like lambda abstractions for running on the GPU. This resulted in similar speedups on Summit's GPUs over merely utilizing the CPUs. Both approaches involved AMReX's management of memory transfers between the device and host. In this work, we compare and contrast the benefits and pitfalls to both programming approaches regarding performance, performance portability, and productivity. We also discuss advantages we have found in taking the time to modernize our code and why have chosen a specific pathway to prepare our code for the future DOE exascale machines.",
keywords = "exascale computing, performance portability, productivity, software engineering",
author = "Jonathan Rood and {Henry de Frahan}, Marc and Ray Grout",
year = "2020",
language = "American English",
series = "Presented at the Performance, Portability, and Productivity in HPC (P3HPC) Forum, 1-2 September 2020",
type = "Other",
}