Environment variables#

SeisSol can be tuned with several environment variables.

Communication thread#

By default, any SeisSol run with more than one MPI rank will use a communication thread to advance the MPI progress engine. For that, it is required to leave at least one thread vacant in your OpenMP thread placing map, cf. the SuperMUC-NG example below.

If you do not want to use a communication thread, you may set SEISSOL_COMMTHREAD=0 to make SeisSol poll the progress from time to time.

Load balancing#

When running with multiple ranks, SeisSol will estimate the node-level performance, enabling better load balancing. For that, it runs the so-called “Mini SeisSol” benchmark. As its name already hints, it simulates a small test workload on each node; thus estimating the performance of all nodes relative to each other. The number of elements per node assigned during the partitioning will be resized according to these values.

As a result, the partitioning of runs may become non-deterministic, and the initialization procedure may take a little longer, especially when running only on a single node with multiple ranks. To disable it, set SEISSOL_MINISEISSOL=0.

Persistent MPI operations#

Since SeisSol has a static communication pattern which means, we issue the same MPI transfer requests. Thus, we use persistent MPI communication which may reduce communication latency.

To disable persistent communication, set SEISSOL_MPI_PERSISTENT=0. Then, SeisSol will use MPI_Isend and MPI_Irecv instead. To explicitly enable the persistent communication, set SEISSOL_MPI_PERSISTENT=1. Right now, it is enabled by default.

GPU-Specific Environment Variables#

GPU-specific environment variables are listed on its own page.

Output#

The wave field and fault output use the XdmfWriter. Tuning variables for the XdmfWriter are listed in the corresponding wiki.

Asynchronous output#

In addition to the variables in SeisSol, the ASYNC library provides some tuning variables listed in the wiki.

Optimal environment variables on SuperMUC-NG#

On SuperMUC-NG, we recommend using SeisSol with async output in thread mode. Also, we recommend using hyperthreading capabilities (that is, using 96 CPUs instead of 48. 2 threads out of 96 are used as communication threads). Here are some proposed environment variables to be added before invoking SeisSol in your batch file:

export MP_SINGLE_THREAD=no
unset KMP_AFFINITY
export OMP_NUM_THREADS=94
export OMP_PLACES="cores(47)"

export XDMFWRITER_ALIGNMENT=8388608
export XDMFWRITER_BLOCK_SIZE=8388608
export SC_CHECKPOINT_ALIGNMENT=8388608
export SEISSOL_CHECKPOINT_ALIGNMENT=8388608
export SEISSOL_CHECKPOINT_DIRECT=1

export ASYNC_MODE=THREAD
export ASYNC_BUFFER_ALIGNMENT=8388608

A complete batch script for SuperMUC-NG can be found in the chapter about SuperMUC-NG.

In previous versions of SeisSol, you had to explicitly compile the software with -DCOMMTHREAD=ON. That is not necessary anymore, as any configuration with more than one MPI rank uses the communication thread by default.