PGI

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

La suite de compilateurs de Portland Group est un ensemble de compilateurs C (pgcc), C++ (pgCC) et Fortran (pgf77 ou pgf90) développée par le groupe Portland.

Sommaire

Avantages et inconvénients

Portland Group a été impliqué de près dans le développement de l'usage scientifique des processeurs graphiques (GPGPU). Ses compilateurs offrent ainsi parfois un support de technologies telles que CUDA, OpenACC et OpenCL supérieur aux autres suites de compilateurs. Cependant, beaucoup moins de projets sont testés avec les compilateurs de PGI qu'avec ceux de GNU et d'Intel. Il peut ainsi être plus difficile de faire compiler une application sur ces compilateurs. Les compilateurs PGI ne sont pas offerts sur tous les supercalculateurs de Calcul Québec. Pour vérifier le support, veuillez vous référer à la page Tableau résumé des propriétés des serveurs de Calcul Québec.

Options de compilation

Une liste des options de compilation génériques à tous les compilateurs est disponible sur la page Compilation de code.

Options spécifiques aux compilateurs de Portland Group

Option Description Exemple
-fastsse Équivaut à un ensemble d'options, généralement optimal, qui inclut des instructions SSE/SSE2.
pgcc -fastsse ...
-Bstatic Lie les binaires compilés (objets et bibliothèques) à l'application de manière statique.
pgcc -static ...
-Bdynamic Lie les binaires compilés (objets et bibliothèques) à l'application de manière dynamique.
pgcc -static ...
-Mvect=sse Vectorise certaines boucles et utilise les instructions SSE, SSE2 et la pré-extraction (prefetch) là où c'est possible.
pgcc -Mvect=sse ...
-mp Active le support des directives OpenMP
pgcc -mp ...
-mcmodel=medium Génère un exécutable avec le modèle de mémoire "medium" (mémoire totale > 2 Go, taille des objets < 2 Go) dans un environnement 64 bits linux86-64.
pgcc -mcmodel=medium ...
-Mlarge_arrays Permet que la taille d'un objet (vecteur) dépasse 2 Go sous l'environnement linux86-64. Doit être utilisé avec l'option -mcmodel=medium
pgcc -mcmodel=medium -Mlarge_arrays ...
-Mipa=fast, -Mipa=fast,inline Active des optimisations interprocédurales.
pgcc -Mipa=fast,inline ...
-Mbounds Permet de détecter à l'exécution un indice qui pointe à l'extérieur d'un tableau (débordement).
pgcc -Mbounds ...

Options spécifiques au compilateur Fortran

Option Description Exemple
-Mextend Permet les lignes de code allant jusqu'à 132 caractères. Activé par défaut avec pgf90.
pgf77 -Mextend ...
-Mdclchk Oblige la déclaration explicite de toutes les variables.
pgf77 -Mdclchk ...

Options recommandées

Il est recommandé d'utiliser les options -O2 -fastsse. 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.

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 au compilateur 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 [1] [2] [3] [4]

Pour utiliser l'optimisation à la liaison avec les compilateurs de Portland Group, utiliser l'option -Mipa=fast ou -Mipa=inline :

[nom@serveur $] pgcc -Mipa=fast -fastsse -O2 f1.c f2.c  -o f.out


ou

[nom@serveur $] pgcc -Mipa=fast,inline -fastsse -O2 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 -mp. Par exemple :

[nom@serveur $] pgcc -Mipa=fast,inline -fastsse -O3 -mp f1.c f2.c -o f.out


Références

  1. https://en.wikipedia.org/wiki/Link-time_optimization
  2. http://gcc.gnu.org/onlinedocs/gccint/LTO.html
  3. http://gcc.gnu.org/wiki/LinkTimeOptimization
  4. 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