Compilateurs et interpréteurs

La compilation consiste à traduire un code source écrit en langage compréhensible par l’humain en un langage compréhensible par le processeur.
Il existe de nombreux et différents langages de programmation, nous avons installé les logiciels en rapport avec les langages employés par nos utilisateurs. Si besoin, on peut en ajouter d’autres.

Logiciels Intel

Intel livre un ensemble logiciel très complet qui comprend des compilateurs (Fortran, C, C++), une implémentation MPI, d’autres bibliothèques pour faire du calcul parallèle, des outils de profilage. Il s’agit de l’ensemble Parallel Studio XE. Nous installons plusieurs versions chaque année. Ces différents logiciels sont accessibles au travers de modules, dont le nom commence par Intel. Ceux pour les compilateurs s’appellent Intel/20xx.version.numéro .

Compilateur Intel Fortran

Le compilateur Fortran s’appelle ifort.
Voici des propositions de séquences d’options (la plupart sont compatibles avec les compilateurs C/C++)

  • déboguage : -O0 -g -traceback -check all -warn all -fpe0 -ftz -ftrapuv

  • optimisation : <ARCH> -O3 -g -traceback -implicitnone -ftz -opt-prefetch -unroll-aggressive

  • profilage/analyse : optimisation + -pg -qopt-report=5 -qopt-report-phase=vec

  • parallélisation par OpenMP : optimisation + -qopenmp

<ARCH> désigne des options pour adapter le programme exécutable aux caractéristiques du processeur sur lequel il va s’exécuter : AVX, SSE, etc. Le CCIPL met en œuvre des serveurs de différentes gammes, de plusieurs origines, donc de caractéristiques différentes.
ARCH peut prendre différentes valeurs comme : -xSSE4.2 -xCORE-AVX2 -xCORE-AVX512. L’option -xHost permet d’optimiser pour le processeur sur lequel la compilation a lieu.

Serveur CCIPL

Processeur

Option

Cloudbreak

AMD EPYC 7282, 2,8GHz

-AVX2

Cribbar

Intel Xeon Silver 4114, 2,2 GHz, Skylake

-AVX2, -AVX-512

Budbud

Intel Xeon E5 2640, 2,4 GHz, Broadwell

-AVX2

Nazare (et Jaws)

Intel Xeon ES 2630, 2,66 GHz, Broadwell

-AVX2

Chezine

Intel Xeon 5650, 2,66 GHz, Westmere EP

-SSE4.2

Attention, il y a compatibilité descendante mais pas ascendante !

Compilateur Intel C

Le compilateur C s’appelle icc

Compilateur Intel C++

Le compilateur C++ s’appelle icpc

Logiciels GNU

Les compilateurs GNU sont accessibles au travers de modules dont le nom est de la forme gcc/x.y.z, où x.y.z est le numéro de version.

Compilateur GNU Fortran

Le compilateur Fortran s’appelle gfortran.
Voici des propositions de séquences d’options

  • déboguage : -O0 -g -fbacktrace -fimplicit-none -fcheck=all -ffpe-trap=invalid,zero,overflow,underflow -Wall

  • optimisation : <ARCH> -O3 -g -fbacktrace -fprefetch-loop-arrays

  • profilage/analyse : optimisation + -p

  • parallélisation par OpenMP : optimisation + -fopenmp

<ARCH> désigne des options pour adapter le programme exécutable aux caractéristiques du processeur sur lequel il va s’exécuter : AVX, SSE, etc. Le CCIPL met en œuvre des serveurs de différentes gammes, de plusieurs origines, donc de caractéristiques différentes.
ARCH se décompose en deux options -march=<arg> et -mtune=<arg> avec arg qui peut prendre différentes valeurs comme : znver2, core-avx2, westmere. L’argument native permet d’optimiser pour le processeur sur lequel la compilation a lieu.

Serveur CCIPL

Processeur

Option

Cloudbreak

AMD EPYC 7282, 2,8GHz

-march=znver2 -mtune=znver2 -mfma -mavx2

Cribbar

Intel Xeon Silver 4114, 2,2 GHz, Skylake

-march=skylake -mtune=skylake

Budbud

Intel Xeon E5 2640, 2,4 GHz, Broadwell

-march=cascadelake -mtune=cascadelake

Nazare (et Jaws)

Intel Xeon ES 2630, 2,66 GHz, Broadwell

-march=core-avx2 -mtune=core-avx2

Chezine

Intel Xeon 5650, 2,66 GHz, Westmere EP

-march=westmere -mtune=westmere

Compilateur GNU C

Le compilateur C s’appelle gcc.

Compilateur GNU C++

Le compilateur C++ s’appelle g++.

Logiciels PGI

Les compilateurs PGI sont accessibles au travers de modules dont le nom est de la forme pgi/pgi/xx.y, où xx.y est le numéro de version.

Compilateur PGI Fortran

Le compilateur s’appelle pgf90.
Voici des propositions de séquences d’options

  • déboguage : -O0 -g -traceback -Minfo=all -Mchkfpstk -Mc hkstk -Mdalign -Mdclchk -Mdepchk -Miomutex -Mrecursive -Msave -Ktrap=fp

  • optimisation : <ARCH> -O3 -g -traceback -Mvect -Mcache_align -Mprefetch -Munroll

  • profilage/analyse : PGI fournit son propre outil de profilage, pgprof

  • parallélisation par OpenMP : optimisation + -mp

<ARCH> désigne une option pour adapter le programme exécutable aux caractéristiques du processeur sur lequel il va s’exécuter : AVX,SSE, etc. Le CCIPL met en œuvre des serveurs de différentes gammes, de plusieurs origines, donc de caractéristiques différentes.
ARCH s’écrit sous la forme -tp=<arg> avec arg qui peut prendre différentes valeurs comme : nehalem-64, ivybridge-64, -skylake-64. L’argument native permet d’optimiser pour le processeur sur lequel la compilation a lieu.

Serveur CCIPL

Processeur

Option

Cloudbreak

AMD EPYC 7282, 2,8GHz

-tp zen

Cribbar

Intel Xeon Silver 4114, 2,2 GHz, Skylake

-tp=skylake-64

Budbud

Intel Xeon E5 2640, 2,4 GHz, Broadwell

-tp=broadwell-64

Nazare (et Jaws)

Intel Xeon ES 2630, 2,66 GHz, Broadwell

-tp=broadwell-64

Chezine

Intel Xeon 5650, 2,66 GHz, Westmere EP

-tp=nehalem-64

Compilateur PGI C

Le compilateur C s’appelle pgcc.

Compilateur PGI C++

Le compilateur C++ s’appelle pgc++.

Logiciels Python

Python est installé sur le cluster, les versions 2 et 3 (incompatibles entre-elles). Elles sont accessibles au travers de modules.
Des bibliothèques supplémentaires sont installés à la demande des utilisateurs directement dans l’arborescence de la distribution, de la forme python/x.y.z, où x.y.z désigne sa version..

Logiciels R

R est installé sur le cluster, et deux versions de paquets additionnels ont été installées : compilés ou non compilés avec la bibliothèque scientifique Intel MKL.
R est accessible au travers module, de la forme R/x.y.z_no-MKL et R/x.y.z_MKL, où x.y.z désigne la version de R.

Logiciels Julia

Julia est installé sur le cluster est accessible au travers de module, de la forme julia/x.y.z, où x.y.z désigne sa version.