Dans le cadre de notre UE de programmation parallèle et distribuée, voici une rapide présentation de OpenMP.
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 (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.
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.
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:
Fonctionnement:
Les régions parallèles peuvent être une répartition :
Lien vers les diapositives