Ceci est une ancienne révision du document !
L'implémentation OpenMPI n'est pas la version MPI à utiliser préférentiellement sur CALI.
Cependant, nous décrivons ici son fonctionnement général, et la méthode pour l'utiliser sur CALI avec la suite de développement GNU Compiler Collection.
Concernant la librairie OpenMPI :
OpenMPI est compilé avec le support de PMI (Process
===== Réseau Infiniband =====
Pour comprendre pourquoi il est préférable d'utiliser Intel MPI, il faut connaître le réseau Infiniband de notre cluster
* 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 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 ====
* Fonctionne en mode non connecté, assurant ainsi une plus faible latence
* Optimisation grâce à PSM, plus performant que la librairie verbs traditionnelle utilisée précédemment en Infiniband
===== Configurer votre environnement=====
* 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
===== Compiler =====
Pour compiler votre programme MPI, il faut utiliser les commandes mpixxxx
, où xxxx
est le nom du “vrai” compilateur que vous désirez utiliser. Exemples :
* mpiifort
pour utiliser le compilateur Intel Fortran ifort
* mpiicc
pour utiliser le compilateur Intel C/C++ icc
* mpigcc
pour utiliser le compilateur GNU C
==== Thread ou pas threads ? ====
La compilation est faite par défaut avec la librairie MPI threadée.
==== Avec OpenMP ====
* 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
* 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
===== 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 ====
Un exemple de fichier batch est disponible sur slurm-mpi
===== Plus de détails =====
* L'article Fabric indique comment la librairie Intel MPI sélectionne la Fabric