Fiche TD 5 (MPI)
Exercice 1 : Hello World distribué
Écrire un programme MPI où chaque processeur affiche un message "Bonjour, je suis le processeur X
parmi Y processeurs", où X est le rang du processeur et Y le nombre total de processeurs. Assurez-
vous que le programme fonctionne avec n'importe quel nombre de processeurs.
Exercice 2 : Somme parallèle
Créer un programme MPI où chaque processeur possède une valeur entière unique. Le processeur
maître (P0) calcule la somme de toutes les valeurs en utilisant MPI_Reduce.
Étapes :
1. Chaque processeur initialise une variable entière avec son rang (rang).
2. Utiliser MPI_Reduce pour envoyer toutes les valeurs au processeur maître.
3. Le processeur maître affiche le résultat.
Exercice 3 : Diffusion avec MPI_Bcast
Écrire un programme où le processeur maître (P0) initialise une valeur entière et la diffuse à tous les
autres processeurs à l'aide de MPI_Bcast. Chaque processeur affiche la valeur reçue.
- Modifier le programme pour que chaque processeur ajoute son rang à la valeur reçue avant de
l’afficher.
Exercice 4 : Calcul de la moyenne
Répartir un tableau de N valeurs entre plusieurs processeurs, calculer la moyenne des éléments du
tableau, et afficher le résultat final sur le processeur maître. Utiliser MPI_Scatter pour distribuer les
données et MPI_Reduce pour agréger la somme.
Étapes :
1. Initialiser un tableau d'entiers dans P0 (par exemple : {1, 2, 3, 4, 5, 6, 7, 8}).
2. Utiliser MPI_Scatter pour distribuer les sous-tableaux à chaque processeur.
3. Chaque processeur calcule la somme locale de ses éléments.
4. Agréger les résultats avec MPI_Reduce et calculer la moyenne.
Exercice 5 : Tri parallèle
Répartir un tableau d'entiers entre plusieurs processeurs pour qu'ils trient leurs sous-tableaux
localement. Ensuite, utiliser MPI_Gather pour regrouper les résultats sur P0.
Étapes :
1. Initialiser un tableau d'entiers aléatoires sur P0.
1
2. Utiliser MPI_Scatter pour répartir le tableau.
3. Chaque processeur trie son sous-tableau (utiliser une méthode simple comme le tri par
insertion).
4. Regrouper les résultats sur P0 avec MPI_Gather.
5. Sur P0, effectuer une fusion finale des sous-tableaux triés.
Exercice 6 : Barrière de synchronisation
Implémenter un programme où chaque processeur exécute une tâche spécifique, mais aucun
processeur ne passe à l'étape suivante tant que tous n'ont pas terminé la première étape. Utiliser
MPI_Barrier pour synchroniser les processeurs.
Exercice 7 : Produit matriciel distribué
Implémenter un programme parallèle qui calcule le produit de deux matrices A et B de manière
distribuée.
1. Répartir les lignes de la matrice A entre les processeurs avec MPI_Scatter.
2. Diffuser la matrice B entière à tous les processeurs avec MPI_Bcast.
3. Chaque processeur calcule sa partie du résultat.
4. Rassemblez les résultats avec MPI_Gather.
Exercice 8 : Calcul de π avec la méthode de Monte Carlo
Utiliser MPI pour estimer la valeur de π en générant des points aléatoires dans un carré de côté 2 et
en calculant le rapport des points à l'intérieur d'un cercle inscrit.
1. Chaque processeur génère un nombre défini de points.
2. Compter les points dans le cercle pour chaque processeur.
3. Agréger les résultats avec MPI_Reduce pour calculer π.
Exercice 9 : Maximum distribué
Implémenter un programme où chaque processeur possède un tableau d'entiers. Utiliser
MPI_Reduce pour trouver le maximum global parmi tous les éléments des tableaux.
Exercice 10 : Communication en anneau
Créer un programme où chaque processeur envoie un message entier à son voisin suivant dans un
anneau logique (dernier processeur envoie au premier). Utiliser MPI_Send et MPI_Recv.