(EOS) Exécution Mixte (hybride) MPI et OpenMP avec attachement des processus et des threads

A travers des exemples nous montrons le moyens d’exécuter des jobs Mixte MPI+OpenMP, en attachement explicitement les processus et les threads aux cores physiques des noeuds.

Article mis en ligne le 15 octobre 2014
dernière modification le 4 avril 2017
logo imprimer

Avec IntelMPI

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 20 processus MPI en tout et 2 threads par processus MPI
  • On réserve 2 nœuds
  • 10 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
  • Ci-dessous nous utilisons le principe de masque (mask_cpu) afin d’attacher les threads OpenMP aux cores physiques du noeud.
  • ci-dessous après "mask_cpu :" il y a 10 masques qui sont définis pour chaque process MPI par noeud (dans ce cas 10). Les masques sont séparés par des virgules.

export nécessaire, lié à la bibliothèque MPI et à l’utilisation de la commande srun :

  • Il est possible de faire exactement la même chose mais de manière plus conviviale en utilisant la commande placement  :

Second exemple

  • Job MPI+OpenMP avec 20 processus MPI en tout et 10 threads par processus MPI
  • On réserve 10 nœuds
  • 2 processus MPI par nœud et 10 threads openMP par processus MPI
  • Ci-dessous nous utilisons le principe de masque (mask_cpu) afin d’attacher les threads OpenMP aux cores physiques du nœud.
  • Il est possible de faire exactement la même chose mais de manière plus conviviale en utilisant la commande placement  :


Site réalisé sous SPIP
avec le squelette ESCAL-V3
Version : 3.86.44
Hébergeur : INP Toulouse