Exécution Mixte (hybride) MPI et OpenMP avec attachement des processus et des threads (Olympe)
Article mis en ligne le 22 juillet 2019

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