• Aucun résultat trouvé

TD OpenMP

N/A
N/A
Protected

Academic year: 2022

Partager "TD OpenMP"

Copied!
1
0
0

Texte intégral

(1)

TD Multitache 2015 Séance 2/2

TD OpenMP

OpenMP pas à pas

Télécharger l’archive sous moodle TD_OpenMP, la désarchiver dans votre espace.

1- Hello world

a. Compiler et exécuter le programme hello.cpp. Ouvrir le fichier hello.cpp : ceci est la version standard.

b. Ouvrir le fichier hello_par_1.cpp. Les directives OpenMP ont été ajoutées.

i. Compiler avec g++ hello_par_1.cpp -o hello_par_1 –fopenmp ii. Commenter l’exécution

c. Ouvrir le fichier hello_par_2.cpp i. Compiler ce fichier

ii. Comparer l’exécution et le code avec le programme précédent.

iii. Quelles sont les similitudes de comportement avec fork() ? 2- Premiers algo

a. Compiler le fichier algo_simple_1.cpp puis l’exécuter.

i. Comparer les résultats obtenus avec les autres groupes ii. Que se passe-t-il ?

iii. Ajouter la clause « reduction(+:sum) » à la directive « #pragma omp parallel » (la ligne devient : #pragma omp parallel reduction(+:sum) » iv. Recompiler et exécuter. Changements observés ?

b. Analyser le code du fichier algo_simple_2.cpp i. Combien de fois est exécutée la boucle for ?

ii. Combien de fois est exécutée l’instruction « cout << "Hello World from thread = "?

iii. Peut-on prévoir le découpage de la boucle for ? iv. Suite à l’exécution, conclusion ?

c. En cumulant les 2 précédents exemples, l’algo_simple_3.cpp tire profit de la mise en concurrence.

i. Cette approche garanti-t-elle le résultat ?

ii. Combien faut-il de thread pour obtenir le résultat le plus rapidement ? iii. Quel impact a le changement du type double à float (changer le typedef

de DataType de double à float, recompiler !) 3- Multiplication Matricielle (organiser vous entre vous !)

a. Algorithme naif de multiplication, mais avec une mise en concurrence OpenMP sur les 3 boucles en for imbriquées : matmul_par.cpp.

b. A compiler et à exécuter.

c. Donner les temps pour 1, 2, 3, 4, 6, 8, 16, 32, 64 et 128 threads.

d. La valeur optimale est-elle la même que précédemment ? e. Idem avec le type float ?

4- Approximation de pi : 3.1415926535….

a. Le fichier pi_loop.cpp permet le calcul approché de pi.

b. Quelles sont vos conclusions sur le temps, le nombre de thread et la précision ? c. Re compiler avec g++ pi_loop.cpp -o pi_loop –fopenmp –O3

d. Quelles sont vos nouvelles conclusions?

Références

Documents relatifs

Là où cela se complique, c’est effectivement lorsqu’au moins un parmi plusieurs processus légers d’un même processus lourd doit communiquer dans l’univers MPI. Dans ce

Néolithique, I'habitat et l'organisation sociale, les artefacts - leur matière et leur. fabrication -, les pratiques funéraires et les relations soclales et les

In the first example on the left, the task reads from the stream x, reading up to horizon values of x ahead of the current position in the stream and consumes burst elements at

We promote firstprivate clauses to input clauses in streaming tasks as our choice of a persistent- task execution model means the expansion of the clause needs a stream to

You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an

Écrivez une fonction friends(R,a) qui, pour un réseau R et un utilisateur a, retourne une liste contenant tous les amis de a dans le réseau et une liste vide s’il n’en possède

Écrivez une fonction int [] friends (int[][] R, int a) qui pour un réseau R et un utilisateur a retourne un tableau contenant tous les amis de a dans le réseau et un tableau vide

on the decision to delegate the task management to OpenMP, the task granularity is en- forced to reach high performance, while the task submission order is a consequence of the need