Most of the current pre-exascale and exascale systems in the US are heterogeneous systems, with the nodes composed of a mix of CPUs and GPUs. An overview of some of the systems in the US is summarized below.
An Overview of Some DOE Systems
Although many of the systems contain Nvidia GPUs, the two upcoming exascale systems, Aurora and Frontier, contain GPUs by other vendors (Intel and AMD, respectively).
In general, different vendors have their own set of preferred programming models or languages that they optimize to run on their hardware. The programming models allow developers to run code on the GPUs, which is important, since generally a large majority of the computational power and bandwidth is only accessible from the GPUs. A non-exhaustive list of programming models/languages supported be different vendor is below.
To run on the GPUs of various pre-exascale or exascale systems, application developers will have to use one or several of these programming models. For Aurora, the following programming models will be supported (although other programming models might be supported in the future):
The figure below shows a suggested mapping of many programming models to programming models that are supported on Aurora. The basic guidelines are that directive-based programming models, like OpenACC, naturally map to OpenMP. CUDA is a Nvidia proprietary programming model and there are a variety of porting options— including switching to DPC++ or OpenCL.
Porting to OpenMP, Kokkos, or RAJA are also possibilities, though they may involve additional refactoring. DPC++ and OpenCL are syntactically different from CUDA to varying but all generally express similar programming abstractions. OpenCL, Kokkos, OpenMP, and Raja will be supported on Aurora, so code already using these programming models should not require any modifications to run.