Pour écrire un programme openMP, il faut
   inclure <omp.h>
   compiler avec l'option -fopenmp

Exercice 1 (parallélisme de boucle for)

On considère un tableau de n cases contenant chacune une valeur aléatoire.

a) Écrire un programme C qui lit la taille du tableau sur la ligne de commande, le crée et le remplit de valeurs aléatoires.

b) Ecrire une méthode carre(...) prenant le tableau en paramètre et elevant la valeur de chacune des cases au carré

c) Modifiez ce programme pour que les boucles for soient parallélisées par openMP

d) Faites afficher par votre programme le nombre de threads qui sont crées par openMP. Que remarquez vous ?

e) Modifiez votre programme pour fixer le nombre de threads de la boucle for à 1, 5 puis 10. Dans chaque cas, mesurez le temps pris par votre programme (utilisez l'API de timing ou la commande time). Que constatez vous ?

f) Discutez de la répartition des temps passés en user space et en kernel space. Est-ce que cette répartition dépend des boucles parallélisées ?

g) Cherchez comment à l'aide de la variable OMP_NUM_THREADS il est possible de modifier le nombre de threads sans modifier votre code.

Exercice 2 (Variables partagées et privées)

On veut profiter de la boucle de la méthode carre() pour faire la somme de tous les éléments du tableau.

a) Dans la méthode carre(...) précédente, déclarez une variable int total avant la boucle for et utilisez la pour faire la somme de toutes les cases du tableau dans la boucle. Que vaut total en sortie de boucle? pourquoi ?

b) Indiquez maintenant que total est une variable privée. Que vaut-elle en sortie de boucle? pourquoi ?

c) À l'aide d'une section critique, implémentez correctement la somme des éléments. Que constatez vous en terme de performances?

d) OpenMP permet de faire une opération de réduction sur une variable. Expliquez ce que cela signifie

e) Utilisez la clause de réduction pour arriver au même résultat et discutez les mérites de cette solution comparée à la précédente

Exercice 3

Écrivez un programme parallèle de calcul du produit de 2 matrices.

Exercice 4 (Blocs paralleles)

Pour cet exercice, inspirez vous du code Java du tri du TP1

a) Écrivez une version C mono-thread du tri fusion

b) Parallelisez cette version de de telle sorte que

  • le tableau initial est divisé en 2 sous tableaux
  • ces 2 sous tableaux sont triés en parallèle
  • le résultat est fusionné pour donner le tableau final

c) Est-il possible d'introduire plus de parallélisme?

Revision: r1.3 - 17 Sep 2010 - 09:54 - FabriceHuet
Minfo > ParallRepa > ParallTDM2
Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback