Compilateurs et wrappers mpi

Quel compilateur utiliser ?

Pour compiler vos codes, vous pouvez utiliser :

  • les compilateurs Intel : icc, icpc ou ifort
  • les compilateurs gnu : gcc, g++ ou gfortran
  • les compilateurs pgi

Les compilateurs intel ont l’avantage de la performance : surtout en fortran, il est préférable de les utiliser sur Olympe, afin de bénéficier de toutes les ressources des processeurs.

Les compilateurs gnu ont l’avantage de la portabilité : vous les retrouverez sur tous les systèmes gnu/linux, de nombreux codes viennent avec des makefile écrits pour ces compilateurs.

les compilateurs pgi sont intéressants pour programmer les gpus, car ils permettent de compiler du code openacc.

Environnement par défaut

L’environnement par défaut sur OLYMPE est configuré pour utiliser les compilateur Intel/18.2 et la librairie MPI d’intel 18.2

$ module li
Currently Loaded Modulefiles:
  1) intel/18.2      2) intelmpi/18.2

Pour voir les autres environnements (compilateurs, librairies, etc ..) disponibles :

$ module available
....
------------------------------------------------------------------------- /usr/share/Modules/modulefiles -------------------------------------------------------------------------
dot                           modules                       openmpi/gnu/ilp64/2.0.2.10    openmpi/icc/2.0.2.10          openmpi/icc/mt/ilp64/2.0.2.10
module-git                    null                          openmpi/gnu/mt/2.0.2.10       openmpi/icc/ilp64/2.0.2.10    use.own
module-info                   openmpi/gnu/2.0.2.10          openmpi/gnu/mt/ilp64/2.0.2.10 openmpi/icc/mt/2.0.2.10

------------------------------------------------------------- /usr/local/modules/modulefiles/compilers_and_libraries -------------------------------------------------------------
cuda/8.0.61.2    cuda/9.1.85.3    gcc/7.3.0        intel/16.4       intel/18.2       intelmpi/16.4    intelmpi/18.2    petsc/3.7.4/ompi tcltk/8.6.3
cuda/9.0.176.2   gcc/5.4.0        intel/14.0       intel/17.1       intelmpi/14.0    intelmpi/17.1    petsc/3.7.4/impi pgi/18.3

Comment faire pour utiliser tel compilateur avec mpi ?

Les commandes mpiifort, mpiicc, mpif90, mpicc sont des "wrappers". Ces wrappers permettent à la fois de compiler les sources et de faire l’édition des liens pour la bibliothèque MPI sous-jacente.
Ci-dessous un tableau explicitant les compilateurs qui sont utilisés en fonction des différents wrappers, des compilateur et des bibliothèques MPI chargées dans votre environnement.

 

Les wrappers


intelmpi

intelmpi
module purge;
module load intel/18.2  intelmpi/18.2
intelmpi
compilateur wrapper
Intel fortran mpiifort
Intel C mpiicc
Intel C++ mpiicpc
Gnu Fortran mpif90
Gnu C mpicc
Gnu C++ mpicxx

 

openmpi, compilos intel

openmpi, compilos intel
module purge;
module load intel/18.2 openmpi/icc/2.0.2.1
compilateur wrapper
Intel fortran mpif90
Intel C mpicc
Intel C++ mpicxx
Gnu Fortran pas de wrapper
Gnu C pas de wrapper
Gnu C++ pas de wrapper

 

openmpi, compilos gnu

openmpi, compilos gnu
module purge;
module load gcc/7.3.0 openmpi/gnu/2.0.2.10
compilateur wrapper
Intel fortran pas de wrapper
Intel C pas de wrapper
Intel C++ pas de wrapper
Gnu Fortran mpif90
Gnu C mpicc
Gnu C++ mpicxx

ATTENTION : Si vous utilisez dans votre code le module fortran90 mpi.mod (c’est-à-dire la directive use mpi), vous devrez utiliser la version native (4.8.5) de gcc, c’est-à-dire ne pas charger de module gcc :

module unload gcc

Connaître les paramètres

Derrière l’appel à ces commandes, de nombreux arguments sont cachés. Pour les connaître :

$ module li
Currently Loaded Modulefiles:
  1) intel/18.2      2) intelmpi/18.2

$ mpiifort -show
ifort -I/usr/local/intel/2018.2.046/impi/2018.2.199/intel64/include -I/usr/local/intel/2018.2.046/impi/2018.2.199/intel64/include -L/usr/local/intel/2018.2.046/impi/2018.2.199/intel64/lib/release_mt -L/usr/local/intel/2018.2.046/impi/2018.2.199/intel64/lib -Xlinker --enable-new-dtags -Xlinker -rpath -Xlinker /usr/local/intel/2018.2.046/impi/2018.2.199/intel64/lib/release_mt -Xlinker -rpath -Xlinker /usr/local/intel/2018.2.046/impi/2018.2.199/intel64/lib -Xlinker -rpath -Xlinker /opt/intel/mpi-rt/2017.0.0/intel64/lib/release_mt -Xlinker -rpath -Xlinker /opt/intel/mpi-rt/2017.0.0/intel64/lib -lmpifort -lmpi -lmpigi -ldl -lrt -lpthread

$ mpif90 -show
gfortran -I/usr/local/intel/2018.2.046/impi/2018.2.199/intel64/include/gfortran/4.8.0 -I/usr/local/intel/2018.2.046/impi/2018.2.199/intel64/include -L/usr/local/intel/2018.2.046/impi/2018.2.199/intel64/lib/release_mt -L/usr/local/intel/2018.2.046/impi/2018.2.199/intel64/lib -Xlinker --enable-new-dtags -Xlinker -rpath -Xlinker /usr/local/intel/2018.2.046/impi/2018.2.199/intel64/lib/release_mt -Xlinker -rpath -Xlinker /usr/local/intel/2018.2.046/impi/2018.2.199/intel64/lib -Xlinker -rpath -Xlinker /opt/intel/mpi-rt/2017.0.0/intel64/lib/release_mt -Xlinker -rpath -Xlinker /opt/intel/mpi-rt/2017.0.0/intel64/lib -lmpifort -lmpi -lmpigi -ldl -lrt -lpthread

Voir aussi

FAQ

Questions fréquentes et messages d'erreurs

Comment demander de l’aide ?

Si votre job se plante sans que vous sachiez pourquoi, ou de manière générale si quelque chose ne fonctionne pas comme prévu, comment faire ?