Table des matières

Voir cette page sous forme de diaporama.

OpenMPI avec GCC

En cours de rédaction

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.

Les versions OpenMPI disponibles :
  • 1.8.2 : version d'origine datant de l'installation du cluster
  • 1.10.7

Références

Concernant la librairie OpenMPI :

OpenMPI et Slurm

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

https://www.open-mpi.org/faq/?category=tuning

OpenMPI est construit sous forme d'une architecture modulaire (Modular Component Architecture – MCA). Cette architecture permet de construire dynamiquement, à l'exécution, les modules utilisés par un processus. La librairie est divisé en 3 parties :

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).

Pour en revenir au réseau Infiniband :

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.

Voir https://www.open-mpi.org/faq/?category=tcp#tcp-auto-disable

Compiler avec GCC + OpenMPI

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 mpixxxx, où xxxx est le nom du “vrai” compilateur que vous désirez utiliser. Exemples :

Exécuter

Fichier batch

#!/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
 
mpirun  ./hello_mpi

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)

eval export `mpirun env | grep OMPI_MCA_orte_precondition_transports`
srun ./hello_mpi