• Aucun résultat trouvé

Algorithmes Parallèles et Distribués MPI 2. Communications collectives Camille Coti César Rodríguez Franck Butelle

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmes Parallèles et Distribués MPI 2. Communications collectives Camille Coti César Rodríguez Franck Butelle"

Copied!
14
0
0

Texte intégral

(1)

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;

}

(2)

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

(3)

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τα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

(4)

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

(5)

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 . . . Z1

P2 ? ? ? . . . ?

...

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≈disperser

intMPI_Scatter(void∗sendbuf,intsendcount,MPI_Datatypesendtype, void∗recvbuf,intrecvcount,MPI_Datatyperecvtype, introot,MPI_Commcomm);

P0 ? ? ? . . . ?

P1 A1 B1 C1 . . . Z1

P2 ? ? ? . . . ?

...

Pn1 ? ? ? . . . ?

sendcount elts

P0 A1

P1 B1

P2 C1 ...

Pn1 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. . .

(6)

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

(7)

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

AllreduceReducepar 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

(8)

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(p1)messages ont circulé

Sik=1 (comunications unicast) alorsO(p)en temps (même si messages de 1 bit, temps de réception dep1 messages en(p1)/β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

(9)

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, . . . ,p1ª:

Ï envoient un message au processusr+2i(modulop)

Ï reçoivent un message du processusr2i(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 ?p1 é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

(10)

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

(11)

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

(12)

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 processusr2i 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

(13)

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+p1 é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 . . . Pp1

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

(14)

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≤ilog2p), 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. dei0, . . . ,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

Références

Documents relatifs

int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm). adresse du

int MPI_Sendrecv (void *sendbuf,int sendcount,MPI_Datatype sendtype, int dest,int sendtag,void *recvbuf,int recvcount,MPI_Datatype recvtype,int source,int recv

int MPI_Sendrecv (const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int

public void Scatter(Object sendbuf, int sendoffset, int sendcount, Datatype sendtype, Object recvbuf, int recvoffset, int recvcount, Datatype recvtype, int root)

Algorithmes distribués classiques (1ère partie) Éveil distribué par inondation.

Tout mesg envoyé à un site est placé dans sa file d’attente.. L’ordonnanceur du réseau permet aux

Si on a un algo d’élection alors on a un algo d’AC (en ajoutant 2m messages et D unités de temps). AC −→ élection (en ajoutant n − 1 messages et h unités de temps, où h est

Ï Rang dans MPI_COMM_WORLD = rang absolu dans l’application Utilisé pour les envois / réception de messages. La norme MPI Structure d’un