Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Travaux pratique d'Informatique Parallèle et Distribuée, UMONS/Polytech, TP 1 2<br />
1.4.Utilisation d'OpenMP avec gcc<br />
Lors des séances de TP, nous utiliserons le compilateur GNU gcc en spécifiant l'option de<br />
compilation fopenmp afin de lui permettre d'interpréter les directives OpenMP. La compilation d'un<br />
code code.c se fera donc de la manière suivante:<br />
gcc code.c o executable fopenmp<br />
L'entête omp.h doit également être inclus en début de code:<br />
#include <br />
Une section parallèle OpenMP est spécifiée par une construction du type:<br />
#pragma omp parallel<br />
{<br />
...<br />
}<br />
Lorsqu'un thread principal atteint une section parallèle, il crée un groupe de n threads dont il<br />
devient le maître. Le nombre n de threads créés dépend du nombre d'unités de traitement sur la machine<br />
utilisée. Implicitement, les threads s'attendent mutuellement en sortie d'une section parallèle sauf si<br />
l'option nowait à été spécifiée dans la déclaration de la section:<br />
#pragma omp parallel nowait<br />
Les variables déclarées avant la section parallèle et devant être manipulées par les threads sont<br />
spécifiées dans la déclaration de la section parallèle en tant que partagée (shared) ou privée (private):<br />
#pragma omp parallel private(i,j) → chaque thread dispose d'une copie locale de i et j<br />
#pragma omp parallel shared(n) → chaque thread partage l'accès à une unique variable n<br />
Une opération de réduction (e.g. somme globale) peut être opérée sur une variable: de cette<br />
manière, chaque thread travaille sur une variable privée et une réduction de la valeur des variables est<br />
opérée en sortie de la section parallèle:<br />
#pragma omp parallel reduction(+:i)<br />
→ chaque thread dispose d'une copie de i et la somme<br />
de toutes les valeurs de i est réalisée en sortie de<br />
section parallèle<br />
Un test peut être réalisé si l'on souhaite conditionner la création d'un groupe de threads suivant la<br />
valeur d'un paramètre donné:<br />
#pragma omp parallel if ( n > 3 )<br />
→ le groupe de threads n'est créé que si le test est vrai<br />
UMONS/Polytech<br />
Pierre Manneback, Sébastien Frémal, Sébastien Noël <strong>2012</strong>13