Title: Parallel Programming with MPI and OpenMP
1Parallel Programmingwith MPI and OpenMP
2Chapitre 6
3Sujets couverts
- Chemin le plus court entre toutes les paires de
noeuds - Tableau 2-D dynamique
- Communication entre deux noeuds
4Le problème du chemin le plus court entre toutes
les paires de noeuds dun graphe
4
A
B
6
3
1
3
5
C
1
D
2
E
5Algorithme de Floyd
for k ? 0 to n-1 for i ? 0 to n-1 for j ? 0 to
n-1 ai,j ? min (ai,j, ai,k
ak,j) endfor endfor endfor
6Création dynamique dun tableau 1-D
Run-time Stack
Heap
7Création dynamique dun tableau 2-D
Run-time Stack
Bstorage
B
Heap
8Création dynamique dun tableau 2-D
int B, i Bstorage (int) malloc
(Mnsizeof(int)) B(int) malloc
(msizeof(int)) for (i0 iltm i) Bi
Bstoragein
9Conception dun algorithme parallèle
- Partition
- Communication
- Répartition du travail
10Partition
- Doit-on décomposer les données ou le code?
- On peut facilement extraire du parallélisme de
données - La même instruction doit être exécutée n3 fois
- Pas de parallélisme de tâche
- On peut voir le problème comme n2 applications de
la même tâche à effectuer en parallèle sur des
données différentes.
11Communication
Mise-Ã -jour de a3,4 lorsque k 1
Tâches primitives
Iteration k Chaque tâche de la ligne k diffuse
sa valeur aux tâches de la même colonne
Iteration k chaque tâche de la colonne
k diffuse sa valeur aux tâches de la même ligne
12Répartition du travail
- p processeurs
- n2 valeurs de sortie
- On associe environ n2/2 valeurs à chaque
processeur
132 méthodes possibles
On regroupe par lignes
On regroupe par colonnes
14Comnparaison
- Regroupement par colonne
- On élimine la diffusion entre les lignes
- On élimine la diffusion entres les colonnes dun
même groupe - Regroupement par ligne
- On élimine la diffusion entre les colonnes
- On élimine la diffusion entres les lignes dun
même groupe - On choisi le regroupement par ligne puisque sur
la plupart des systèmes les matrices sont
représentées ligne par ligne.
15Fichier dentrée
Un processus est chargé de lire le fichier
dentrée et de distribuer son contenu aux autres
16Communicationentre deux noeuds
- Deux processus veulent communiquer
- Un processus envoie un message
- Lautre processus reçoit le message
- En opposition avec une diffusion ou un processus
envoie un message à tous les autres.
17Send/Receive
18Function MPI_Send
int MPI_Send ( void message,
int count, MPI_Datatype
datatype, int dest, int
tag, MPI_Comm comm )
19MPI_Datatype
- MPI_CHAR
- MPI_DOUBLE
- MPI_FLOAT
- MPI_INT
- MPI_LONG
- MPI_LONG_DOUBLE
- MPI_SHORT
- MPI_UNSIGNED_CHAR
- MPI_UNSIGNED
- MPI_UNSIGNED_LONG
- MPI_UNSIGNED_SHORT
20Function MPI_Recv
int MPI_Recv ( void message,
int count, MPI_Datatype
datatype, int source, int
tag, MPI_Comm comm,
MPI_Status status )
21MPI_status
- 3 champs
- MPI_SOURCE id du processus envoyant le message
- MPI_TAG le tag du message
- MPI_ERROR code derreur
22Utilisation de Send/Receive
if (ID j) Receive from I
if (ID i) Send to j
23Implémentation de MPI_Send et MPI_Recv
Processus expéditeur
Processus récepteur
Tampon du système
Tampon de la mémoire
Tampon du programme
Tampon du système
24Retour deMPI_Send
- Le processus expéditeur est bloqué tant que la
mémoire nest pas libéré - La mémoire est libéré lorsque
- Le message est copié dans le tampon, ou
- Le message est transmis
- Scénario typique
- Le message est copié dans le tampon
- La transmission seffectue pendant que
lexpéditeur poursuit son exécution
25Retour de MPI_Recv
- Le processus récepteur jusquà ce que le message
soit copié dans le tampon - Si le message narrive jamais alors le processus
ne débloquera jamais
26Interblocage
- Lorsquun processus attend un événement qui ne se
produira jamais - Les appels send/receive sont une cause importante
dinterblocage - Deux processus Les deux reçoivent avant
denvoyer - Aucun send ne correspond à un receive
- Un processus envoie un message à un mauvais
destinataire.