GCC

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

La suite GNU Compiler Collection (GCC) est un ensemble de compilateurs C (gcc), C++ (g++) et Fortran (gfortran) disponibles pour un large éventail de plateformes, allant des plateformes Microsoft Windows aux systèmes embarqués basés sur ARM.

Sommaire

Historique

Richard Stallman a démarré le projet GNU en 1984. Le projet avait pour but premier de créer un système d'exploitation libre. Donc, pour ce faire le projet GNU avait en premier besoin d'un compilateur afin de pouvoir créer des logiciels à partir de codes sources. Le projet GNU a distribué une première version de GCC en 1987[1].

Avantages et inconvénients

GCC est un logiciel libre disponible sans restriction sur l'utilisation. La licence de GCC est la Licence publique générale GNU.

GCC est le compilateur utilisé par la plupart des distributions GNU/Linux. Il est donc disponible sur tous les superordinateurs de Calcul Québec. Il s'agit aussi du compilateur de référence pour plusieurs applications ouvertes.

Par rapport à au compilateur Clang, utilisé entre autres par FreeBSD, la compilation via GCC est plus lente. Certaines erreurs de compilation peuvent aussi être énigmatiques par rapport à celles données par d'autres compilateurs. Par rapport au compilateur d'Intel, il est fréquent que le code généré par GCC soit moins performant, mais ce n'est pas toujours le cas.

Options de compilation

Une liste des options de compilation génériques à tous les compilateurs est disponible sur la page Compilation de code. La liste complète des options de compilation est disponible sur le site de GNU.

Options spécifiques à GCC

Option Description Exemple
-march=native Active les optimisations spécifiques à l'architecture sur laquelle le code est compilé, telles que les instructions SSE des processeurs Intel.
gcc -march=native ...
-static Lie les binaires compilés (objets et bibliothèques) à l'application de manière statique.
gcc -static ...
-m64 Génère des binaires pour un environnement 64 bits.
gcc -m64 ...
-flto Active l'optimisation inter-procédurale.
gcc -flto ...
-fopenmp Active le support des directives OpenMP
gcc -fopenmp ...
-ffast-math Active des optimisations mathématiques agressives qui peuvent accélérer le code de façon importante, mais qui ne garantissent plus le respect des normes IEEE pour les calculs mathématiques.
gcc -ffast-math ...

Options recommandées

Il est recommandé d'utiliser les options -Wall -O2 -march=native. L'option -O2 peut être remplacée par -O3 qui ajoute des optimisations supplémentaires à la compilation. Alors que -O2 est généralement plus rapide que -O1, il arrive que -O3 produise un code moins performant que -O2. Pour plus de détails, voir les options d'optimisation de GCC.

Optimisation inter-procédurale

En général, les logiciels sont compilés un fichier à la fois et les fichiers sont liés ensemble à la fin du processus. L'optimisation inter-procédurale permet à GCC de faire des optimisations en ayant accès à l'arbre syntaxique de tous les fichiers source en même temps. Pour ce faire, l'optimisation des représentations intermédiaires est faite à la liaison [2] [3] [4] [5]

Pour utiliser l'optimisation à la liaison avec gcc, utiliser l'option -flto :

[nom@serveur $] gcc -flto -march=native -O2 -Wall f1.c f2.c  -o f.out


Compilation de code OpenMP

Pour activer l'exécution de fils d'exécution en parallèle via OpenMP, vous devez ajouter l'option -fopenmp. Par exemple :

[nom@serveur $] gcc -flto -march=native -O3 -Wall -fopenmp f1.c f2.c -o f.out


Références

  1. http://fr.wikipedia.org/wiki/GNU_Compiler_Collection
  2. https://en.wikipedia.org/wiki/Link-time_optimization
  3. http://gcc.gnu.org/onlinedocs/gccint/LTO.html
  4. http://gcc.gnu.org/wiki/LinkTimeOptimization
  5. http://www.phoronix.com/scan.php?page=article&item=gcc_471_lto&num=1
Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager