01.07.2013 Views

IPD TP1 - Enonce 2012-2013.pdf

IPD TP1 - Enonce 2012-2013.pdf

IPD TP1 - Enonce 2012-2013.pdf

SHOW MORE
SHOW LESS

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'en­tê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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!