~~SLIDESHOW yatil~~ ====== Intel MPI ====== En partie obsolète suite à la migration CALI2-B (2022) L'implémentation Intel MPI est était la version MPI à utiliser préférentiellement sur CALI. La version utilisée par défaut est la version 5.0, qui implémente la norme MPI 3.0. ===== Références ===== Concernant la librairie Intel MPI : * La documentation de référence est disponible chez Intel : https://software.intel.com/en-us/articles/intel-mpi-library-documentation * Vous pouvez aussi la consulter sur CALI : http://cali2.unilim.fr/intel-mpi/Doc_Index.html ===== Réseau Infiniband ===== Pour comprendre pourquoi il est était préférable d'utiliser Intel MPI, il faut connaître [[:materiel-cali2#reseau_infiniband | 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 [[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]]) Depuis la migration en version CALI2-B (2022), les cartes Infiniband sont mal supportées et le mode ''PSM'' optimisé n'est plus disponible ==== 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 ''mpi//xxxx//'', 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:slurm-mpi]] ===== Plus de détails ===== * L'article [[Fabric]] indique comment la librairie Intel MPI sélectionne la Fabric