Vous êtes ici : Support technique → Calcul scalaire → Système de compilation Fortran → Parallélisation automatique.
Le compilateur Fortran peut essayer de paralléliser automatiquement vos programmes séquentiels : the compiler will attempt to parallelize explicitly coded DO loops as well as those that are generated by the compiler for array language. C'est une parallélisation en mémoire partagée, c'est-à-dire intra-noeud.
Pour obtenir un exécutable automatiquement parallélisé, utilisez le
compilateur ré-entrant (suffixé par _r) et l'option
-qsmp (seule, sans sous-option). L'option
-qsmp doit apparaître à la compilation et à l'édition de
liens. Vous pouvez par exemple avoir dans un Makefile
:
FC = xlf95_r FFLAGS = -O5 -qnostrict -qsmp LDFLAGS = -O5 -qnostrict -qsmp
Cf. notre page sur l'exécution d'un tel programme.
Par ailleurs, la fonction matmul peut aussi être
automatiquement parallélisée. Il y a deux moyens : avec ou sans
l'option -qessl. Dans les deux cas, vous devez utiliser
le compilateur ré-entrant. Sans -qessl, la
parallélisation de matmul est contrôlée par la variable
d'environnement intrinthds dans XLFRTEOPTS,
au moment de l'exécution,
indépendamment de la parallélisation du reste de votre programme. Avec
-qessl, vous devez ajouter l'option
-lesslsmp à l'édition de liens, et la parallélisation du
reste de votre programme s'applique aussi à matmul. La
deuxième méthode, avec -qessl -lesslsmp, donne une
fonction matmul plus performante. C'est donc celle que
nous vous conseillons. Vous pouvez par exemple avoir dans un
Makefile :
FC = xlf95_r FFLAGS = -O5 -qnostrict -qsmp -qessl LDFLAGS = -O5 -qnostrict -qsmp -lesslsmp
Remarquez que si vous utilisez -qessl -lessl,
matmul n'est jamais parallélisé, quelles que soient les
autres options, quelles que soient les valeurs des variables
d'environnement (intrinthds, parthds,
OMP_NUM_THREADS).