Parallélisme à mémoire partagée
Principes de ce parallélisme et implémentation avec OpenMP
OpenMP : introduction
OpenMP est un standard portable permettant de paralléliser une application sur des plateformes SMP (Symmetric MultiProcessor, i.e. architecture homogène, mémoire partagée). Des directives portables sont à insérer dans les sources de l'application. Les caractéristiques de ce standard sont les suivants :- Scalabilité
- Simplicité d'utilisation : parallélisation incrémentale
- Portabilité au SMP
- Parallélisation de haut niveau
- Flexibilité pour exprimer différents types de parallélisme
- Orienté performances
OpenMP est complètement supporté à partir de la version XLF 8.1 des compilateurs IBM. L'option qui active la parallélisation est -qsmp=omp, voir la page du compilateur Fortran XLF, rubrique optimisation. Il est nécessaire de l'utiliser avec un niveau d'optimisation suffisant, au moins O3.
Principes d'OpenMP
Le Fortran OpenMP utilise le modèle "fork & join" d'exécution en parallèle. Un programme écrit à l'aide d'OpenMP commence l'exécution comme un seul processus appelé thread maitresse. Cette tache maitresse s'exécute séquentiellement jusqu'à la première construction parallèle rencontrée. Les deux directives PARALLEL et END PARALLEL entourent une telle construction. Quand le début d'une zone parallèle est atteinte, la master thread créée une équipe de taches dont elle devient le maitre. Toutes les instructions du programme se situant à l'intérieur d'une construction parallèle, incluant les subroutines appelées à l'intérieur de celle-ci, sont exécutées en parallèle par chaque thread de l'équipe. Une fois la fin de la zone parallèle atteinte, les taches se synchronisent et seule la master thread continue l'exécution. Le nombre de telles constructions parallèles dans un même programme n'est pas limité. Ainsi un programme peut fork et join de nombreuses fois durant l'exécution.Modèle "fork & join"