Programmation en C avec MPI
Exemple de code C utilisant MPI
Un exemple (très simple) de code C utilisant MPI est disponible ici.
Pour le compiler ajoutez les lignes suivantes dans votre fichier .bashrc
if ! (which mpicc>/dev/null 2>&1) && [ -d /usr/lib64/openmpi ]; then export PATH=/usr/lib64/openmpi/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib fi
Elles permettent de compiler et linker avec la bonne version de MPI.
Compilation :
mpicc hello.c -o hello
Script pour lancer un programme MPI sur un seul noeud
SLURM est fait pour fonctionner avec MPI. Par défaut, il lancera autant de processus que de cœurs réservés avec l'option --ntasks
.
Le script suivant exécute le programme précédent sur un seul noeud :
#!/bin/bash # ============= options de sbatch (ici réservation de 32 cores)================== #SBATCH --ntasks=32 # 32 tasks => 32 processus en parallèle #SBATCH --ntasks-per-core=1 # on met une seule task par CPU # =====================ligne de commande ================================== mpirun ./exe
Remarque : On peut utiliser l'option bind-to-core de mpirun pour attacher les processus MPI sur les cœurs.
Script pour lancer un programme MPI en parallèle sur plusieurs noeuds
L'intérêt de la bibliothèque MPI est de pouvoir utiliser plusieurs noeuds en parallèle. Le script suivant montre comment lancer 16 processus en parallèle répartis sur 4 noeuds. Il nécessite de créer au préalable un fichier machine qui contient la liste des machines à utiliser par MPI avec le nombre de processus à lancer sur chacune.
Les options données à SLURM doivent être cohérentes avec les informations contenues dans le fichier machine.
#!/bin/bash #SBATCH --ntasks=16 #SBATCH --ntasks-per-core=1 #SBATCH --job-name=testMPI #SBATCH --nodelist=node22,node23,node24,node25 #le fichier machine contient la liste des machines à utiliser #elle doit être la même que celle définie par nodelist mpiexec -machinefile machine ./hello #REMARQUE 1 : ntasks doit être exactement égal au nb de threads désirés qui doit être égal au nombre de slots #total défini dans le fichier machine #REMARQUE 2 : tous les noeuds sur lesquels vont s'exécuter le programme doivent faire partie de la même partition