ImplicitGlobalGrid.jlDistributed parallelization of stencil-based GPU and CPU applications
Close to ideal weak scaling on thousands of GPUs.
Close to ideal weak scaling on thousands of GPUs.

ImplicitGlobalGrid is an outcome of a collaboration of the Swiss National Supercomputing Centre, ETH Zurich (Dr. Samuel Omlin) with Stanford University and the Geocomputing Centre, University of Lausanne (Dr. Ludovic Räss and Prof. Yuri Podladchikov). It renders the distributed parallelization of stencil-based GPU and CPU applications on a regular staggered grid almost trivial and enables close to ideal weak scaling of real-world applications on thousands of GPUs.
The global computational grid is created implicitly from the number of processes the application is run with: the user writes a code for one GPU/CPU (local grid); then, as little as three functions can be enough to transform it into a massively scaling Multi-GPU/CPU application. Halo updates rely on MPI.jl and can leverage CUDA-aware or ROCm-aware MPI. 1-D, 2-D and 3-D grids are supported. See the Overview for more details.
ImplicitGlobalGrid can be installed directly with the Julia package manager from the Julia REPL:
import Pkg; Pkg.add("ImplicitGlobalGrid")ImplicitGlobalGrid relies on the Julia MPI wrapper (MPI.jl) and CellArrays.jl; GPU support is provided through package extensions for the Julia CUDA package (CUDA.jl [5, 6]) and the Julia AMDGPU package (AMDGPU.jl), and multi-threaded CPU halo copies through Polyester.jl.
The principal contributors to ImplicitGlobalGrid.jl are (ordered by the significance of the relative contributions):
Dr. Samuel Omlin (@omlins), CSCS (Swiss National Supercomputing Centre), ETH Zurich
Dr. Ludovic Räss (@luraess), Geocomputing Centre, University of Lausanne
Dr. Ivan Utkin (@utkinis), Laboratory of Hydraulics, Hydrology, Glaciology, ETH Zurich
To discuss technical issues, please post on Julia Discourse in the GPU topic or the Julia at Scale topic or in the #gpu or #hpc channels on the Julia Slack. To discuss numerical/domain-science issues, please post on Julia Discourse in the Numerics topic or the Modelling & Simulations topic or whichever other topic fits best your issue.
Contributions are welcome, be it new examples, convenience features or core improvements! Please open an issue to discuss your idea beforehand. A pull request should address an issue in its completeness and blend nicely into the existing project (community guidelines such as ColPrac can serve as inspiration).
The development of this package is supported by the GPU4GEO and ∂GPU4GEO PASC projects. More information about the GPU4GEO project can be found on the GPU4GEO website.