VT2017 OpenMP
Présentation
- Sujet : OpenMP
- Auteur : Anthony Geourjon
- Enseignants : Didier Donsez, Georges-Pierre Bonneau
- Date : 12/11/2017
Résumé
Open MP ou Open Multi-Processing est une interface de programmation pour le calcul parallèle. En opposition à Open MPI, Open MP est destiné aux architectures à mémoire partagée. La première version a été publié en 1997, et la versiçon en cours toujours maintenue est la 4.0 sortie en 2013. Open MP est portable et disponible sur les principales plateforemes (Linux, OS X, Windows) et fonctionne avec trois langages C,C++ et Fortran.
Open MP est developpé par tous les acteurs du High Performance Computing que ce soit les entreprises privées comme AMD, IBM, Arm, Nvidia ou les laboratoires de recherche comme Argonne, l’université de Bristol ou le EPCC d’Edinburgh. Open MP a été développé afin de simplifier le développement d’applications parallèles. Ses alternatives sont toujours limitées (bibliothèque pthread.h ou Intel Threading Building Blocks).
Open MP s’utilise en ajoutant une option de compilation au compilateur. Open Mp se veut comme une interface entre l’application et le système. Le principal but d’Open MP est de réduire les goulots d’étranglement comme les boucles. Pour cela on va utiliser les directives que fournit Open MP. Elles sont de 3 types : partage du travail, partage de mémoire, synchronisation des threads. Open MP est basé sur modèle Fork and Join, c’est à dire que la partie séquentiel du programme est réalisé par un thread mare et que seulement une partie du programme (les boucles typiquement) seront partagés entre différents threads. Cela sous entend de la synchronisation et un partage correcte des variables (car Open MP vise les architectures partagées).
Avantages
- Les code séquentiels et parallèles sont les mêmes -> maintenance simplifiée
- On peut paralléliser un code existant sans devoir le changer en profondeur, Si bien utilisé on gagne énormément de temps dans les goulots d’étranglement de programme
- Bien utilisé on améliore singulièrement les performances d’un code
Inconvénients
- L’utilisateur devra s’assurer que les conflits d’accès à la mémoire sont synchronisés
- Ne favorise pas la scalabilité des accès mémoire
- Pour les boucles avec un faible nombre d’itérations Open MP rajoute un surcout de temps (création des threads, etc).