Systèmes Hautes Performances

Portail informatique
É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
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.
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)
Écrivez un programme permettant de calculer la somme des éléments d'un tableau grâce à une construction critical.