Outils pour utilisateurs

Outils du site


mpi

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
mpi [2018/05/15 10:26] – créée hetoussampi [2019/06/05 13:37] (Version actuelle) borlonjo
Ligne 1: Ligne 1:
 ====== Programmation en C avec MPI ====== ====== Programmation en C avec MPI ======
 +
 +===== Exemple de code C utilisant MPI =====
 +
 +Un exemple (très simple) de code C utilisant MPI est disponible [[http://fc.isima.fr/~toussain/docWiki/MPI/hello.c|ici]].
 +
 +Pour le compiler ajoutez les lignes suivantes dans votre fichier .bashrc
 +<code bash>
 +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
 +</code>
 +
 +Elles permettent de compiler et //linker// avec la bonne version de MPI.
 +
 +Compilation : <code bash>mpicc hello.c -o hello</code>
 +
 +
 +===== 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 ''<nowiki>--ntasks</nowiki>''
 +Le script suivant exécute le programme précédent sur un seul noeud :
 +
 +
 +<code bash>
 +#!/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
 +
 +</code>
 +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 [[http://fc.isima.fr/~toussain/docWiki/MPI/machine|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.
 +
 +<code bash>
 +#!/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
 +
 +</code>
mpi.1526380017.txt.gz · Dernière modification : 2018/10/11 20:49 (modification externe)