Outils pour utilisateurs

Outils du site


mpi:openmpi:start

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 :

  • OMPI : partie MPI
  • ORTE : run-time layer
  • OPAL : operating system / platform layer

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 :

  • OpenMPI peut utiliser le réseau Infiniband, à travers l'implémentation OpenFabrics
  • le choix de la Fabric est pris par le framework btl : on peut indiquer, à l'exécution, de charger tel ou tel component (tcp, openib, …) pour ce framework

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 :

  • 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

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
mpi/openmpi/start.txt · Dernière modification: 2018/04/10 17:09 de montap01