Vargas : options principales du système de compilation Fortran



Vous êtes ici : Support technique → Calcul scalaire sur Vargas → Système de compilation Fortran → Options principales du système de compilation.


Options d'optimisation du compilateur Fortran

C'est l'option -O (la lettre majuscule o) qui permet de gérer l'optimisation d'un code. À sa suite, il est possible d'indiquer un niveau d'optimisation (zéro ou entre 2 et 5). L'option -O0 (tiret o majuscule zéro), équivalente à -qnooptimize, permet d'inhiber l'optimisation faite par le compilateur.
L'écriture -O est équivalente à -O2.

C'est -O2 qui est désormais le défaut.

À partir du niveau 3, la sémantique du programme peut être modifiée. Par exemple : (2.*3.1)*4.2 peut être interprété comme 2.*(3.1*4.2). Soyez donc très vigilants quant aux résultats de vos calculs : il est nécessaire, à partir de-O3, de valider les résultats de vos modèles.

Important : jusqu'en décembre 2009, les options -O3 -qstrict étaient positionnées par défaut. Vous auriez donc pu constater, après une simple compilation par défaut, une baisse des performances moyennes de votre code de calcul : c'est normal. Si, par contre, vous spécifiiez déjà vous-même des options d'optimisation à la compilation (script, Makefile, voire compilation en batch), ces changements n'auraient dû avoir que peu d'impact.

Nous conseillons, après avoir vérifié vos résultats sur des cas tests connus et validés, de passer au niveau d'optimisation -O3. L'accélération peut être significative; la compilation sera nettement plus longue.

Les niveaux -O4 et -O5 introduisent des optimisations relativement poussées. Elles incluent en particulier la technique de l'inlining si l'option -qipa est spécifiée à l'édition de liens également.

Un niveau d'optimisation maximal peut être atteint avec les options -O5 -qnostrict -qessl à la compilation et -O5 -qnostrict -lessl à l'édition de liens. L'option -O5 inclut les options -qipa=level=2 et -qhot=vector. L'option -qunroll est incluse dès le niveau -O3. Les options -qhot=vector et -qunroll permettent respectivement d'utiliser les versions vectorielles de certaines fonctions mathématiques et de dérouler, quand cela est possible, les boucles imbriquées.
Nous déconseillons l'option -O5 sur l'ensemble du code : les optimisations plus poussées qui permettent un gain de performances sur certaines parties du code causent aussi une perte de performances sur d'autres parties . Aussi vaut-il mieux ne passer cette option que sur les routines du code que vous connaissez pour être les plus intensives en calcul. Notez par ailleurs que les temps de compilation deviennent très importants : si vous compilez en batch, pensez à majorer significativement le temps elapsed que vous demandez pour cette compilation.

L'option -qessl (-qnoessl par défaut) permet le remplacement automatique de procédures intrinsèques Fortran (comme MATMUL par ex.) par des appels à des fonctions de la bibliothèque IBM ESSL particulièrement optimisée. Avec cette option à la compilation, vous devez obligatoirement spécifier -lessl ou bien -lesslsmp à l'édition de liens.

Liste des options activées pour le compilateur Fortran

Création d'un fichier de listage pour le compilateur Fortran

Des options permettent, à l'issue de la compilation, de récupérer certains types d'informations dans un fichier dont le nom est celui du fichier compilé suffixé par .lst :

Par exemple :

vargas : xlf90 -qsource -qlistopt prog.f90

Options de débogage du compilateur Fortran

Dans une phase de débogage, les options suivantes peuvent être d'une aide précieuse :

Il existe aussi une option -qlanglvl pour vérifier la conformité du source à une norme Fortran. Par exemple -qlanglvl=2003std pour la norme Fortran 2003.

Exemple de gestion de débordement de tableaux :

vargas : xlf90 -g -C -qsigtrap debordement.f90
vargas : ./a.out

  Signal received: SIGTRAP - Trace trap
    Fortran language trap: subscript out of bounds

  Traceback:
    Offset 0x00000090 in procedure debord, near line 6 in file debordement.f90
    --- End of call chain ---

Exemple utilisant toutes les options décrites :

vargas : xlf90 -qnooptimize -g -C -qinitauto=7FBFFFFF \
   -qflttrap=overflow:underflow:zerodivide:invalid:enable -qfloat=nans \
   -qsigtrap -qextchk -qkeepparm -qlanglvl=90std test.f90

vargas : ./a.out

Voir aussi le paragraphe : Outils de débogage.

Taille des différents types de base Fortran

Les variables déclarées à l'aide des types par défaut INTEGER, REAL ou COMPLEX font l'objet d'une réservation en mémoire basée sur des mots de 4 octets. Le paramètre optionnel KIND=n indiqué à la suite du type permet d'influer sur cette taille ; c'est la façon la plus explicite et la plus sûre de le faire.

Il existe en outre des options de compilation permettant de modifier de façon globale la longueur des variables :

Par exemple :

vargas : xlf90 -qintsize=8 prog.f90
promotion sur 8 octets des entiers par défaut,
vargas : xlf90 -qautodbl=dbl4 prog.f90 
promotion sur 8 octets des réels et des complexes de taille 4 octets.

Pour plus de détails, consultez le chapitre 6 et l'annexe A du manuel IBM XL Fortran Compiler Reference

Lire ou écrire un fichier binaire Fortran IEEE little-endian

Pour écrire ou lire un fichier binaire Fortran IEEE little-endian, il faut utiliser la variable d'environnement XLFRTEOPTS.

Exemple d'utilisation pour écrire un fichier binaire FORTRAN IEEE little-endian sur l'unité 12 :

vargas : mpxlf90_r -o prog_little_endian prog_little_endian.f90
vargas : export XLFRTEOPTS=ufmt_littleendian=12
vargas : export MP_PROCS=2
vargas : ./prog_little_endian
Pour plus d'informations, une documentation IBM


© CNRS - IDRIS, 13/01/2012