Outils pour utilisateurs

Outils du site


mpi:openmpi:start

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:openmpi:start [2018/02/16 19:11]
montap01 créée
mpi:openmpi:start [2018/04/10 17:09] (Version actuelle)
montap01 [Compiler avec GCC + OpenMPI]
Ligne 7: Ligne 7:
  
 <note warning> <note warning>
-La version OpenMPI disponible est relativement ancienne (1.8.2), datant de l'installation du cluster...+Les versions OpenMPI disponibles :  
 +  * 1.8.2 : version d'origine datant de l'installation du cluster 
 +  * 1.10.7
 </note> </note>
  
Ligne 15: Ligne 17:
  
 ===== OpenMPI et Slurm ===== ===== OpenMPI et Slurm =====
-OpenMPI est compilé avec le support de PMI (//Process +OpenMPI est compilé avec le support de PMI (//Process Management Interface//). Voir [[..:lancement]] 
 + 
 +En résumé, PMI permet de laisser Slurm lancer les processus, via la commande ''srun'' en général. La phase d'initialisation MPI découvrira les autres processus grâce à des appels à la librairie PMI (livrée avec Slurm)
  
 ===== Réseau Infiniband ===== ===== Réseau Infiniband =====
-Pour comprendre pourquoi il est préférable d'utiliser Intel MPI, il faut connaître [[:materiel-cali2#reseau_infiniband | le réseau Infiniband de notre cluster]] +https://www.open-mpi.org/faq/?category=tuning
-  * Les cartes de connexion au réseau Infiniband sont des //Host Channel Adapter// (HCA) ''QLogic IBA7322 QDR'' et le commutateur est un Intel True Scale 12300 +
-  * Ce réseau est basé sur l'architecture [[http://www.intel.com/content/www/us/en/infiniband/truescale-infiniband.html | Intel True Scale]] +
-  * Pour obtenir la meilleure performance sur ce réseau, il faut utiliser la couche logicielle //Performance Scaled Messaging// (PSM) +
-  * La librairie Intel MPI est configurée pour utiliser PSM (voir article [[Fabric]])+
  
-==== Avantages de l'architecture True Scale ==== +OpenMPI est construit sous forme d'une architecture modulaire (//Modular Component Architecture -- MCA//). Cette architecture permet de construire dynamiquement, à l'exécutionles modules utilisés par un processus. La librairie est divisé en 3 parties :  
-  * Fonctionne en mode non connectéassurant ainsi une plus faible latence +  * OMPI : partie MPI 
-  * Optimisation grâce à PSMplus performant que la librairie //verbs// traditionnelle utilisée précédemment en Infiniband +  * ORTE : run-time layer  
-===== Configurer votre environnement===== +  * OPAL : operating system / platform layer
-  * L'environnement pour utiliser les librairies MPI est paramétré sur CALI à travers des [[:modules]] +
-  * Vous ne devez donc pas suivre la documentation d'Intel concernant la configuration de votre environnement (n'utilisez pas ''mpivars.sh'') +
-  * Le module pour la dernière version stable d'Intel MPI est automatiquement chargé quand vous vous connectez à CALI+
  
 +Pour chacune de ces parties, il y a plusieurs //frameworks//, pour gérer tel ou tel aspect. Chaque framework contiendra 0 ou plusieurs //Components//, chacun avec un ou plusieurs //modules// (instances).
  
-===== Compiler ===== +Pour en revenir au réseau Infiniband :  
-Pour compiler votre programme MPI, il faut utiliser les commandes ''mpi//xxxx//''où ''//xxxx//'' est le nom du "vrai" compilateur que vous désirez utiliserExemples : +  * OpenMPI peut utiliser le réseau Infiniband, à travers l'implémentation OpenFabrics 
-  * ''mpiifort'' pour utiliser le compilateur Intel Fortran ''ifort'' +  * le choix de la Fabric est pris par le framework //btl// : on peut indiquer, à l'exécutionde charger tel ou tel //component// (tcp, openib, ...) pour ce framework
-  * ''mpiicc'' pour utiliser le compilateur Intel C/C%%++%% ''icc'' +
-  * ''mpigcc'' pour utiliser le compilateur GNU C+
  
-==== Thread ou pas threads ? ==== +Mais en simplifié : normalement, OpenMPI est "intelligent" et sélectionne automatiquement la Fabric la plus rapide, donc Infiniband, si celle-ci est disponible, et passera uniquement en TCP sinon.
-La compilation est faite par défaut avec la librairie MPI //threadée//.+
  
-==== Avec OpenMP ==== +Voir https://www.open-mpi.org/faq/?category=tcp#tcp-auto-disable 
-  * Vous pouvez utiliser des appels MPI **à l'intérieur** de sections OpenMP + 
-  * **Mais** vous devez dans ce cas précis utiliser la version //thread-safe// de la librairie MPI via ''-mt_mpi''  +===== Compiler avec GCC + OpenMPI ===== 
-  * Notez bien que ce cas ne concerne pas les codes ayant des sections OpenMP dans des processus MPI sans appel MPI à l'intérieur de ces sections+Il faut d'abord décharger les modules Intel, charger l'implémentation OpenMPI en choisissant la version souhaitée : 
 +  module unload configuration 
 +  module load mpi/openmpi/1.8.2-gcc64 
 + 
 +La commande ''ompi_info'' donne des infos sur la librairie OpenMPI, dont les modules disponibles. 
 + 
 + 
 +Pour compiler votre programme MPI, il faut utiliser les commandes ''mpi//xxxx//'', où ''//xxxx//'' est le nom du "vrai" compilateur que vous désirez utiliser. Exemples : 
 +  * ''mpifort'' pour utiliser le compilateur GNU Fortran ''fort'' 
 +  * ''mpicc'' pour utiliser le compilateur GNU C ''gcc'' 
 +  * ''mpiCC'' pour utiliser le compilateur GNU C++ ''g++''
  
 ===== Exécuter ===== ===== Exécuter =====
-  * Sur notre cluster, l'exécution du code MPI est prise en charge par la commande ''srun'' + 
-  * Au sein d'un fichier batch, la commande trouvera automatiquement le nombre adéquat de processus à lancer, en fonction des ressources demandées +
-  * L'environnement est configuré via les //module// pour qu'Intel MPI utilise la librairie PMI (Process Management Interface) de slurm (variable ''I_MPI_PMI_LIBRARY'')+
 ==== Fichier batch ==== ==== Fichier batch ====
-Un exemple de fichier batch est disponible sur [[:slurm:slurm-mpi]] +<file bash> 
-===== Plus de détails =====+#!/bin/bash 
 +
 +#SBATCH --ntasks=4 
 +#SBATCH --time 00:01:00 
 +#SBATCH --mem-per-cpu=9000 
 +#SBATCH --partition=normal 
 + 
 +module unload configuration 
 +module load mpi/openmpi/1.8.2-gcc64
  
-  * L'article [[Fabric]] indique comment la librairie Intel MPI sélectionne la Fabric+mpirun  ./hello_mpi
  
 +</file>
  
 +==== Alternative ====
 +Pour un job distribué, on peut aussi utiliser ''srun''. Ne fonctionne pas si 2 processus sont sur le même noeud physique (pb inititialisation communication par SHM) 
 +<file>
 +eval export `mpirun env | grep OMPI_MCA_orte_precondition_transports`
 +srun ./hello_mpi
 +</file>
mpi/openmpi/start.1518804669.txt.gz · Dernière modification: 2018/02/16 19:11 de montap01