Outils pour utilisateurs

Outils du site


mpi

Ceci est une ancienne révision du document !


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
mpi.1541889677.txt.gz · Dernière modification : 2018/11/10 22:41 de jjli