Skip to content

ImplicitGlobalGrid.jlDistributed parallelization of stencil-based GPU and CPU applications

Close to ideal weak scaling on thousands of GPUs.

ImplicitGlobalGrid.jl

What is ImplicitGlobalGrid.jl? โ€‹

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.

Installation โ€‹

ImplicitGlobalGrid can be installed directly with the Julia package manager from the Julia REPL:

julia
import Pkg; Pkg.add("ImplicitGlobalGrid")

Dependencies โ€‹

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 [1, 2]) and the Julia AMDGPU package (AMDGPU.jl), and multi-threaded CPU halo copies through Polyester.jl.

Contributors โ€‹

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

Questions, comments and discussions โ€‹

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.

Contributing โ€‹

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).

Citing โ€‹

If you use ImplicitGlobalGrid in your work, please cite [3]. The BibTeX entry and further publications are found in the References.

Funding โ€‹

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.