Simulations with MPI

The package is designed so that the same core functions are used and only a small backend handles the differences between MPI or multithreading. This means, the development goal was:

Code that runs with multithreading should also work with MPI without changes!

However, currently not all features are supported with MPI. A table with an overview is shown below.

Currently supported features:

Job typeMPI
Job(::Body, ::VelocityVerlet)
Job(::Body, ::DynamicRelaxation)
Job(::MultibodySetup, ::VelocityVerlet)

Setting up simulations for MPI

If a script containing a simulation runs with multithreading and the features are supported with MPI, then this same script can be run with:

mpiexecjl -n <number of ranks> julia --project path/to/script.jl

Please refer to the MPI.jl documentation of mpiexecjl for installation and setup instructions.

Furthermore, there are helper functions that improve the setup of MPI simulations, such as enable_mpi_timers!, @mpiroot, @mpitime, or mpi_isroot.