Parallélisation automatique d'un programme en Fortran sur Vargas


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).


© CNRS - IDRIS, 13/01/2012