Quel compilateur utiliser ?
Pour compiler vos codes, vous pouvez utiliser :
- les compilateurs Intel :
icc
,icpc
ouifort
- les compilateurs gnu :
gcc
,g++
ougfortran
- 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
module purge;
module load intel/18.2 intelmpi/18.2
compilateur | wrapper |
---|---|
Intel fortran | mpiifort |
Intel C | mpiicc |
Intel C++ | mpiicpc |
Gnu Fortran | mpif90 |
Gnu C | mpicc |
Gnu C++ | mpicxx |
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
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