Il est nécessaire d’utiliser la version d’openmpi qui va avec le compilateur utilisé pour votre application : si vous compilez avec icc, utilisez une version icc d’Openmpi
Généralités
Quelque soit la version d’openmpi, il est souhaitable de modifier la taille dédiée à la pile :
ulimit -s 10240
Les versions installées
Versions 4 (recommandée)
Il est maintenant recommandé d'utiliser openmpi version 4.
Les modules disponibles sont les suivants:
module load openmpi/gnu/4.1.4.2
module load openmpi/gnu/ilp64/4.1.4.2
module load openmpi/4.1.4.2
module load openmpi/intel/4.1.4.2
module load openmpi/intel/ilp64/4.1.4.2
Exemple d'utilisation:
module purge
module load openmpi/gnu/4.1.4.2
ulimit -s 10240
srun ./mon-appli
La communication entre GPUs (CUDA-Aware) a été testé pour tous ces modules.
En particulier les communication MPI_Send/MPI_Recv, MPI_Bcast et MPI_Allreduce avec un test qui peut être recuperé en bas.
Pour faire le test il suffit de commenter/decommenter l'environemment qu'on veut tester dans le script sbatch et dans le Makefile.
Versions 3
3 modules fournis : Un module par compilateur (gnu, icc, pgi). Tous les modules proposent une version "Multitheadée" d’openmpi. La version ilp64 n’est pas proposée dans cette version.
Mode d’utilisation cuda-aware mpi
Dans ce mode, disponible sur les versions 3 d’openmpi mais non activé par défaut, les gpus sont capables de communiquer directement entre eux sans passer par les cpus. A l’intérieur d’un nœud ces communications utilisent les liens nvlink. Les communications sont donc plus rapides et le code est plus performant. Pour utiliser ce mode, il est nécessaire de :
- désactiver le mode de communication
mxm
- activer explicitement le mode "
cuda-aware
"
module purge module load openmpi/gnu/3.0.2 cuda/9.1.85.3 ulimit -s 10240 export OMPI_MCA_mtl=^mxm export OMPI_MCA_pml=^yalla export OMPI_MCA_mpi_cuda_support=1 srun ./mon-appli-gpu
Version 2.0.2
8 modules fournis : 2 compilateurs (gnu et icc)
X multithreading on/off
X ilp64 on/off
Exemple :
module purge module load openmpi/gnu/mt/2.0.2.10 ulimit -s 10240 srun ...