Proxy applications (proxy apps) are small, simplified codes that allow application developers to share important features of larger production applications without forcing collaborators to assimilate large and complex code bases. Proxy apps are frequently used to represent performance critical kernels, programming models, communication patterns, or essential numerical algorithms. The ECP Proxy App Project curates a collection of proxy apps helps application teams, co-design centers, software technology projects, and vendors all use proxy apps as a major mechanism to drive collaborations and co-design solutions for exascale challenges.
For traditional HPC modeling and simulation applications, proxy apps are routinely used to help developers navigate the ongoing transition from homogeneous (CPU only) computing platforms to heterogeneous (CPU+GPU) computing platforms. Because proxy apps are easily modifiable, they are often used by both application developers and system vendors to prototype porting strategies, evaluate performance, and test compiler tool chains. Such efforts help prepare the way for porting legacy codes as the scientific community adapts their largely MPI-based code base to run on platforms where much of the compute power resides in the GPUs.
With the increasing interest in using artificial intelligence (AI) tools, in conjunction with simulation codes, there is a growing need for proxy apps that demonstrate the use of machine learning (ML) and deep learning (DL) techniques for scientific applications on CPU+GPU platforms. Developing proxy apps for such ML/DL applications involves new challenges. ML/DL applications tend to be data-centric in nature, as opposed to traditional scientific codes which are algorithm-centric. The ECP Proxy Apps Project is actively exploring methods to create proxy apps that will help accelerate progress in this area.
Finally, proxy apps can also serve an important educational purpose. By combining MPI with one or more shared memory parallelization paradigms, such as RAJA, Kokkos, OpenMP 5+, DPC++, etc., well-designed proxy apps can serve as concise examples of the best techniques to exploit the available parallelism on DOE exascale platforms. Developers can use these examples to understand the changes that must be made to transform their codes to run on a heterogeneous computing platform.