Utilisation de srun en mode "multi-programme"

Il peut arriver que l’on ait besoin de lier plusieurs exécutables différents au sein d’un unique lancement MPI, de sorte à ce que des processus issus de différents binaires partagent un communicateur commun.

Avec srun, cela peut être réalisé avec l’option --multi-prog.

Par exemple, on souhaite lancer un calcul sur un nœud, constitué de 18 processus issus du binaire prog1.exe et 18 processus issus du binaire prog2.exe.

Il suffit alors de donner en option à srun un fichier contenant la liste des couples numéro de tâche MPI - nom de l’exécutable.

cat /dev/null > prog.conf

echo "0-17 ./prog1.exe" >> prog.conf
echo "18-35 ./prog2.exe" >> prog.conf

srun --multi-prog prog.conf

Un exemple concret:

Ci-dessous un exemple concret d’utilisation avec le code de calcul NEMO, qui utilise un outil spécifique pour effectuer des entrées/sorties parallèles, XIOS.

On souhaite ici lancer NEMO (nemo.exe, code de calcul) conjointement avec XIOS (xios_server.exe, serveur d’IO parallèle), de sorte à ce que l’on ait un seul processus XIOS par nœud, les autres étant des processus NEMO.

cat /dev/null > prog.conf

for i in $(eval echo "{1..$SLURM_NNODES}")
do
     for j in {0..34}
     do
         echo "$(($SLURM_NTASKS_PER_NODE * ($i-1) + $j)) ./nemo.exe" >> prog.conf
     done
     echo "$(($SLURM_NTASKS_PER_NODE * ($i-1) + 35)) ./xios_server.exe" >> prog.conf
done

srun --multi-prog prog.conf

 

Voir aussi

FAQ

Questions fréquentes et messages d'erreurs

L’outil placement

Contrôler le placement d’un job hybride Il est particulièrement important de contrôler le placement de ses threads dans le cas d’un job hybride (openmp + mpi).