Dans le cadre de notre UE de programmation parallèle et distribuée, voici une rapide présentation de OpenMP.
La programmation parallèle, c'est quoi?
La programmation parallèle, en opposition à la programmation séquentielle, permet à plusieurs instructions de s’exécuter simultanément, en parallèle donc.
Le programme doit donc être divisé en parties indépendantes afin que chaque processeur puisse exécuter une partie du programme, en parallèle des autres processeurs qui font de même.
La raison pour laquelle vous voudriez paralléliser votre code est le gain de temps.
En effet, dans un programme séquentiel, le temps total d’exécution T sera égal au nombre d’instructions totales I multiplié par le temps d’exécution d’une instruction t:
T = I * t
Alors qu’en programmation parallèle, le temps totale d’exécution du programme Tp sera le temps T calculé précédemment, divisé par le nombre de processeurs Np:
Tp = T / Np
OpenMP
Introduction
OpenMP (ou Open Multi-Processing) est une interface de programmation pour le calcul parallèle sur architecture à mémoire partagée.
L’interface se présente sous la forme d’un ensemble de directives, d’une bibliothèque logicielle et de variables d’environnement.
Cette API est prise en charge par la plupart des plateformes, dont Linux, MacOS et Windows, pour les langages de programmation C, C++ et Fortran.
Un peu d'historique...
La première version de OpenMP a été publiée en octobre 1997 pour Fortran, puis en 1998 la spécification pour le C et le C++ a été publiée.
Principe
Le principe de OpenMP consiste dans le fait de séparer les instructions dans différents threads, et donc ces threads seront exécutés en parallèle par plusieurs processeurs.
On ajoute au code des directives pour indiquer au compilateur:
- Quelles sont instructions à exécuter en parallèle.
- Comment distribuer les instructions et les données entre les différents threads.
Fonctionnement:
- L’utilisateur introduit des directives établissant des régions parallèles.
- Durant l’exécution, leur comportement respecte le modèle fork-join:
- le thread master crée des threads slaves (ou travailleurs) et forme une équipe avec eux.
- les thread slaves se terminent avec la région parallèle.
- le thread master continue son exécution.
Les régions parallèles peuvent être une répartition :
- de tâches différentes.
- de tâches identiques (boucle).
- d'appel d'une même procédure.
Avantages
- OpenMP a l’avantage d’être très simple à implémenter sur des codes déjà existants afin de les paralléliser.
- C'est une technologie beaucoup utilisée, et donc avec une communauté active.
- OpenMP est portable.
Lien vers les diapositives