![]() |
ORB5
v4.9.4
|
Description of the parallel programming models in Orb5.
MPI is used in ORB5 for the domain cloning and domain decomposition. Modern Fortran should use the F2008 use mpi_f08 fortran bindings, which allow for extensive type checking at compile time (using GCC >= 10 implies doing this or requiring a workaround). Previously (before 2021), ORB5 used the F90 use mpi fortran bindings, in which most MPI options are of type integer, which limits the extent of compile time checking. Unfortunately, support of the mpi_f08 option is not universal, especially from vendors such as Cray. Therefore, in order to support systems where use mpi_f08 is not available, we implement fallback options for the use mpi interface.
include "precomp.h".USE_MPI will resolve to use mpi_f08/use mpi depending on the system.MPI_comm_TYPE, MPI_datatype_TYPE, MPI_request_TYPE, MPI_status_TYPE (any additional types should be added following this pattern).use mpi_f08 should add -DNO_MPI_F08 to the FFLAGS.#ifdef NO_MPI_F08 ... #else ... #endif is used to define a different codepath for use mpi_f08 and use mpi.In ORB5, particle loops were ported to both OpenACC and OpenMP. The code was compiled with at most one of these enabled (threads or GPU). We desire the ability to compile parts of the CPU part of the code with OpenMP support when running the particle loops on GPUs. This was not possible with the original nesting of both OpenACC and OpenMP directives around the particle loops.
!$omp to !pomp.include "precomp.h".parallelp_nthreads (particles) and parallelnthreads (non-particles).OMP5 branch.cyclone.in and TAE_pb.in test files.