This project addresses the development of software libraries that simplify development of parallel algorithms and management of data across heterogeneous memory spaces. The capabilities of these libraries are important to the ECP since they enable application and library developers to write code that is high performance and portable. That is, single-source algorithm kernels can be written that can expose different forms of fine-grained, on-node parallelism (via recompilation) and also be tuned for different hardware architectures without changing the application code. In addition, developers can employ memory management facilities provided by vendors and other ECP ST projects through a single, unified application-oriented interface. These capabilities are essential for large multiphysics applications that may have thousands of loop kernels and must negotiate parallel programming model/runtime choices and data management among dozen of physics packages and libraries.
The three libraries supporting the deliverables of this project are: RAJA, CHAI, and Umpire. RAJA is a portability abstraction layer that insulates numerical kernels in application source code from architecture-specific tuning, parallel programming model usage details (OpenMP, CUDA, etc.), and data layout concerns. CHAI complements RAJA by providing pointer abstractions that hide run-time data copies that move kernel data to execution memory spaces as needed. Umpire provides a simple, unified interface to access in-house and third-party capabilities for memory resource discovery, memory pools, allocation, introspection, and operations such as copy, move, etc. The libraries are LLNL projects funded mostly by ATDM and NNSA/ASC and are being used in production applications there. The scope of this ECP ST project is to expand availability and applicability of these libraries via ECP community collaboration.