Corentin Cadiou\({}^1\) (cadiou@iap.fr)
Lead developers: Maxime Delorme (CEA), Arnaud Durocher (CEA)
Scientific collaborators:
Dominique Aubert (ObAS), Olivier Marchal (ObAS), San Han (IAP), Guillaume Tcherniatinsky (IAP), Harley Katz (U. Chicago), …
\({}^1\)Institut d’Astrophysique de Paris, CNRS, France
Credits: M. Delorme
Data: Top-500
Manage grid, simple computation
Computation-heavy
(hydro, gravity, …)
CPU
GPU
[…]
wasted
time
wasted
time
Typical approach: offloading
Dyablo's approach:
Amdahl's law: latency kills gains of parallelisation
Manage grid, simple computation
Computation-heavy
(hydro, gravity, …)
CPU
GPU
(or CPUs)
[…]
Typical approach: offloading
Dyablo's approach: “true” GPU computing, CPU as a puppeteer
Manage grid, simple computation
Computation-heavy
(hydro, gravity, …)
[…]
Typical approach: offloading
Dyablo's approach: “true” GPU computing, CPU as a puppeteer
Physicists: write subgrid models
Computer scientists:
optimize the code
Physics: independent of data layout, parallelization, ...
Code should provide high-level APIs
Implementations & models should be interchangeable depending on needs
CPU
GPU
(or CPUs)
Cell or block-based
Adaptive Mesh Refinement
Collection of \(N\times M\times L\) blocks
Traditional oct-based AMR
[...]
// Memory abstracted
Kokkos::View<double**> U(Ncell, Nfields);
// Parallelism abstracted
Kokkos::parallel_for(Ncell, KOKKOS_LAMBDA(size_t iCell) {
U(iCell, IRho) += ...
});
[...]or
or
Single node / GPU
[...]
// Memory abstracted
Kokkos::View<double**> U(Ncell, Nfields);
// Parallelism abstracted
Kokkos::parallel_for(Ncell, KOKKOS_LAMBDA(size_t iCell) {
U(iCell, IRho) += ...
});
[...][...]
// Memory abstracted
Kokkos::View<double**> U(Ncell, Nfields);
// Parallelism abstracted
Kokkos::parallel_for(Ncell, KOKKOS_LAMBDA(size_t iCell) {
U(iCell, IRho) += ...
});
[...][...]
// Memory abstracted
Kokkos::View<double**> U(Ncell, Nfields);
// Parallelism abstracted
Kokkos::parallel_for(Ncell, KOKKOS_LAMBDA(size_t iCell) {
U(iCell, IRho) += ...
});
[...][...]
// Memory abstracted
Kokkos::View<double**> U(Ncell, Nfields);
// Parallelism abstracted
Kokkos::parallel_for(Ncell, KOKKOS_LAMBDA(size_t iCell) {
U(iCell, IRho) += ...
});
[...][...]
// Memory abstracted
Kokkos::View<double**> U(Ncell, Nfields);
// Parallelism abstracted
Kokkos::parallel_for(Ncell, KOKKOS_LAMBDA(size_t iCell) {
U(iCell, IRho) += ...
});
[...]Solar convection (Delorme)
Zeldovich pancake (Aubert & Marchal)
Halo mass function (Aubert & Marchal)
Thermochem. (Cadiou & Katz)
KH instability (Delorme)
— weak scaling: solar convection
Image credits: Maxime Delorme
Ad Astra CPU (2 x AMD Epyc Genoa 96 cores )
24,576 cores
Ad Astra GPU (4 AMD MI250 x2 GCD )
Note: some updates in the code between left & right, raw perfs cannot be compared directly
Hydro only: \(\sim 200\,\mathrm{Mcell/s}\)
AthenaK \(\sim1000\,\mathrm{Mcell/s}\), Stone+24
Cholla-MHD \(\sim 200\, \mathrm{Mcell/s}\), Caddy+24,
AREPO-RT \(\sim 1\,\mathrm{Mcell/s}\), Zier+24
Shamrock \(\sim 10\,\mathrm{Mcell/s}\), David-Cléris+25
13,631,488 “cores”
Physics: hydrodynamics, MHD, RT, gravity, cosmology, ...
Efficient scaling up to 10,000+ CPUs, 1000+ GPUs
Modular and future-proof code
Credits: M. Delorme
Dyablo-HPC/Dyablo
Corentin Cadiou (cadiou@iap.fr)