MVAPICH2

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Autres langues :anglais 100% • ‎français 100%

Sommaire

Description

MVAPICH2 (prononcé em-vah-pich) est une version performante de MPI. Cette bibliothèque est basée sur MPICH, dont le nom vient de l'association de MPI et de chameleon (mot anglais pour caméléon) indiquant la portabilité de cette version de MPI. La version de MPICH adapté à l'interface Vapi d'InfiniBand a reçu le nom MVAPICH. Notez, toutefois, que les versions actuelles de MVAPICH ne sont pas restreintes à l'interface Vapi. La première version de MVAPICH suivait la première norme de MPI. Le chiffre deux fut ajouté à la version de la bibliothèque qui respectait la deuxième norme MPI. La version la plus récente de MVAPICH2 (1.9) respecte plusieurs éléments de la norme MPI3. Avec les années, le nom de la bibliothèque est devenu une piètre description de ce qu'elle est vraiment.

La version la plus récente de la bibliothèque ainsi que la documentation de MVAPICH2 sont disponibles en ligne sur le site de Ohio State University.

Avantages et inconvénients

MVAPICH2 est conçu pour l'infiniBand. Cette bibliothèque est parmi les plus rapides implantations de MPI. En comparaison avec Open MPI, MVAPICH2 possède moins de paramètres qui ne sont fixés qu'au moment de l'exécution. Selon les versions les plus récentes, MVAPICH2 accepte plus d'éléments da la norme 3 de MPI.

Compilateurs encapsulés

Comme plusieurs autres, MVAPICH2 vient avec des compilateurs encapsulés facilitant la compilation d'un code. Pour compiler un code C, on utilise mpicc, pour un code C++, on utilise mpicxx, et pour le Fortran, on utilise mpif90.

Les commandes de compilation interprètent certaines options supplémentaires qui s'avèrent utiles lorsqu'on éprouve des difficultés à la compilation.

Option Description
-show Affiche les commandes exécutées (mais sans les exécuter)
-compile_info Affiche les étapes de compilations
-link_info Affiche la commande d'édition de lien
-cc={compilateur} Permet de choisir un compilateur différent (à utiliser avec précaution)

Configuration de clés SSH

Les commandes mpirun et mpiexec de MVAPICH2 utilisent SSH pour lancer les processus MPI. Pour les utiliser, selon les serveurs, il peut donc être nécessaire de Générer des clés SSH dans votre compte. La version de mpiexec fournie par OSC, documentée ci-dessous, n'a pas ce prérequis.

Exécution avec mpiexec de la version par défaut

Contrairement à mpirun documenté ci-dessous, la commande mpiexec de MVAPICH2 ne requiert pas le démarrage de démons MPD. L'exécution se fait simplement via la commande

[nom@serveur $] mpiexec hello-mpi


Équivalences entre les options d'Open MPI avec les option de MVAPICH2

Pour les habitués d'Open MPI, voici certaines équivalences pour l'utilisation de MVAPICH2.

Open MPI MVAPICH
mpicc -showme mpicc -show
mpiexec --report-bindings ... export MV2_SHOW_CPU_BINDING=1
mpiexec --output-filename out.txt mpiexec -outfile-pattern out.txt.%g.%r
mpiexec --bind-to-socket mpiexec -bind-to-socket
mpiexec -npersocket 1 mpiexec -ppn 2 (pour un nœud à deux sockets)

Exécution avec mpirun de la version par défaut

Si vous utilisez Briarée ou Guillimin vous pouvez passer à la section suivante, car vous utilisez probablement la commande mpiexec de OSC. Si vous n'êtes pas sûr, faites la commande :

[nom@serveur $] mpiexec -version


Si vous voyez le mot HYDRA au début de l'information vous utilisez la version par défaut, sinon vous utilisez la version d'OSC.

Démons MPD

MVAPICH2, tout comme MPICH2, utilise des démons pour gérer les processus sur chaque nœud (un démon par nœud). On appelle ces démons MPD (MPI Process Manager Deamons). Il faut donc démarrer les démons dans un premier temps avant d'exécuter la tâche. Votre fichier de soumission devrait contenir des instructions similaire à celles-ci :

Fichier : pbs.sh
#PBS -l walltime=1:00:00
#PBS -j oe
#PBS -N maTache
cd $PBS_O_WORKDIR
 
# définit le nombre de processus par nœud
ppn=6
 
# Ajuste le nombre de fils d'exécution (si hybride)
# Remplacer le nombre 24 par le nombre de cœurs par nœud sur votre système
export OMP_NUM_THREADS=$[24/ppn]
 
# Démarre les démons de MVAPICH
mpdboot -n $PBS_NUM_NODES -f $PBS_NODEFILE > /dev/null 2>&1
 
# Lance l'exécution
mpiexec -f $PBS_NODEFILE -n $[PBS_NUM_NODES*ppn] -ppn $ppn -env OMP_NUM_THREADS ./monApplication


Aucune option n'est nécessaire. Par défaut le nombre de processus sera égal au nombre de cœurs disponibles. Les principales options utilisées sont données dans le tableau suivant :

Option Description
-n nombre Indique le nombre total de processus
-f fichier Indique le nom du fichier contenant la liste des nœuds à utiliser.
-env variable Variable d'environnement à propager.

Distribution des processus

Contrairement à Open MPI, par défaut MVAPICH2 distribue les processus d'un cœur à un cœur voisin. Cette façon de faire s'avère performante pour des codes purement MPI, mais moins performant pour les codes hybrides. Dans ce dernier cas, si l'on n'y porte pas attention, certains nœuds feront tout le travail alors que les autres n'auront rien à faire. Il y a une option équivalente à npernode qui se nomme ppn (processus par nœud). Par exemple, pour soumettre 16 processus sur deux nœuds en raison de huit processus par nœud, on utilise la commande :

[nom@serveur $] mpiexec -n 16 -ppn 8 ./mon_application


La distribution des processus peut être contrôlée par des variables d'environnement. La variable MV2_CPU_BINDING_POLICY prend les valeurs bunch ou scatter. La valeur bunch correspond à la distribution par défaut, tandis que la valeur scatter correspond à la distribution utilisée par Open MPI. Pour utiliser cette dernière, il suffit de l'indiquer sur la ligne de commande :

[nom@serveur $] mpirun -n 16 -env MV2_CPU_BINDING_POLICY scatter ./mon_application


Une autre variable d'environnement permet un contrôle plus précis de la distribution des processus. Celle-ci permet d'améliorer la performanceœ lorsqu'on utilise un code hybride. Cette variable permet de fixer des processus à des cœurs précis. Par exemple, si on a un nœud à 12 cœurs et que l'on veut que le processus 0 utilise les cœurs 0 à 2, que le processus 1 utilise les cœurs 3 à 5 et ainsi de suite on utilisera la commande suivante :

[nom@serveur $] mpirun -n 4 -env MV2_CPU_MAPPING 0,1,2:3,4,5:6,7,8:9,10,11 ./mon_application


Exécution avec mpiexec de OSC

Sur certains serveurs, en l'occurence Briarée, la version de mpiexec utilisée n'est pas celle par défaut, mais est plutôt celle de OSC. L'utilisation de cette dernière est très semblable à l'utilisation de Open MPI. Cette version est adaptée pour les systèmes utilisant PBS comme gestionnaire de tâches. Par exemple, il n'est pas nécessaire de lui passer la liste des nœuds réservés pour la tâche.

Les principales options sont:

Option Description
-n nombre Indique le nombre total de processus
-verbose Informe sur les opérations faits par mpiexec
-npernode nombre Nombre de processus par nœud
Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager