GEM Benchmarking
August 3, 2026 ยท View on GitHub
Welcome to the GEM Benchmarking System!
You should have obtained this benchmark from https://github.com/ECCC-ASTD-MRD/gem
Requirements
- Fortran and C compiler. Theses codes have been tested with compilers from GNU and Intel OneAPI (classic and llvm based)
- An MPI implementation such as OpenMPI, MPICH or Intel MPI (with development package)
- OpenMP support
- BLAS, LAPACK or equivalent mathematical/scientific library (ie: MKL), with development package
- fftw3 library (with development package) (tested with 3.3.10)
- CMake (version >= 3.20)
Build and run steps
Compiler specifics
- Compiler specific definitions and flags are defined within the
cmake_rpnsubmodule of each code repository. If you need to change or add any, you can add or modify the rules into[git source path]/cmake_rpn/modules/ec_compiler_presets/default/[architecture]/
Build base library (librmn)
git clone https://github.com/ECCC-ASTD-MRD/librmn.git
cd librmn
git checkout 20.1.0-b8
git submodule update --init --recursive
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=[rmn install directory] ..
make install
Build verification tool (sverif)
git clone https://github.com/ECCC-ASTD-MRD/sverif.git
cd sverif
git checkout benchmark-20260803
git submodule update --init --recursive
mkdir build
cd build
cmake -Drmn_ROOT=[rmn install directory] -DCMAKE_INSTALL_PREFIX=[sverif install directory] ..
make install
export PATH=[sverif install directory]/bin:$PATH
Build model (GEM)
git clone https://github.com/ECCC-ASTD-MRD/gem.git
cd gem
git checkout benchmark-20260803
git submodule update --init --recursive
./download-dbase-benchmarks.sh .
. ./.common_setup [intel|gnu|nvhpc]
mkdir build
cd build
cmake ..
make -j 5
make work
Run model (GEM)
cd ../$GEM_WORK
- The script findtopo will give you the possible CPU decomposition for the GEM_cfgs_GY_4km model configuration (fintopo -h for parameter definitions), ie:
findtopo -npex_low 20 -npex_high 250 -npey_low 20 -npey_high 200 -corespernode 256 -omp 8 -nml $GEM_WORK/configurations/GEM_cfgs_GY_4km/cfg_0000/gem_settings.nml > topo.txt
Run preparation script
runprep.sh -dircfg configurations/GEM_cfgs_GY_4km
- Run model (or submit to queing system):
The -cpus parameters defines the mpi topology and the openmp number of threads [X MPI]x[Y MPI]x[OMP threads] (ie: 61x20x8).
This topology is used for 2 simultaneous model run (Yin+Yang), meaning you will have to use double this number of CPU for the submision/run itself.
In the below example, 9760 cores are needed per sub run, so a total of 19520 cores will be needed.
runmod.sh -dircfg configurations/GEM_cfgs_GY_4km -ptopo 61x20x8
- If you need a job script so you can submit the job to a queuing system, make sure you define the GOAS_SCRIPT variable and load the common setup before running the runmod.sh command:
cd [gem src path]
. ./.common_setup [intel|gnu|nvhpc]
cd $GEM_WORK
runmod.sh -dircfg configurations/GEM_cfgs_GY_4km -ptopo 61x20x8
Run verification (sverif)
- This script will provide a PASS or FAIL rating
cd ..
gem_sverif.sh -p $GEM_WORK -f dp2022040500
- Expected output
sverif_eval.Abs GZ 500 006 work-rhel-9-graniterapids-64-intel-2025.1.0/RUNMOD/output/cfg_0000/laststep_0000000/000-000/dp2022040500 work-rhel-9-graniterapids-64-intel-2025.1.0/sverif/GEM_cfgs_GY_4km-5.3.0-b01
PASS T1 (sverif_eval) GZ [ 500mb; 6h; CI=0.01]
PASS NT1 (sverif_eval) GZ [ 500mb; 6h; CI=0.01]
PASS NT5 (sverif_eval) GZ [ 500mb; 6h; CI=0.01]
PASS R (sverif_eval) GZ [ 500mb; 6h; CI=0.01]
PASS overall (sverif_eval) GZ [ 500mb; 6h; CI=0.01]
PASS T1 (sverif_eval) UU [ 250mb; 6h; CI=0.01]
PASS NT1 (sverif_eval) UU [ 250mb; 6h; CI=0.01]
PASS NT5 (sverif_eval) UU [ 250mb; 6h; CI=0.01]
PASS R (sverif_eval) UU [ 250mb; 6h; CI=0.01]
PASS overall (sverif_eval) UU [ 250mb; 6h; CI=0.01]
PASS T1 (sverif_eval) TT [ 850mb; 6h; CI=0.01]
PASS NT1 (sverif_eval) TT [ 850mb; 6h; CI=0.01]
PASS NT5 (sverif_eval) TT [ 850mb; 6h; CI=0.01]
PASS R (sverif_eval) TT [ 850mb; 6h; CI=0.01]
PASS overall (sverif_eval) TT [ 850mb; 6h; CI=0.01]
(INFO) Passed (passed 12/12)