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