Independent Parallel Particle Layer (IPPL)

IPPL is a C++ library to develop performance portable code for fully Eulerian, Lagrangian or hybrid Eulerian-Lagrangian methods. IPPL supports simulations in one to six dimensions, mixed precision, and asynchronous execution in different execution spaces (e.g. CPUs and GPUs).

23
contributors
Get started
1720 commitsLast commit ≈ 3 days ago32 stars26 forks

Cite this software

What Independent Parallel Particle Layer (IPPL) can do for you

Independent Parallel Particle Layer (IPPL)

Independent Parallel Particle Layer (IPPL) is a performance portable C++ library for Particle-Mesh methods. IPPL makes use of Kokkos (https://github.com/kokkos/kokkos), HeFFTe (https://github.com/icl-utk-edu/heffte), and MPI (Message Passing Interface) to deliver a portable, massively parallel toolkit for particle-mesh methods. IPPL supports simulations in one to six dimensions, mixed precision, and asynchronous execution in different execution spaces (e.g. CPUs and GPUs).

All IPPL releases (< 3.2.0) are available under the BSD 3-clause license. Since version 3.2.0, this repository includes a modified version of the variant header by GNU, created to support compilation under CUDA 12.2 with GCC 12.3.0. This header file is available under the same terms as the GNU Standard Library; note the GNU runtime library exception. As long as this file is not removed, IPPL is available under GNU GPL version 3.

Installing IPPL and its dependencies

All the new developments of IPPL are merged into the master branch which can make it potentially unstable from time to time. So if you want a stable and more tested version
please checkout the tagged branch correspodning to the latest release (e.g. git checkout tags/IPPL-x.x.x). Otherwise if you want the latest developments go with the master with the above caveat in mind.

Requirements

  • CMake
  • A C++ compilation toolchain (GPU-capable for GPU builds, e.g. nvcc, clang or rocmcc)
  • MPI (GPU-aware if building for GPUs)

Optional requirements

  • FFTW
  • CuFFT

Compilation

IPPL is a CMake Project and can be configured by passing options in CMake syntax:

cmake <src_dir> -D<option>=<value>

None of the options have to be set explicitly, all have a default.

The relevant options of IPPL are

  • IPPL_PLATFORMS, can be one of SERIAL, OPENMP, CUDA, "OPENMP;CUDA", default SERIAL
  • Kokkos_VERSION, default 4.1.00
  • Heffte_VERSION, default MASTER
    • If set to MASTER, an additional flag Heffte_COMMIT_HASH can be set, default 9eab7c0eb18e86acaccc2b5699b30e85a9e7bdda
    • Currently, this is the only compatible commit of Heffte
  • ENABLE_SOLVERS, default OFF
  • ENABLE_FFT, default OFF
    • If ENABLE_FFT is set, Heffte_ENABLE_CUDA will default to ON if IPPL_PLATFORMS contains cuda
    • Otherwise, Heffte_ENABLE_AVX2 is enabled. FFTW has to be enabled explicitly.
  • Heffte_ENABLE_FFTW, default OFF
  • ENABLE_TESTS, default OFF
  • ENABLE_UNIT_TESTS, default OFF
  • ENABLE_ALPINE, default OFF
  • USE_ALTERNATIVE_VARIANT, default OFF. Can turned on for GPU builds where the use of the system-provided variant doesn't work.

Furthermore, be aware of CMAKE_BUILD_TYPE, which can be either

  • Release for optimized builds
  • RelWithDebInfo for optimized builds with debug info (default)
  • Debug for debug builds (with Sanitizers enabled)

Examples

Download and setup a build directory:

https://github.com/IPPL-framework/ippl
cd ippl
mkdir build
cd build

Serial debug build with tests and newest Kokkos

cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=20 -DENABLE_TESTS=True -DKokkos_VERSION=4.2.00

OpenMP release build with alpine and FFTW

cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=20 -DENABLE_FFT=ON -DENABLE_SOLVERS=ON -DENABLE_ALPINE=True -DENABLE_TESTS=ON -DIPPL_PLATFORMS=openmp -DHeffte_ENABLE_FFTW=True

Cuda alpine release build

cmake .. -DCMAKE_BUILD_TYPE=Release -DKokkos_ARCH_[architecture]=ON -DCMAKE_CXX_STANDARD=20 -DENABLE_FFT=ON -DENABLE_TESTS=ON -DUSE_ALTERNATIVE_VARIANT=ON -DENABLE_SOLVERS=ON -DENABLE_ALPINE=True -DIPPL_PLATFORMS=cuda

HIP release build (LUMI)

cmake .. \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_CXX_STANDARD=20 \
      -DCMAKE_CXX_COMPILER=hipcc \
      -DBUILD_SHARED_LIBS=ON \
      -DCMAKE_HIP_ARCHITECTURES=gfx90a \
      -DCMAKE_HIP_FLAGS=--offload-arch=gfx90a \
      -DKokkos_ENABLE_DEBUG_BOUNDS_CHECK=ON \
      -DKokkos_ENABLE_DEBUG=OFF \
      -DKokkos_ARCH_ZEN3=ON \
      -DKokkos_ARCH_AMD_GFX90A=ON \
      -DKokkos_ENABLE_HIP=ON \
      -DIPPL_PLATFORMS="HIP;OPENMP" \
      -DENABLE_TESTS=ON \
      -DENABLE_FFT=ON  \
      -DENABLE_SOLVERS=ON \
      -DENABLE_ALPINE=OFF \
      -DHeffte_ENABLE_ROCM=ON\
      -DHeffte_ENABLE_GPU_AWARE_MPI=ON \
      -DCMAKE_EXE_LINKER_FLAGS="-L/opt/cray/pe/mpich/8.1.28/ofi/amd/5.0/lib -L/opt/cray/pe/mpich/8.1.28/gtl/lib -L/opt/cray/pe/libsci/24.03.0/AMD/5.0/x86_64/lib -L/opt/cray/pe/dsmml/0.3.0/dsmml
/lib -L/opt/cray/xpmem/2.8.2-1.0_5.1__g84a27a5.shasta/lib64 -lsci_amd_mpi -lsci_amd -ldl -lmpi_amd -lmpi_gtl_hsa -ldsmml -lxpmem -L/opt/rocm-6.0.3/lib/lib -L/opt/rocm-6.0.3/lib/lib64 -L/opt/roc
m-6.0.3/lib/llvm/lib"

[architecture] should be the target architecture, e.g.

  • PASCAL60
  • PASCAL61
  • VOLTA70
  • VOLTA72
  • TURING75
  • AMPERE80
  • AMPERE86
  • AMD_GFX90A (LUMI)

Participating organisations

Forschungszentrum Jülich
Paul Scherrer Institute
University of St Andrews

Reference papers

Contributors

SM
Sonali Mayani
MF
Matthias Frey
Core Developer / Maintainer
University of St Andrews
AV
Alessandro Vinciguerra
Contributor
SM
Sriramkrishnan Muralikrishnan
Core Developer / Maintainer
Jülich Supercomputing Centre
AA
Andreas Adelmann
Core Developer / Maintainer
Paul Scherrer Institute
FS
Felix Schurk
Contributor
MS
Mohsen Sadr
VM
Veronica Montanaro
Contributor
Swiss Federal Laboratories for Materials Science and Technology (Empa)
RA
Ryan Sean Ammann
ML
Michael Ligotino
Contributor
TS
Timo Schwab
Contributor
TC
Tobia Claglüna
Contributor

Helmholtz Program-oriented Funding IV

Research Field
Research Program
PoF Topic
5 Information
5.1 Engineering Digital Futures: Supercomputing, Data Management and Information Security for Knowledge and Action
5.1.1 Enabling Computational- & Data-Intensive Science and Engineering
  • 5 Information
    • 5.1 Engineering Digital Futures: Supercomputing, Data Management and Information Security for Knowledge and Action
      • 5.1.1 Enabling Computational- & Data-Intensive Science and Engineering