Choosing the right programming model(s) is an important decision that can strongly affect the development, the maintenance, the readability, the portability and the optimization of a code. Programming model challenges are tackled in the Work Package 2 of EoCoE. Here, the term programming models mainly refers to as programming, optimization and parallelism languages, frameworks or libraries.It could be rephrased High Performance Computing (HPC) challenges. Our goal consists in helping, advising and guiding scientist code developers non-expert in HPC to refactor and optimize their applications to reach the best performance and scalability on massively-parallel super-computers. Targeted super-computers can be composed of CPUs with accelerators such as GPUs. We currently test our improvements on Tier-0 European machines but our work is not limited to present technologies. Experts in HPC are preparing applications to run on future pre-exascale machines with disruptive technologies such as ARM-based processors and accelerators. We aim at prepare selected codes in the domain of energy to the Exascale ecosystem.
To achieve this goal, the programming model technical challenge has experts in performance evaluation. Having a systematic and continuous evaluation of the code performance enables to guide optimization developments all along the project and to monitor improvements. It helps to determine the best options to solve performance bottlenecks.
This section presents the different tools used for parallel programming issues as listed below.
Performance analysis and monitoring
LIKWID
LIKWID is a simple to install and use toolsuite of command line applications for performance oriented programmers. It works for Intel, AMD and ARMv8 processors on the Linux operating system.
See more: https://github.com/RRZE-HPC/likwid
Scalasca
Scalasca is a software tool that supports the performance optimization of parallel programs by measuring and analyzing their runtime behavior. The analysis identifies potential performance bottlenecks – in particular those concerning communication and synchronization – and offers guidance in exploring their causes.
See more: https://www.scalasca.org/
Jube
The JUBE benchmarking environment provides a script based framework to easily create benchmark sets, run those sets on different computer systems and evaluate the results. It is actively developed by the Jülich Supercomputing Centre of Forschungszentrum Jülich, Germany.
See more: https://www.fz-juelich.de/ias/jsc/EN/Expertise/Support/Software/JUBE/_node.html
Inter-node parallelism
MPI – Message Passing Interface
Intra-node parallelism
OpenMP
GPU programming
OpenACC
Cuda
Performance portability programming models
Kokkos
Kokkos Core implements a programming model in C++ for writing performance portable applications targeting all major HPC platforms. For that purpose it provides abstractions for both parallel execution of code and data management. Kokkos is designed to target complex node architectures with N-level memory hierarchies and multiple types of execution resources. It currently can use OpenMP, Pthreads and CUDA as backend programming models.
See more: https://github.com/kokkos/kokkos
Adaptive Mesh Refinement
p4est
The p4est software library enables the dynamic management of a collection of adaptive octrees, conveniently called a forest of octrees. p4est is designed to work in parallel and scales to hundreds of thousands of processor cores.
See more: http://p4est.org/
IOs
PDI
PDI (Portable Data Interface) supports loose coupling of simulation codes with libraries:
- the simulation code is annotated in a library-agnostic way,
- libraries are used from the specification tree.
This approach works well for a number of concerns including: parameters reading, data initialization, post-processing, result storage to disk, visualization, fault tolerance, logging, inclusion as part of code-coupling, inclusion as part of an ensemble run, etc.
Within EoCoE II PDI is used as the main data exchange interface either for classical I/O, visualisation or ensemble data handling.
See more: https://pdi.julien-bigot.fr/master
Sensei
SENSEI provides simulations with a generic data interface that they use to provide access to their state. SENSEI then passes this data to zero or more analysis and visualization tasks each time the simulation provides more data.
See more: https://sensei-insitu.org/
This tab shows you the results obtained by the Work Package on programming models. These results are presented by application.
Alya
ParFlow
PDI
GPU porting
All the EoCoE-I and EoCoE-II publications are available here (OpenAIRE).