Systèmes Hautes Performances

Portail informatique

OpenMP - Travaux Pratiques

Hello world

Écrire une programme C séquentiel affichant « Hello world »
  • Compilez-le et exécutez-le

Modifier le programme pour que chaque thread affiche le message
  • Quel est le nombre de threads lancés par défaut ?
  • Positionner le nombre de threads à lancer à 4.
  • Compiler et exécuter.
  • Afficher le n° de chaque thread

Vérifier la compatibilité ascendante du programme
  • Compiler le programme OpenMP sans le support OMP
  • Protéger les appels à la lib OMP

Portée des variables

Tester l'effet des clauses private et firstprivate :
  • Déclarer et initialiser deux variables entières.
  • Dans une région parallèle à laquelle vous aurez passé l'une des variables en private et l'autre en firstprivate, récupérer l'identifiant du thread courant et l'ajouter à chacune de ces variables. Les afficher.
  • Vérifier le comportement escompté.

Tester l'effet de la clause shared :
  • Dans la région séquentielle, ajouter une troisième variable initialisée.
  • Passez-la à la région parallèle en tant que variable partagée.
  • Dans la région parallèle, affichez-la et vérifiez sa valeur.

Directive for

Parallélisation de boucle
  • Écrivez un programme C effectuant la somme de chaque élément d'un tableau et d'un scalaire dans un second tableau
  • Parallélisez ce programme avec OpenMP

Ordonnancement
  • En utilisant la fonction omp_get_schedule, déterminez quelle est la politique d'ordonnancement fixée par défaut.
  • Expérimentez l'effet de la clause schedule sur le programme : pour cela, affichez le n° du thread traitant chaque tour de boucle et observez la répartition.

Synchronisation
  • Créez une nouvelle région parallèle qui contient :
    • la même boucle for que précédemment décrite avec un scheduling static dont la taille=taille_du_tableau/2
    • un affichage notifiant le positionnement après la boucle
  • En positionnant OMP_NUM_THREADS à 4, observez l'ordonnancement effectué
    • Avec et sans la clause nowait

Parallélisation de boucle avec réduction
  • Écrivez un programme C calculant le somme des éléments d'un tableau
  • Parallélisez ce programme avec OpenMP
  • Comparez les temps d'exécution séquentielle et parallèle en utilisant la fonction double omp_get_wtime(void)

Directive Critical

Écrivez un programme permettant de calculer la somme des éléments d'un tableau grâce à une construction critical.