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