Turing : Clang, GCC : une alternative pour le C/C++

Compilateurs IBM et support des nouvelles normes C/C++

Les compilateurs IBM XL C/C++ sont à privilégier sur BG/Q pour des raisons de performance, par contre ils ne supportent qu'une infime partie des nouvelles normes C11 et C++11 en positionnant les options suivantes :

LangagesCommandesOptions SuffixesExplications
Cmpixlc_r-qlanglvl=extc1x .c permet l'utilisation d'un sous-ensemble de fonctionnalités de la norme C11 (ISO/IEC 9899:2011)
C++mpixlcxx_r-qlanglvl=extended0x .cc, .cxx, .c++, .C, .cp, .cpp permet l'utilisation d'un sous-ensemble de fonctionnalités de la norme C++11 (ISO/IEC 14882:2011)

Si votre code contient des fonctionnalités non supportées par les compilateurs IBM, vous avez la possibilité d'utiliser les compilateurs LLVM Clang.

Compilateurs LLVM Clang

Le compilateur C/C++ expérimental LLVM Clang est disponible pour la génération d'un exécutable sur les nœuds de calcul de Turing. Il permet une plus large couverture de la norme C++11 que ne le permet le compilateur IBM XL.

Versions disponibles

Les différentes versions disponibles proviennent d'un répertoire SVN géré par Argonne National Laboratory. Elles sont accessibles via la commande module :

$ module avail clang
clang/3.5.0          clang/3.6.0(default) clang/nightly

Attention : La version clang/nightly est une version de test qui évolue très rapidement. Elle peut être écrasée et modifiée par une autre version d'un jour à l'autre.

Utilisation

L'utilisation de Clang doit se faire de la façon suivante :

  1. chargement du module clang (sinon les compilateurs IBM seront invoquées par défaut),
  2. utilisation des commandes mpicc ou mpicxx pour invoquer respectivement les compilateurs C et C++
Langages Commandes Suffixes des
fichiers sources
C mpicc .c
C++ mpicxx .cc, .cxx, .c++,
.C, .cp, .cpp

Remarque : Il n'existe pas de compilateur LLVM Fortran pour BG/Q.

Voici un exemple de création d'un exécutable à partir d'un code C++ pour les noeuds de calcul BG/Q :

### Chargement du compilateur Clang ###
$ module load clang

### Compilation ###
$ mpicxx -c main.cc functions.cc

### Edition de liens ###
$ mpicxx main.o functions.o

Options disponibles

Clang essaie de garder compatible ses options avec celles de gcc. L'accès à un manuel en ligne se fait à l'aide de l'option –help.

### Manuel en ligne ###
$ mpicxx --help

Pour en savoir plus

Compilateurs GNU

Turing dispose également des compilateurs GNU Fortran, C, C++. Les compilateurs GNU peuvent aider au portage d'applications, écrites en C et C++ notamment. Par contre en ce qui concerne les performances, il vaut mieux privilégier les compilateurs IBM ou LLVM, décrits ci-dessus.

Versions disponibles

Plusieurs versions sont disponibles via la commande module. La version 4.4.7 correspond à la version officielle supportée par IBM. Les autres versions ont été compilées par l'IDRIS :

$ module avail gcc
gcc/4.4.7          gcc/4.7.2(default)

Utilisation

L'utilisation des compilateurs GNU doit se faire de la façon suivante :

  1. chargement du module gcc (sinon les compilateurs IBM seront invoquées par défaut),
  2. utilisation des commandes mpif90, mpicc ou mpicxx pour invoquer respectivement les compilateurs Fortran, C et C++
Langages Commandes Suffixes des
fichiers sources
Fortran mpif77, mpif90 .f, .f90
C mpicc .c
C++ mpicxx .cc, .cxx, .c++,
.C, .cp, .cpp

Voici un exemple de création d'un exécutable à partir d'un code C++ pour les nœuds de calcul BG/Q :

### Chargement du compilateur GNU ###
$ module load gcc

### Compilation ###
$ mpicxx -c main.cc functions.cc

### Edition de liens ###
$ mpicxx main.o functions.o

Options disponibles

L'accès à un manuel en ligne se fait à l'aide de l'option principale –help. D'autres options d'aide sont disponibles :

### Manuel en ligne général ###
$ mpicxx --help

### Autres options d'aide ###
$ mpicxx --help=common
$ mpicxx --help=warnings
$ mpicxx --help=optimizers

Pour en savoir plus