HIGH PERFORMANCE COMPUTING
project software toolset have been integrated together to facilitate the porting of future use cases to the energy- efficient LEGaTO hardware/ software platform. The LLVM Project4
is a
collection of modular and reusable compiler and toolchain technologies written in C++. The LLVM Core libraries provide a modern source- and target- independent optimiser, along with code generation support for many popular CPUs. These libraries are built around a well-specified code representation known as the LLVM intermediate representation (LLVM IR). The LLVM code
representation provides in-memory compiler IR, and a human-readable assembly language representation. This allows LLVM to provide a powerful intermediate representation for efficient compiler transformations and analysis, while providing a natural means to debug and visualise the transformations. The Kokkos C++
Performance Portability EcoSystem5
is a production-
level solution for writing modern C++ applications in a hardware-agnostic way. It is part of the US Department of Energies ECP. The EcoSystem consists of multiple libraries addressing the primary concerns for developing and maintaining applications in a portable way. The three main
components are the Kokkos Core Programming Model, the Kokkos Kernels Math Libraries and the Kokkos Profiling and Debugging Tools. The Nvidia HPC Software Development Kit (SDK)6
includes compilers,
libraries and software tools essential to maximising developer productivity and the performance and portability of HPC applications. The Nvidia HPC SDK6
C,
C++ and Fortran compilers support GPU acceleration of HPC modelling and simulation applications with standard C++ and Fortran, OpenACC directives and CUDA. GPU- accelerated math libraries maximise performance on common HPC algorithms, and optimised communications libraries enable standards- based multi-GPU and scalable systems programming. OpenCL (Open Computing is an open, royalty-
Language)7
free standard for cross- platform, parallel programming of diverse accelerators found in supercomputers, cloud servers, personal computers, mobile devices and embedded platforms. OpenCL improves the speed and responsiveness of a wide spectrum of applications in numerous market categories, including professional creative tools, scientific and medical software, vision processing and neural network training and inferencing. Together with the OpenCL 3.0 specification, the working
group has released an early initial Khronos OpenCL SDK that developers can use to easily begin OpenCL coding. The SDK is open sourced on the Khronos GitHub under the Apache 2.0 license and will be continuously updated and expanded. This initial SDK release includes a new OpenCL guide, headers including vendor extensions, some small sample programs to illustrate how to use the SDK build system (with CI), and an ICD Loader that will soon support installable development layers. OpenMP8
is a specification
for a set of compiler directives, library routines and environment variables that can be used to specify high-level parallelism in Fortran and C/C++ programs. OpenMP allows users to create, manage, debug and analyse parallel programs while helping to support portability. The directives extend the C, C++ and Fortran base languages with single program multiple data (SPMD) constructs, tasking constructs, device constructs, worksharing constructs and synchronisation constructs, and they provide support for sharing, mapping and privatising data. OpenHPC9
is a Linux
Foundation Collaborative Project whose mission is to provide a reference collection of open-source HPC software components and best practices, lowering barriers to deployment, and advancement and use of modern HPC methods and tools. OpenHPC v2.0 was the
most recent significant update that targets support for two new major OS distro versions: CentOS8 and OpenSUSE Leap 15. As the OpenHPC 2.x series targets major new distro versions, please note it is not intended to be backwards compatible with the previous OpenHPC 1.3.x series. OpenHPC, v2.3 is the current update intended primarily to enable resource manager support with the newer
www.scientific-computing.com | @scwmagazine
hwloc included in RHEL 8.4. RAJA10
is a software
library of C++ abstractions, developed at Lawrence Livermore National Laboratory (LLNL), which enables architecture and programming model portability for HPC applications. RAJA has two main goals: to enable application portability with manageable disruption to existing algorithms and programming styles; and to achieve performance comparable to using common programming models (for example, OpenMP and CUDA.) RAJA is part of a portability
suite that includes other tools: CHAI11
, UMPIRE12 and CAMP13
All these tools are developed by LLNL and are freely available on GitHub. SYCL14
(pronounced
‘sickle’) is a royalty-free, cross-platform abstraction layer that enables code for heterogeneous processors to be written using standard ISO C++, with the host and kernel code for an application contained in the same source file. First introduced in 2014,
SYCL is a C++ based heterogeneous parallel programming framework for accelerating HPC, machine learning, embedded computing, and compute- intensive desktop applications on a wide range of processor architectures, including CPUs, GPUs, FPGAs and tensor accelerators.
References 1.
developer.arm.com/solutions/hpc 2.
intel.ly/3b9cIr5
3.
legato-project.eu/ softwarecomponents 4.
llvm.org/ 5.
github.com/kokkos/kokkos 6.
developer.nvidia.com/hpc-sdk 7.
www.khronos.org/opencl/ 8.
www.openmp.org/specifications/ 9.
openhpc.community/
10.
computing.llnl.gov/projects/raja managing-application-portability- next generation-platforms
11.
computing.llnl.gov/projects/chai copy-hiding-application-interface
12.
computing.llnl.gov/projects/umpire 13.
github.com/LLNL/camp 14.
www.khronos.org/sycl/
.
Summer 2022 Scientific Computing World
13
Nestor Rizhniak/shutterstock
Page 1 |
Page 2 |
Page 3 |
Page 4 |
Page 5 |
Page 6 |
Page 7 |
Page 8 |
Page 9 |
Page 10 |
Page 11 |
Page 12 |
Page 13 |
Page 14 |
Page 15 |
Page 16 |
Page 17 |
Page 18 |
Page 19 |
Page 20 |
Page 21 |
Page 22 |
Page 23 |
Page 24 |
Page 25 |
Page 26 |
Page 27 |
Page 28 |
Page 29 |
Page 30 |
Page 31 |
Page 32 |
Page 33 |
Page 34 |
Page 35 |
Page 36 |
Page 37 |
Page 38