Algorithmes Parallèles et Distribués
MPI 2. Communications collectives
Camille Coti César Rodríguez Franck Butelle
LIPN, Université Paris 13 Formation Ingénieurs SupGalilée Info 3 et AIR 3
06/2021
Transparents préparés par Camille Coti, modifiés par César Rodríguez et Franck Butelle
(AIR3 + INFO3) APD – MPI 2 06/2021 1 / 55
Plan
1 Exemple de diffusion 3
2 Modélisation et mesure de la performance 8
3 Communications collectives MPI 14
4 Algorithmes utilisés 28
5 Bibliographie 54
(AIR3 + INFO3) APD – MPI 2 06/2021 2 / 55
Exemple de diffusion
Plan
1 Exemple de diffusion 3
Code MPI 4
MPI_Bcast 5
Sémantique des communications collectives dans MPI 6
Exemple d’exécution 7
2 Modélisation et mesure de la performance 8
3 Communications collectives MPI 14
4 Algorithmes utilisés 28
5 Bibliographie 54
Exemple de diffusion Code MPI
Exemple de communication collective : diffusion avec MPI
Diffusion avec MPI :MPI_Bcast
Diffusion d’un ps vers tous les autres : définition d’un ps racine (root) On envoie un tampon deN éléments d’un type donné, sur un communicateur
#include<stdio.h>
#include<stdlib.h>
#include<mpi.h>
intmain(intargc,char∗∗ argv ) { intsize, rank, data, root = 0;
doubledebut,fin;
MPI_Init( &argc, &argv );
MPI_Comm_size(MPI_COMM_WORLD, &size );
MPI_Comm_rank(MPI_COMM_WORLD, &rank );
if( rank == root ) data = getpid();
debut=MPI_Wtime();
MPI_Bcast(&data, 1,MPI_INT, root,MPI_COMM_WORLD);// tous doivent l’appeler fin=MPI_Wtime(); printf("temps=%lf\n", fin − debut);
MPI_Finalize();
returnEXIT_SUCCESS;
}
Exemple de diffusion MPI_Bcast
Exemple de communication collective : diffusion avec MPI
int MPI_Bcast(&data, N,MPI_INT, root,MPI_COMM_WORLD);
Description
Le processusrootdiffuseNentiers (data) vers chaque processus du communicateur MPI_COMM_WORLD
Avantla communication collective :
dataest un unique entier initialisé uniquement surroot
Tous les processus sauf 0 reçoivent quelque chose dans leur variabledata Aprèsla communication collective :
Tous les processus ont la même valeur dans leur variable localedata
La valeur deNdansrootdoit être≤la valeur passée dans les autres processus Remarques:
TOUSles ps du communicateur concerné doivent appelerMPI_Bcast Sinon : deadlock
(AIR3 + INFO3) APD – MPI 2 06/2021 5 / 55
Exemple de diffusion Sémantique des communications collectives dans MPI
Remarques sur la sémantique des communications collectives
TOUSles processus participent à la communication collective En MPI : lié à la notion de communicateur
On effectue une communication collectivesur un communicateur
Ï MPI_COMM_WORLDou autre
Ï Utilité de bien définir ses communicateurs !
Un processus sort de la communication collective quand il a terminésa participationà la collective
Aucune garantie sur l’avancée globale de la communication collective
Dans certaines communications collectives, un processus peut avoir terminé avant que d’autres processus n’aient commencé
Le fait qu’un processus ait terminéne signifie pasque la collective est terminée ! Pas de synchronisation (sauf pour certaines communications collectives) Bloquant(pour ce cours)
MPI 3.0+ propose des communications collectives non-bloquantes
(AIR3 + INFO3) APD – MPI 2 06/2021 6 / 55
Exemple de diffusion Exemple d’exécution
Exemple
P0 P1 P2 P3 P4
entre
entre
entre
entre
entre
sort
sort
sort
sort
sort
(AIR3 + INFO3) APD – MPI 2 06/2021 7 / 55
Modélisation et mesure de la performance
Plan
1 Exemple de diffusion 3
2 Modélisation et mesure de la performance 8
Modèle et définitions 9
Mesure de la performance 10
Exemples d’algos de diffusion 11
3 Communications collectives MPI 14
4 Algorithmes utilisés 28
5 Bibliographie 54
(AIR3 + INFO3) APD – MPI 2 06/2021 8 / 55
Modélisation et mesure de la performance Modèle et définitions
Modèle pour les communications
S’approcher de la réalité
Hypothèses et notation :
Communications point-à-point, lien dédié entre chaque paire de processus Envoi et réception simultanée (full-duplex)
α:latence(retard du entre autres autemps de propagationdu signal) (secondes) On appelle lagiguela variation de la latence dans le temps. . .ignorée ici.
m: taille dumessage(bits)
β:débit binaire(dit aussibande passantepar abus de language) en bits/s k : ports de communication simultanée (souventk=1).
p: nombre de processus, rangs entre 0 etp−1
Délai d’acheminement d’un message :
α+m β
modèle similaire : le modèle linéaire :α+mτoùαest le temps de l’envoi d’un message de longueur minimal etτle temps à ajouter pour chaque bit supplémentaire
(AIR3 + INFO3) APD – MPI 2 06/2021 9 / 55
Modélisation et mesure de la performance Mesure de la performance
Comment mesurer la performance ?
Question: comment représenter le temps pris par une communication collective ? Temps pour quetous les processusparticipent à la communication collective et en sortent
Temps pour quechaque processustermine sa participation locale à la communication collective
Comment quantifier et mesurer ? Nombre total de messages échangés
Le nombre max/min/moy. de messages envoyés/reçus parun processus
Chaîne de dépendance causale laplus longue(«chaîne de messages») mais avec temps de calcul local : envoyer un message d’un ps àj ps :O(j)unités de temps si k=1.
Paramètres :
Taille du message à traiter avec l’opération collective Nombre de processus impliqués !
Certains algorithmes seront plus performants sur des petits messages(bandwidth-bound), d’autres sur des gros messages(latency-bound), d’autres supportent mieux le chgt d’échelle. . .
(AIR3 + INFO3) APD – MPI 2 06/2021 10 / 55
Modélisation et mesure de la performance Exemples d’algos de diffusion
Exemple : Diffusion en étoile
P0 P1 P2 P3 P4 P5 P6 P7
debut
debut
debut
debut
debut
debut
debut
debut
fin
fin
fin
fin
fin
fin
fin fin
Modélisation et mesure de la performance Exemples d’algos de diffusion
Exemple : Diffusion en chaîne
P0 P1 P2 P3 P4 P5 P6 P7
debut
debut
debut
debut
debut
debut
debut
debut fin
fin
fin
fin
fin
fin
fin
fin
Modélisation et mesure de la performance Exemples d’algos de diffusion
Exemple : Diffusion en arbre binomial
P0 P1 P2 P3 P4 P5 P6 P7
debut
debut
debut
debut
debut
debut
debut
debut
fin
fin
fin
fin
fin
fin
fin
fin
(AIR3 + INFO3) APD – MPI 2 06/2021 13 / 55
Communications collectives MPI
Plan
1 Exemple de diffusion 3
2 Modélisation et mesure de la performance 8
3 Communications collectives MPI 14
Principales fonctions 15
Sémantique des principales fonctions 16
4 Algorithmes utilisés 28
5 Bibliographie 54
(AIR3 + INFO3) APD – MPI 2 06/2021 14 / 55
Communications collectives MPI Principales fonctions
Principales communications collectives en MPI
Barrière MPI_Barrier Diffusion MPI_Bcast Distribution
MPI_Scatter,MPI_Scatterv Concaténation
MPI_Gather,MPI_Gatherv Concaténation vers tous MPI_Allgather,MPI_Allgatherv
Tous vers tous
MPI_Alltoall,MPI_Alltoallv Réduction
MPI_Reduce
Réduction avec redistribution du résultat MPI_Allreduce
Réduction avec distribution du résultat MPI_Reduce_scatter
Il existe aussi les versions non bloquantes de ces fonctions :MPI_Igatherpar exemple.
(AIR3 + INFO3) APD – MPI 2 06/2021 15 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Barrier
int MPI_Barrier(MPI_Commcomm)
Chaque processus du communicateurcommse bloque sur l’appel àMPI_Barrier jusqu’à quetousles processus démarrent l’appel à la fonction
(AIR3 + INFO3) APD – MPI 2 06/2021 16 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Bcast
int MPI_Bcast(void∗buf,intcount, MPI_Datatypedttype,introot, MPI_Commcomm)
Exemple avec root=1 :
P0 ? ? ? . . . ?
P
1 A1 B1 C1 . . . Z1P2 ? ? ? . . . ?
...
Pn−1 ? ? ? . . . ?
buf
P0 A1 B1 C1 . . . Z1
P1 A1 B1 C1 . . . Z1
P2 A1 B1 C1 . . . Z1
...
Pn−1 A1 B1 C1 . . . Z1
buf
MPI Bcast
(AIR3 + INFO3) APD – MPI 2 06/2021 17 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Scatter (1/3)
Scatter≈disperserintMPI_Scatter(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, introot,MPI_Commcomm);
P0 ? ? ? . . . ?
P1 A1 B1 C1 . . . Z1
P2 ? ? ? . . . ?
...
Pn−1 ? ? ? . . . ?
sendcount elts
P0 A1
P1 B1
P2 C1 ...
Pn−1 Z1 recvcount elts dans recvbuf
MPI Scatter
(AIR3 + INFO3) APD – MPI 2 06/2021 18 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Scatter (2/3)
intMPI_Scatter(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, introot,MPI_Commcomm);
Processsusrootenvoiesendcountéléments du tableausendbufaux ps de rang 0, 1, 2, . . . , (|comm| - 1)
Chaque processus du communicateurcommreçoitrecvcountéléments dans son tableaurecvbuf
Significatif au niveau deroot: sendbuf,sendcount,sendtype,
Significatif sur tous les processus (y comprisroot) : recvbuf,recvcount,recvtype,root,comm
"Erreur sirecvcount*sizeof(recvtype)<sendcount*sizeof(sendtype)!
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Scatter (3/3)
intMPI_Scatter(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, introot,MPI_Commcomm);
Attention
Le nombre d’éléments du tableausendbuflus par le processusrootdépend de la taille du communicateur. Si la taille ducommdépends du nombre de processus dans
MPI_COMM_WORLD, attention à ne pas déborder dans la lecture ! // Extrait de prog.c
/∗ ... ∗/
intsb[4 ∗ 10];
MPI_Scatter(sb, 4,MPI_INT, rb, 4,MPI_INT, 0,MPI_COMM_WORLD);
/∗ ... ∗/
$ mpiexec -n 11 ./prog
Buffer overflow : 11*4 éléments du tableausblus dans le processusroot! Situation analogue pour les fonctions des diapos suivantes. . .
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Gather
Gather≈rassembler (inverse de MPI_Scatter)intMPI_Gather(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, introot,MPI_Commcomm);
P0 A1
P1 B1
P2 C1
...
Pn−1 Z1
sendcount elts dans sendbuf
P0 ? ? ? . . . ?
P1 A1 B1 C1 . . . Z1
P2 ? ? ? . . . ?
...
Pn−1 ? ? ? . . . ?
recvcount elts
recvbuf MPI Gather
(AIR3 + INFO3) APD – MPI 2 06/2021 21 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Allgather
intMPI_Allgather(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, MPI_Commcomm);
P0 A1
P1 B1
P2 C1 ... Pn−1 Z1
sendcount elts dans sendbuf
P0 A1 B1 C1 . . . Z1
P1 A1 B1 C1 . . . Z1
P2 A1 B1 C1 . . . Z1 ...
Pn−1 A1 B1 C1 . . . Z1 recvcount elts
recvbuf MPI Allgather
Allgather≡Gatherpar l’un des processus +Bcastà tous.
(AIR3 + INFO3) APD – MPI 2 06/2021 22 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Alltoall
intMPI_Alltoall(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, MPI_Commcomm);
P0 A0 B0 C0 . . . Z0
P1 A1 B1 C1 . . . Z1
P2 A2 B2 C2 . . . Z2
...
Pn−1 An−1Bn−1Cn−1 . . . Zn−1 sendcount elts
P0 A0 A1 A2 . . . An−1
P1 B0 B1 B2 . . . Bn−1
P2 C0 C1 C2 . . . Cn−1
...
Pn−1 Z0 Z1 Z2 . . . Zn−1 recvcount elts
MPI Alltoall
Première «colonne» (premierssendcountéléments de chaque processus) pour P0, deuxième
«colonne» pour P1, . . .
(AIR3 + INFO3) APD – MPI 2 06/2021 23 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Reduce
intMPI_Reduce(void∗sendbuf,void∗recvbuf,intcount,MPI_Datatypedt, MPI_Opop,introot,MPI_Commcomm);
Exemple de Reduction par l’opérateurMPI_SUMpar «colonnes» et envoi au processusroot=P1:
P0 A0 B0 C0 . . . Z0
P1 A1 B1 C1 . . . Z1
P2 A2 B2 C2 . . . Z2
...
Pn−1 An−1 Bn−1 Cn−1 . . . Zn−1
P0 ? ? ? . . . ?
P1 P
iAiP
iBiP
iCi . . . P
iZi
P2 ? ? ? . . . ?
...
Pn−1 ? ? ? . . . ?
MPI Reduce
(AIR3 + INFO3) APD – MPI 2 06/2021 24 / 55
Communications collectives MPI Sémantique des principales fonctions
Opérateurs de réduction prédéfinis
Opérateur Signification MPI_MAX maximum
MPI_MIN minimum MPI_SUM somme MPI_PROD produit MPI_LAND et logique MPI_BAND et binaire MPI_LOR ou logique MPI_BOR ou binaire MPI_LXOR ou-exclusif logique MPI_BXOR ou-exclusif binaire MPI_MAXLOC max et indice du max
MPI_MINLOC min et indice du min
VoirMPI_Op_createdans le cours MPI3 pour la création de nouveaux opérateurs de réduction. . .
(AIR3 + INFO3) APD – MPI 2 06/2021 25 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Allreduce
intMPI_Allreduce(void∗sendbuf,void∗recvbuf,intcount,MPI_Datatypedt, MPI_Opop,MPI_Commcomm);
P0 A0 B0 C0 . . . Z0
P1 A1 B1 C1 . . . Z1
P2 A2 B2 C2 . . . Z2 ...
Pn−1 An−1 Bn−1 Cn−1 . . . Zn−1
P0 P
iAiP
iBiP
iCi . . . P
iZi
P1 P
iAiP
iBiP
iCi . . . P
iZi
P2 P
iAiP
iBiP
iCi . . . P
iZi ...
Pn−1 P
iAiP
iBiP
iCi . . . P
iZi MPI Allreduce
Allreduce≡Reducepar l’un des processus +Bcastà tous
(AIR3 + INFO3) APD – MPI 2 06/2021 26 / 55
Communications collectives MPI Sémantique des principales fonctions
Sémantique de MPI_Reduce_scatter
intMPI_Reduce_scatter(void∗sendbuf,void∗recvbuf,int∗recvcounts,
MPI_Datatypedatatype,MPI_Opop,MPI_Commcomm);
P0 A0 B0 C0 . . . Z0
P1 A1 B1 C1 . . . Z1
P2 A2 B2 C2 . . . Z2
...
Pn−1 An−1 Bn−1 Cn−1 . . . Zn−1
P0 P
iAi
P1 P
iBi
P2 P
iCi
...
Pn−1 P
iZi MPI Reduce Scatter
Reduce_scatter≡Reduceavec count=Σrecvcounts +Scattervavec sendcounts=recvcounts
Algorithmes utilisés
Plan
1 Exemple de diffusion 3
2 Modélisation et mesure de la performance 8
3 Communications collectives MPI 14
4 Algorithmes utilisés 28
Résumé 29
Barrière 30
Diffusion 34
Distribution 43
Concaténation 44
Concaténation avec redistribution 45
Tous vers tous 47
Réduction 48
Réduction avec redistribution 51
5 Bibliographie 54
Algorithmes utilisés Résumé
Communications collectives MPI : algorithmes
MPI_Barrier, barrière
Fan-in-fan-out (étoile double) Anneau double
Bruck
MPI_Bcast, diffusion Étoile
Chaîne (pipeline ou non) Binomial
Fibonacci Split-binary tree MPI_Scatter, distribution
Étoile Binomial
MPI_Gather, concaténation Linéaire (étoile inverse) Binomial (recursive doubling)
MPI_Allgather, concaténation vers tous Gather + Bcast
Anneau (gross msg.) Bruck
MPI_Alltoall, tous vers tous Linéaire
Bruck2
MPI_Reduce, réduction
Bcast inversé (étoile, binomial. . . ) Rabenseifner
MPI_Allreduce, réduction avec rédistrib.
Reduce + Bcast Rabenseifner Anneau
MPI_Reduce_scatter, réduction + distrib.
Rabenseifner
(AIR3 + INFO3) APD – MPI 2 06/2021 29 / 55
Algorithmes utilisés Barrière
Barrière
intMPI_Barrier(MPI_Commcomm);
Un processus ne sort de la barrière qu’une fois que tous les autres processus du communicateur y sont entrés
Apporte une certaine synchronisation entre les processus : quand on dépasse ce point, on sait que tous les autres processus l’ont au moins atteint
Équivalent à unAllgatheravec un message de taille nulle Algorithmes
Fan-in-fan-out (étoile double) Anneau double
Bruck
(AIR3 + INFO3) APD – MPI 2 06/2021 30 / 55
Algorithmes utilisés Barrière
Algorithme de barrière : l’étoile (double)
Algorithme
On choisit un processusracine
Chaque processus envoie un message à la racine
Quand la racine a reçup−1 messages, ellerépondà chaque processus avec un autre message
Complexité :
2(p−1)messages ont circulé
Sik=1 (comunications unicast) alorsO(p)en temps (même si messages de 1 bit, temps de réception dep−1 messages en(p−1)/βet émission idem).
Remarques :
La racine travaille beaucoup plus que les autres processus Aliasfan-in-fan-out
(AIR3 + INFO3) APD – MPI 2 06/2021 31 / 55
Algorithmes utilisés Barrière
Algorithme de barrière : anneau double
Algorithme
On forme un anneau virtuel avec tous les processus dans le communicateur Première étape:
Un message fait un premier tour de l’anneau, l’arrivéede chaque processus fait avancer le message au processus suivant
Deuxième étape:
Le message a complété un premier tour, il fait maintenant un deuxième tour pour débloquerchaque processus
Complexité :
2pmessages envoyés au total Chaque processus envoie 2 messages 2punités de temps
Remarques :
Répartition égalitaire du travail mais exécution séquentielle
(AIR3 + INFO3) APD – MPI 2 06/2021 32 / 55
Algorithmes utilisés Barrière
Algorithme de barrière : Bruck
Algorithme de Bruck
On forme un anneau à cordes virtuel avec tous les processus dans le communicateur L’algorithme prendse:=§log2p¨étapes
Pour toute étapei∈{0, . . . ,e−1}:
Tous (simultanément) les processusr∈©0, . . . ,p−1ª:
Ï envoient un message au processusr+2i(modulop)
Ï reçoivent un message du processusr−2i(modulop)
Aprèseétapes, chaque processus est sûr de pouvoir sortir de la barrière Complexité :
Chaque processus envoie exactement§log2p¨messages
§log2p¨unités de temps Remarques :
Répartition égalitaire du travail
(AIR3 + INFO3) APD – MPI 2 06/2021 33 / 55
Algorithmes utilisés Diffusion
Diffusion
intMPI_Bcast(void∗buffer,intcount,MPI_Datatypedatatype, introot,MPI_Commcomm);
Une diffusion envoie une donnée (le contenu d’un buffer) : à partir d’un processus racine
vers tous les processus du communicateur
Algorithmes Étoile
Chaîne (avec pipeline ou non) Binomial
Fibonacci Split-binary tree
(AIR3 + INFO3) APD – MPI 2 06/2021 34 / 55
Algorithmes utilisés Diffusion
Algorithme de diffusion : l’étoile
Le processus racine envoie à tous les autres processus du communicateur : if( root == rank ) {
for( i = 0 ; i < size ; i++ ) { if( i != root )
send ( message, i ) }
}else{// tous (autre que root) recoivent un message de la racine recv ( message, root )
}
Nombre de messages ?p−1 émis par la racine, 1 reçu par processus diff. de la racine Mais le message de chaque processus n’arrive pas tout de suite !
Ï En temps : dépend desizeet dek(nbre max d’envois simultanés) Complexité temporelle enO(p/k): supporte mal le changement d’échelle
Algorithmes utilisés Diffusion
Algorithme de diffusion : arbre binomial — exécution
Idée: chaque processus disposant du message l’envoie à un autre processus Exemple (p=16 ; k=1 ;0: phase 0,1 : phase 1, . . . :)
P0
P1 0
P2 1
P3 1
P4 2
P5 2
P6 2
P7 2
P8 3
P9 3
P10 3
P11 3
P12 3
P13 3
P14 3
P15 3
Algorithmes utilisés Diffusion
Algorithme de diffusion : arbre binomial (détail)
Idée: chaque processus disposant du message l’envoie à un autre processus Émetteur\Étapes :0 1 2 3
0 → 1 2 4 8
1 → 3 5 9
2 → 6 10
3 → 7 11
4 → 12
5 → 13
6 → 14
7 → 15
Optimal en nb. d’étapes sik=1 (nbre max d’envois simultanés).
Généralisation possible sik>1
À l’étapei∈©0, . . . ,¥log2p¦ªle processus de
rangr∈©0, . . . ,pªenvoie le message aux
processus de rangr+2i seulement sii≥
(0 sir=0
¥log2r¦+1 sinon ET sir+2i<p.
À chaque étape on envoie 2 fois plus de messages qu’à l’étape précédente.
Donc¥log2p¦+1 étapes
Un arbre binomial extrait le maximum de parallélisme possible dans la communication.
(AIR3 + INFO3) APD – MPI 2 06/2021 37 / 55
Algorithmes utilisés Diffusion
Algorithme de diffusion : arbre de Fibonacci
Idée: chaque processus disposant du message l’envoie ànprocessus fils : Le ps de rangi envoie aux ps de rang{n×i+1, . . . ,n×i+n}.
Sik<n, l’envoi nécessite plusieurs étapes Bon sin=k
Arbre binaire = cas particulier d’arbre de Fibonacci avecn=2 Comparaison avec l’algorithme binomial :
Fibonacci: chaque processus envoieexactementnmessages Binomial:le nombre varie, la racine fait plus d’envois que les autres Fibonacci est moins intéressant que l’arbre binomial sik=1 Complexité :
en temps = Hauteur de l’arbre =§logn(p)¨
(AIR3 + INFO3) APD – MPI 2 06/2021 38 / 55
Algorithmes utilisés Diffusion
Algorithme de diffusion : arbre de Fibonacci — exécution
p=8, n=2, k=1
P0
P1 1
P2 2
P3 2
P4 3
P5 3
P7 3
P6 4
(AIR3 + INFO3) APD – MPI 2 06/2021 39 / 55
Algorithmes utilisés Diffusion
Algorithme de diffusion : arbre de Fibonacci — exécution
P0 P1 P2 P3 P4 P5 P6 P7
debut
debut
debut
debut
debut
debut
debut
debut
fin
fin
fin
fin
fin
fin
fin
fin
(AIR3 + INFO3) APD – MPI 2 06/2021 40 / 55
Algorithmes utilisés Diffusion
Algorithme de diffusion : split-binary tree
Pour les gros messages...
Idée: La racine envoie chaque moitié du message à chaque sous-arbre dans un arbre binaire (Fibonacci avecn=2)
Plus particulièrement :
La racine divise le message en deux
La première moitié est envoyée à son fils de droite La deuxième moitié est envoyée à son fils de gauche Les demi-messages sont transmis dans les deux sous-arbres
Arrivé en bas, chaque processus du sous-arbre de droite échange son demi-message avec un processus du sous-arbre de gauche
Complexités :
Nombre de messages :p/2 de plus qu’un arbre binaire, en temps 1 de plus qu’un arbre binaire.
La technique de division du message divise par 2 la taille du message à transmettre Donc on divise par 2 le rapport temps/débit pour le coût d’un envoi de message sup.
Intéressant pour lesgros messages!
(AIR3 + INFO3) APD – MPI 2 06/2021 41 / 55
Algorithmes utilisés Diffusion
Algorithme de diffusion : split-binary tree
Pour les gros messages...
P0
P1
1
P2
2
P3
2
P4
3
P5
3
P6
4
(AIR3 + INFO3) APD – MPI 2 06/2021 42 / 55
Algorithmes utilisés Diffusion
Algorithme de diffusion : split-binary tree
Pour les gros messages...
P0
P1
1
P2
2
P3
2
P4
3
P5
3
P6
4 4,5
Algorithmes utilisés Distribution
Distribution
intMPI_Scatter(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, introot,MPI_Commcomm);
Distribution (to scatter= disperser) d’un tampon vers plusieurs processus
Chaque fraction de taillesendcountdu tampon d’envoi, disponible sur la racine, est envoyé vers un processus du communicateur dans l’ordre des rangs
Possibilité d’utiliserrecvbuf=MPI_IN_PLACEsur la racine (pas d’envoi de message, buffer sortie=buffer entrée).
Il existeMPI_Scattervpour distribuer des données de tailles irrégulières.
Algorithmes
Linéaire (étoile) : la racine envoie à tous les autres nœuds
Arbre binomial : on envoie à un nœud le tampon qui lui est destiné ainsi que ceux destinés à ses enfants
Algorithmes utilisés Concaténation
Concaténation vers un processus
intMPI_Gather(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, introot,MPI_Commcomm);
Concaténation du contenu des tampons (to gather= rassembler, opération inverse de MPI_Scatter) :
Les contenus des tampons sont envoyés vers la racine de la concaténation Possibilité d’utiliser des datatypes différents en envoi et en réception (attention, source d’erreurs)
recvbufne sert que sur la racine
Possibilité d’utilisersendbuf=MPI_IN_PLACEsur la racine
Il existeMPI_Gathervpour rassembler des données de tailles irrégulières.
Algorithmes
Même chose que pour la distribution :
Linéaire : la racine collecte le tampon de tous les autres processus
Arbre binomial : chaque processus envoie à son père, qui rassemble les tampons de tous ses enfants et envoie le résultat à son père (recursive doubling)
(AIR3 + INFO3) APD – MPI 2 06/2021 44 / 55
Algorithmes utilisés Concaténation avec redistribution
Concaténation avec redistribution du résultat
intMPI_Allgather(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, MPI_Commcomm);
Similaire àMPI_Gathersans la racine
Algorithmes
Gather + Bcast (approche naïve, pas efficace) Anneau (gros messages)
Bruck
(AIR3 + INFO3) APD – MPI 2 06/2021 45 / 55
Algorithmes utilisés Concaténation avec redistribution
Algorithme de Bruck pour MPI_Allgather
À l’étapei∈©0, . . . ,§log2p¨−1ª, le processusrenvoie un message de taille 2i au processusr−2i modp.
Les messages grossissent à chaque étape sauf peut être la dernière.pmessages envoyés en parallèle (sik=1)
Sourceimage:[Brucketal.97]
(AIR3 + INFO3) APD – MPI 2 06/2021 46 / 55
Algorithmes utilisés Tous vers tous
Distribution et concaténation de données
intMPI_Alltoall(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, MPI_Commcomm);
Distribution d’un tampon de tous les processus vers tous les processus
Sur chaque processus, le tampon d’envoi est découpé en blocs de taillesendcount.
Le blockdu psjest envoyé au pskqui le met dans la placejderecvbuf.
Algorithmes
Bruck : originalement conçu pour Alltoall Linéaire (pairewise exchange) :
for( i = 0 ; i < size ; i++ ) { if( i != rank ) {
sendrecv ( envoi[i], resultat[i], i );
} }
(AIR3 + INFO3) APD – MPI 2 06/2021 47 / 55
Algorithmes utilisés Réduction
Réduction
intMPI_Reduce(void∗sendbuf,void∗recvbuf,intcount,MPI_Datatypedt, MPI_Opop,introot,MPI_Commcomm);
Effectue l’opérationop
Ï sur une donnée disponible sur tous les processus du communicateur
Ï vers la racine de la réduction (root)
Opérations disponibles dans le standard :MPI_SUM,MPI_MAX,MPI_MIN. . . Possibilité de définir ses propres opérations
Ï La fonction doit être associative mais pas forcément commutative Mettre le résultat dans le tampon d’envoi (sur le processus racine) : MPI_IN_PLACE
Algorithmes
Bcast inversé (étoile, binomial, Fibonacci, chaîne) Rabenseifner
(AIR3 + INFO3) APD – MPI 2 06/2021 48 / 55
Algorithmes utilisés Réduction
Algorithme de réduction : arbre de Fibonacci
Approche naïve : considérer une réduction comme une diffusion inversée Pas toujours idéal : l’opération peut prendre un temps non négligeable
Utilisation d’un arbre de Fibonacci Les processus fils envoient à leur père
Le père fait le calcul une fois qu’il a reçu les données de ses fils Puis il transmet le résultat à son propre père
Mieux qu’un arbre binomial à cause de l’opération de calcul Doit être effectuée sur l’ensemble des données des fils
On doit donc avoir reçu tous les buffers des fils, puis effectuer le calcul En ce sens, la réduction n’est donc pas une diffusion inversée !
(AIR3 + INFO3) APD – MPI 2 06/2021 49 / 55
Algorithmes utilisés Réduction
Algorithme de réduction : chaîne
Idée : établir un pipeline entre les processus Chaque processus découpe son buffer en plusieurs parties
Les sous-buffers sont envoyés un par un selon une chaîne formée par les processus
Complexités (pourNfragments etpps, messages de taillen/N.)
N(p−1)messages N+p−1 étapes
Mais débit nécessaire divisé parN. Très intéressant pour des gros messages sur des petits ensembles de processus
P0 P1 P2 . . . Pp−1
A0
B0 A1+A0
C0 B1+B0
D0 C1+C0
D1+D0
PA
PB
PC
PD
Algorithmes utilisés Réduction avec redistribution
Réduction avec redistribution du résultat
intMPI_Allreduce(void∗sendbuf,void∗recvbuf,intcnt,MPI_Datatypedt, MPI_Opop,MPI_Commcomm);
Équivalent à :
Un Reduce vers une racine Suivi d’un Broadcast
Ce qui serait une implémentation très inefficace !
Algorithmes Reduce + Bcast Anneau Rabenseifner
Algorithmes utilisés Réduction avec redistribution
Algorithme de réduction avec redistribution du résultat : anneau
Idée: deux tours, calcul du résultat et redistribution (avec segmentation ou pas)
Même principe donc que la chaîne de réduction : Utilisation d’une chaîne pour calculer le résultat
Une fois que le dernier processus de la chaîne a le résultat d’une portion du buffer, il l’envoie à son voisin dans l’anneau
Le résultat circule pendant que le reste du buffer est calculé Établissement d’un pipeline de redistribution du résultat
Intéressant pour des gros messages : idem chaîne de réduction.
(AIR3 + INFO3) APD – MPI 2 06/2021 52 / 55
Algorithmes utilisés Réduction avec redistribution
Algorithme de réduction avec redistribution du résultat
Algorithme de Rabenseifner, cas commutatif
Idée: A chaque étapei (1≤i≤log2p), les ps échangent deux par deux la moitié de leur buffer avec le processus à distancep/2i, puis réduction faite sur les données reçues.
Exemple (p=8 et on suppose quenest une puissance de 2)
Etape 1 (distancep/2=4) : P0 envoie à P4 son buf. pouri∈n/2, . . . ,n−1 et P4 envoie à P0 son buf. dei∈0, . . . ,n/2−1 ; de même P1↔P5, P2↔P6, P3↔P7.
P0 peut donc calculer A0+A4, B0+B4,. . . P2 peut donc calculer A2+A6, B2+B6,. . . . . .
Etape 2 (distance dep/4=2) : P0↔P2, P1↔P3,P4↔P6,P5↔P7 ;
P0 peut donc calculer A0+A4+A2+A6. . .et P1 peut calculer A1+A3+A5+A7. . . Etape 3 (distance dep/8=1) : P0↔P1, P2↔P3,P4↔P5,P6↔P7 ;
P0 peut donc calculerP7i=0Ai. . . Intéressant pour des petits messages :
Nombre d’étapes :O(log2p)
(AIR3 + INFO3) APD – MPI 2 06/2021 53 / 55
Bibliographie
Plan
1 Exemple de diffusion 3
2 Modélisation et mesure de la performance 8
3 Communications collectives MPI 14
4 Algorithmes utilisés 28
5 Bibliographie 54
(AIR3 + INFO3) APD – MPI 2 06/2021 54 / 55
Bibliographie
Bibliographie
[Pješivac-Grbović 07]
Jelena Pješivac-Grbović. Towards Automatic and Adaptive Optimizations of MPI Collective Operations. PhD thesis. University of Tennessee. USA.
[Bruck et al. 97]
Jehoshua Bruck et al. Efficient algorithms for all-to-all communications in multiport message-passing systems IEEE Transactions on Parallel and Distributed Systems, Vol. 8, n. 11, Nov. 1997
(AIR3 + INFO3) APD – MPI 2 06/2021 55 / 55