Compilation de code

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Autres langues :anglais 100% • ‎français 100%

Sommaire

Sommaire

Afin d'exécuter un calcul sur un serveur de calcul, vous devrez généralement compiler un code source, en Fortran, C ou C++ par exemple en un exécutable fonctionnant sous Linux. Pour ce faire, vous utiliserez un compilateur. Plusieurs compilateurs sont disponibles sur les serveurs de Calcul Québec. On retrouve au minimum, sur la plupart des serveurs, la suite de compilateurs GCC ainsi que la suite de compilateurs d'Intel. Certains serveurs rendent aussi disponibles les compilateurs de Sun, PGI ou PathScale, mais leur disponibilité est plus limitée. Pour connaître les compilateurs disponibles sur le serveur que vous utilisez, référez-vous à la liste des modules installés sur chacun des serveurs de Calcul Québec . Pour la documentation relative à chacun des compilateurs, référez-vous aux pages suivantes :

Si l'application que vous désirez exécuter a été écrite par quelqu'un d'autre, il est possible que sa compilation soit simplifiée par l'un des outils suivants :

Principes généraux

La compilation d'une application se fait généralement en deux étapes. Tout d'abord, le compilateur compile chacun des fichiers source en objets séparés. Puis, l'éditeur de liens relie tous ces objets ensemble pour en faire un exécutable. Les compilateurs acceptent des options de ligne de commande variées, et il faudra vous référer à la documentation spécifique de chaque compilateur pour les connaître. Néanmoins, la majorité des compilateurs acceptent les options suivantes : -o, -c, -I, -L, -O1, -O2, -O3, -g, -D, -l. Le tableau suivant explique en plus de détail l'effet de ces options. Notez que les exemples utilisent gcc, mais pourraient tout aussi bien utiliser un compilateur d'Intel ou de Portland Group.

Option Description Exemple
-o Spécifie le fichier de sortie
gcc helloworld.c -o app.exe
-c Permet de séparer les étapes de compilation et de liaison. Cela est particulièrement utile pour séparer la compilation de différents modules avant leur liaison pour en faire un exécutable.
gcc -c helloworld.c -o helloworld.o
-I Indique au compilateur les répertoires à parcourir pour trouver les fichiers de code source externes à inclure (étape de compilation).
gcc -I$MPIDIR/include ...
-L Indique à l'éditeur de liens les répertoires à parcourir pour trouver les objets compilés (les bibliothèques par exemple).
gcc -L$MPIDIR/lib ...
-O0 à -O3 Activent des optimisations de plus en plus agressives. À partir de -O3, certaines optimisations peuvent ralentir le code dans certaines situations.
gcc -O3 helloworld.c -o app.exe
-g Ajoute des informations additionnelles dans les objets ou l'exécutable. Cela permet ainsi d'utiliser un déboguer pour suivre le déroulement de l'exécutable. Il est à noter que l'option doit être donnée à l'étape de compilation et de liaison.
gcc -g helloworld.c -o app.exe
-D Définit des macros qui seront utilisées par le préprocesseur pour adapter le code avant sa compilation. Généralement, les macros servent à augmenter la portabilité d'un code. Ainsi, certaines parties du code seront choisies par le préprocesseur selon que vous compilez votre code en parallèle ou en série, sur une machine Linux ou Windows, etc.
gcc -DHAVE_MPI ...
-l Cette option sert à indiquer une bibliothèque requise pour l'édition de liens. Par exemple, si vous passez l'option -lpthread, celui-ci cherchera pour un fichier avec le nom libpthread.so ou libpthread.a afin d'y trouver la définition de symboles utilisés dans votre code.
gcc -lpthread -lm ...
-w Spécifie au compilateur de n'afficher aucun avertissement (warning).
gcc -w ...

Portez attention que contrairement à Windows, en Linux l'ordre des bibliothèques est importante. Le compilateur n'explore une bibliothèque qu'une seule fois. Il conservera de cette bibliothèque que les objets définissant des symboles rencontrés au cours de la compilation. Ainsi, puisque la bibliothèque LAPACK utilise des fonctions définies dans la bibliothèque BLAS, il faut indiquer Lapack dans un premier temps. Ainsi la compilation d'un code utilisant des fonctions de Lapack aura besoin des options -l dans cet ordre:

[nom@serveur $] gcc calcul_algebre_lineaire.o -o app.exe -llapack -lblas -lpthread -lm -lc


Pour le nom exact des bibliothèques à utiliser, visitez les pages sur LAPACK, BLAS et MKL.

Compiler un programme MPI

Pour compiler un programme MPI, on utilise généralement un compilateur encapsulé dans un script fourni par la distribution MPI, tels que mpicc, mpicxx ou mpif90. Pour plus de détails, référez-vous à la page de la distribution MPI que vous utilisez, telles que Open MPI, MVAPICH2 ou MPICH.

Compiler un programme OpenMP

Pour compiler un programme OpenMP, il suffit généralement d'ajouter une option de compilation à la ligne de commande. Pour les compilateurs de la suite GCC, il s'agit de l'option -fopenmp; pour ceux de la suite d'Intel, il s'agit de -openmp; pour ceux des suites PGI et PathScale, il s'agit de -mp.

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager