Exécution Mixte (hybride) MPI et OpenMP avec attachement des processus et des threads (Olympe)
Article mis en ligne le 22 juillet 2019
dernière modification le 12 août 2020
A travers des exemples nous montrons le moyens d’exécuter des jobs mixtes MPI+OpenMP, en attachant explicitement les processus et les threads aux cœurs physiques des nœuds.
Premier exemple
- Job MPI+OpenMP avec 36 processus MPI en tout et 2 threads par processus MPI
- On réserve 2 nœuds
- 18 processus MPI par nœud et 2 threads openMP par processus MPI
-N |
Nombre de nœuds |
-n |
Nombre de tà¢ches MPI |
--ntasks-per-node= |
Nombre de tà¢ches MPI par nœud (doit correspondre au nombre de total de tà¢ches MPI divisé par le nombre de nœuds) |
--threads-per-core= |
Nombre de threads par core (pas d’utilisation de l’hyperthreading) (Valeur à laisser à 1) |
--cpus-per-task= |
Nombre de threads par processus MPI |
variable slurm SLURM_CPUS_PER_TASK |
contient le nombre défini pour —cpus-per-task |
Définition de l’environnement du calcul (compilateur et bibliothèque MPI) :
Préparation :
Obligatoire :
OMP_NUM_THREADS |
Nombre de threads OpenMP par processus(tà¢che) MPI |
SLURM_CPUS_PER_TASK |
Variable SLURM définissant le nombre de core réservé par processus MPI |
Second exemple
- Job MPI+OpenMP avec 10 processus MPI en tout et 18 threads par processus MPI
- On réserve 5 nœuds
- 2 processus MPI par nœud et 18 threads openMP par processus MPI