6.2.6. Parallelization options

The ParallelLevels block provides fine control over how ParAMS parallelizes the optimization at various levels. The most important option is ParallelLevels%Optimizations which allows you to run multiple optimizers in parallel.

The total number of cores required to satisfy a ParallelLevels configuration is the product of all the levels. For example, the unrealistic setup below implicitly expects a \(6 \times 5 \times 4 \times 3 \times 2 = 720\) core system:

ParallelLevels
    Optimizations 6
    ParameterVectors 5
    Jobs 4
    Processes 3
    Threads 2
End

This configuration will run 6 optimizers in parallel. Each optimizer will evaluate 5 parameter sets in parallel. For each evaluation 4 jobs will be evaluated simultaneously. For each job, 3 processes will be started. For each process, 2 threads will be used.

Important

Configure the parallelization options with care. In general we recommend to only setting ParallelLevels%Optimizations as appropriate defaults are automatically determined for the other levels. Many optimizers do not support parallel function evaluations, and tuning lower levels is very dependent on the size and properties of your JobCollection.

ParallelLevels
   Optimizations integer
   ParameterVectors integer
   Jobs integer
   Processes integer
   Threads integer
End
ParallelLevels
Type:

Block

GUI name:

Parallelization distribution:

Description:

Distribution of threads/processes between the parallelization levels.

Optimizations
Type:

Integer

Default value:

1

GUI name:

Number of parallel optimizers

Description:

Number of independent optimizers to run in parallel.

ParameterVectors
Type:

Integer

Default value:

0

GUI name:

Loss function evaluations (per optimizer)

Description:

Number of parameter vectors to try in parallel for each optimizer iteration. This level of parallelism can only be used with optimizers that support parallel optimization! Default (0) will set this value to the number of cores on the system divided by the number of optimizers run in parallel, i.e., each optimizer will be given an equal share of the resources.

Jobs
Type:

Integer

Default value:

0

GUI name:

Jobs (per loss function evaluation)

Description:

Number of JobCollection jobs to run in parallel for each loss function evaluation.

Processes
Type:

Integer

Default value:

1

GUI name:

Processes (per Job)

Description:

Number of processes (MPI ranks) to spawn for each JobCollection job. This effectively sets the NSCM environment variable for each job. A value of -1 will disable explicit setting of related variables. We recommend a value of 1 in almost all cases. A value greater than 1 would only be useful if you parametrize DFTB with a serial optimizer and have very few jobs in the job collection.

Threads
Type:

Integer

Default value:

1

GUI name:

Threads (per Process)

Description:

Number of threads to use for each of the processes. This effectively set the OMP_NUM_THREADS environment variable. Note that the DFTB engine does not use threads, so the value of this variable would not have any effect. We recommend always leaving it at the default value of 1. Please consult the manual of the engine you are parameterizing. A value of -1 will disable explicit setting of related variables.