Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer...

Preview:

Citation preview

Calcul Haute-PerformanceHigh-Performance Computing (HPC)

Université Paris-Sud

Marc Baboulin (baboulin@lri.fr)

Contenu

● I - Introduction

● II - Programmation des architectures à mémoire distribuée

● III - Présentation de MPI

● IV - Analyse de performance

● V - Programmation des architectures à mémoire partagée

● VI - Les bibliothèques numériques parallèles

I – Introduction

Le parallélisme en quelques mots

● Division d'un algorithme en tâches exécutables simultanément

● Exécution d'un algorithme en utilisant plusieurs processeurs

● Objectif: réduire le temps de résolution d'un problème et/outraiter plus de données

● Architectures matérielles

● Modèle de programmation

● Notion de “parallélisabilité”

Problématique:

Définitions:

Loi de Moore: la course aux GHz

● Conjecture: le nombre de transistors double tous les 2 ans

Loi de Moore et containtes physiques

● Jusqu'en 2004, les gains de performances étaient obtenus par:

● Augmentation des fréquences d'horloge

● Amélioration du parallélisme via les jeux d'instructions

● Depuis 2004, difficultés dûes à la dissipation thermique et à laconsommation énergétique:

● Fin de la course à la fréquence d'horloge (énergie augmenteavec MHz³)

● Augmenter le nombre de processeurs sur une puce:architectures multi-coeurs (énergie croît linéairement avec lenombre de transistors)

● Parallélisme au niveau des threads

● Impact sur le logiciel qui doit être ré-écrit pour tirer parti de cesnouvelles architectures

Tendances hardware

● Ralentissement des gains en performance et en énergieconsommée

TOP500: état de l'art des machines parallèles

● Liste des 500 calculateurs les plus puissants dans le mondehttp://www.top500.orgpubliée 2 fois par an (novembre et juin) depuis 1993

● Statistiques sur la performance, la localisation, les applications...

● Objectifs: photographie à un instant donné des possibilités descalculateurs parallèles, favoriser les collaborations au sein de lacommunauté HPC

● Méthode de classement: LINPACK Benchmark (résolution d'unsystème linéaire dense) “tuné” pour la machine testée.Algorithme utilisé: LU avec pivotage partiel flops

● Données fournies par le TOP500: - Rpeak (Gflop/s): performance pic théorique- Rmax (Gflop/s): performance pour système de taille Nmax- Nhalf: taille de problème pour lequel on obtient Rmax/2

● Benckmark récent: HPCG (sparse iterative solver)

≃2 n3/3

Evolution des performances machines

Source: Jack Dongarra, UTK

Résumé

● Liste et tendances sur https://www.top500.org/list/2019/06/

● Janv. 2009: 1,1 Pflop/s – 2,5 MW

● Juin 2019: 149 Pflop/s – 10 MW x135 x4

● Objectif: 1Eflop/s vers 2020-2022 à 20 MW

Principaux enjeux:

● Energie

● Communications (flops importent moins)

● Hétérogénéité (accélérateurs GPUs..)

● Tolérance aux pannes (Sequoia BG/Q: 1,25/noeud/jour)

II - Programmation parallèle des architecturesà mémoire distribuée

● Contexte hardware: multiprocesseur à mémoire distribuée ouréseau de stations de travail (ou les deux, reliés par un réseau)

● Contexte mémoire: espace d'adressage disjoint où chaqueprocesseur a son propre espace et la communication s'effectueà travers des copies explicites (transfert de messages)

● Objectif: répartir/gérer des calculs sur la machine cible

● Outils nécessaires:- sécurité et droits d'accès- création de processus distants- communication entre processus- synchronisation entre processus- cohérence des données et traitements- séquencement des tâches réparties- tolérance aux pannes, points de reprise

Architectures à mémoire distribuée

Architectures à mémoire distribuée

Réseau d'interconnexion

M1

P1

M2

P2

M3

P3

Mn

Pn

Modèle par transfert de messages

● Modèle le plus répandu en calcul réparti: permet de gérer lacommunication et la synchronisation entre processus

● Le parallélisme et la distribution des données sont à la chargedu programmeur: chaque communication ou synchronisationnécessite l'appel à une routine

● Communications: point-à-point, collectives

● Synchronisations: barrières, pas de verrou (car pas devariable partagée à protéger)

● Demandes (exemple: combien de processeurs? qui suis-je?y-a-t-il des messages en attente?)

● Echange de données explicite (pas de variable partagée)

● Prise en charge possible des réseaux hétérogènes avecgestion des pannes

● Différents niveaux (canal, processus, mémoire partagéevirtuelle)

● Comment décrire la donnée à transmettre ?

● Comment identifier les processus ?

● Comment le destinataire va reconnaitre les messages ?

● Quand peut-on dire que l'opération est terminée ?

● Y-a-t-il synchronisation entre l'envoi et la réception ?

● Quand peut-on réutiliser la donnée envoyée ?

● Peut-on bufferiser les communications ?

Modèles par transfert de messages: questions

Bibliothèque pour la programmation d'applicationsparallèles distribuées

MPI : Message Passing Interface – MPI 3.1 (juin 2015)

● http://www.mcs.anl.gov/mpi/

● standard pour le transfert de messages sur les machinesmultiprocesseurs. C'est une norme, pas un logiciel

● différentes implémentations : MPICH, CHIMP, LAM,constructeurs...gratuit ou payant

● Fonctions utilisables depuis C, Fortran, C++

Communications entre processus

● Point-à-point (one-to-one), entre 2 processus

● Collectives, impliquent un groupe de processus

● one-to many (ex. broadcast)

● many-to-one (ex. collect)

● many-to many, entre plusieurs processus

● Envoi/réceptionsource dest.

data

dataTemps

Send(dest,data)

Recv(src,data)

Envoi/réception de messages

Environnement d'exécution des communications:Chaque processus est identifié par un numéro (rang dans ungroupe ou communicateur)

Le message: adresse, type, longueur

L'enveloppe du message permet, en plus de la donnée, dedistinguer les messages et de les recevoir sélectivement:

Source (numéro de l'émetteur), implicite pour un envoi

● Destination (numéro du récepteur), implicite pour uneréception

● Label du message (tag), pour identifier, filtrer...

● Contexte de communication (communicateur)

Types de communications

● Synchrone: le premier arrivé attend l'autre (rendez-vous)

● Asynchrone: l'émetteur et le récepteur ne s'attendent pas

● Un envoi asynchrone peut cependant être bloqué par la nonconsommation du message par le récepteur

● L'émetteur et le récepteur n'ont pas à être tous les deuxsynchrones/asynchrones

● Locale: si la bonne fin de la procédure dépend uniquement deprocessus executé localement

● Non-locale: si l'opération nécessite l'exécution d'une procédurepar un autre processus (peut nécessiter une communicationavec un autre processus)

● Collective: si tous les processus d'un groupe doivent appeler laprocédure

Envoi/réception bloquant/non bloquant

● Envoi/Réception bloquant: la ressource (message,enveloppe) est disponible en retour de la procédure.

● Envoi/Réception non-bloquant: On a un retour de laprocédure sans que l'opération de transfert soit achevée et quel'utilisateur soit autorisé à utiliser la ressource.

L'utilisateur ne peut pas réutiliser l'espace mémoire associé (aurisque de changer ce qui sera envoyé)-Il faut tester ou attendre la libération (si envoi) ou la réceptioneffective de la donnée grâce à un nº de requête Send/Recv( dest/src,data,req )

Test( req ) et Wait( req )

Exemples de communications(Envois asynchrones)

Send(dest,data)

Envoi asynchrone bloquant

Actif

Temps

Recv(src,data)

Send(dest,data,req)

Test(req)

Envoi asynchrone non-bloquant

Actif

Recv(src,data)

Wait(req)

Ressourcedisponible

Calcul...

Ressourcedisponible

Calcul...

Calcul...

Attente

Exemples de communications(Réception non bloquante)

Temps

Réception non-bloquante

Recv(src,data,req)

Test(req)

Wait(req)Calcul...

Ressourcedisponible

Calcul...

Send(dest,data)

Attente

Transfert de l'information

Send(dest,data)

Recv(src,data)

Processus source Processus destination

Buffer envoi

Buffer réception

Réseau

Communications “bufferisées”

● La bufferisation permet de découpler les opérations d'envoi etde réception

● Les buffers sont soit internes à la couche système, soit géréspar l'utilisateur (MPI propose plusieurs modes)

● Coût mémoire et temps lié aux copies multiples

● La bonne fin d'un transfert de message bufferisé dépend de lataille du message et du buffer disponible

● Permet en mode bloquant de libérer l'envoyeur rapidement(à condition que la taille du buffer soit suffisante)

● Attention à gérer les bloquages liés à la saturation des buffers,notamment en cas d'envoi asynchrone non-bloquant

Communications non bufferisées

● Eviter les copies permet d'utiliser moins de mémoire

● ...mais peut nécessiter plus ou moins de temps (car il fautattendre jusqu'à la réception ou accepter de continuer même sile transfert n'est pas terminé)

P r o c e s s 0 P r o c e s s 1

U s e r d a t a

U s e r d a t a

t h e n e t w o r k

Exemples de communications point à point

● Envoi/réception standardMPI_SEND/MPI_RECV: bloquant

MPI_ISEND/MPI_IRECV: non-bloquant

● Envoi synchroneMPI_SSEND: bloquant

MPI_ISSEND: non-bloquant

● Envoi bufferiséMPI_BSEND: bloquant

MPI_IBSEND: non-bloquant

● AutresMPI_SENDRECV: émission et réception bloquantes

MPI_SENDRECV_REPLACE: idem mais avec même buffer

Ordonnancement des communications

● Diffusion entre 2 processus (se fait dans l'ordre)

● Pas d'ordonnancement causal

Proc 1

Proc 2

Proc 1

Proc 2

Proc 3

0 2 / 2 / 2 0 1 0 C S 2 6 7 L e c t u r e 5 7 4

• S e n d a l a r g e m e s s a g e f r o m p r o c e s s 0 t o p r o c e s s 1• I f t h e r e i s i n s u f f i c i e n t s t o r a g e a t t h e d e s t i n a t i o n , t h e s e n d m us t

w a i t f o r t h e u s e r t o p r o v i d e t h e m e m o r y s p a c e ( t h r o u g h ar e c e i v e )

• W h a t h a p p e n s w i t h t h i s c o d e ?

S o u r c e s o f D e a d l o c k s

P r o c e s s 0

S e n d ( 1 )R e c v ( 1 )

P r o c e s s 1

S e n d ( 0 )R e c v ( 0 )

• T h i s i s c a l l e d “ u n s a f e” b e c a u s e i t d e p e n d s o nt h e a v a i l a b i l i t y o f s y s t e m b u f f e r s i n w h i c h t os t o r e t h e d a t a s e n t u n t i l i t c a n b e r e c e i v e d

S l i d e s o u r c e : B i l l G r o p p , A N L

0 2 / 2 / 2 0 1 0 C S 2 6 7 L e c t u r e 5 7 5

S o m e S o l u t i o n s t o t h e “ u n s a f e” P r o b l e m

• O r d e r t h e o p e r a t i o n s m o r e c a r e f u l l y :

• S u p p l y r e c e i v e b u f f e r a t s a m e t i m e a s s e n d :

P r o c e s s 0

S e n d ( 1 )R e c v ( 1 )

P r o c e s s 1

R e c v ( 0 )S e n d ( 0 )

P r o c e s s 0

S e n d r e c v ( 1 )

P r o c e s s 1

S e n d r e c v ( 0 )

S l i d e s o u r c e : B i l l G r o p p , A N L

0 2 / 2 / 2 0 1 0 C S 2 6 7 L e c t u r e 5 7 6

M o r e S o l u t i o n s t o t h e “ u n s a f e” P r o b l e m

• S u p p l y o w n s p a c e a s b u f f e r f o r s e n d

• U s e n o n- b l o c k i n g o p e r a t i o n s :

P r o c e s s 0

B s e n d ( 1 )R e c v ( 1 )

P r o c e s s 1

B s e n d ( 0 )R e c v ( 0 )

P r o c e s s 0

I s e n d ( 1 )I r e c v ( 1 )W a i t a l l

P r o c e s s 1

I s e n d ( 0 )I r e c v ( 0 )W a i t a l l

Communications non symétriques

● PUT: écriture directe dans la mémoire d'un autre processeur

● GET: lecture directe dans la mémoire d'un autre processeur

● Seulement dans MPI-2

Mémoire locale

Proc1

PUT(data)

Proc2

Mémoire locale

Proc1

GET(data)

Proc2

Proc2 ne fait pas de réception Proc1 ne fait pas d'envoi

Communications collectives

● A l'intérieur d'un groupe ou d'un communicateur

● 3 types d'opérations: synchronisation, mouvements dedonnées, calcul collectif

● Barrière (Barrier): synchronisation entre les processus

● Diffusion (Broadcast) d'un processus à tous les membres

● Réduction (Reduce) par un processus après collecte de valeursdétenues par tous les processus

● Rassemblement (Gather) sur un processus par mise bout àbout de messages provenant de tous les processus

● Distribution (Scatter) sur tous les processus par ventilation d'unmessage provenant d'un processus (inverse du “Gather”)

● Rassemblement généralisé (AllGather): variation du “Gather”où le résultat est envoyé à tous les processus

Communications collectives

A

B

D

C

A

B

D

C

B C D

A

A

A

A

A

A

A

A

B r o a d c a s t

S c a t t e r

G a t h e r

A

A

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

A

A

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

Source: Jim Demmel, UC Berkeley

Communications collectives

AA

BB

DD

CC

A 0 B 0 C 0 D 0

A 1 B 1 C 1 D 1

A 3 B 3 C 3 D 3

A 2 B 2 C 2 D 2

A 0 A 1 A 2 A 3

B 0 B 1 B 2 B 3

D 0 D 1 D 2 D 3

C 0 C 1 C 2 C 3

A B C D

A B C D

A B C D

A B C D

A l l g a t h e r

A l l t o a l lA l l t o a l l

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

Source: Jim Demmel, UC Berkeley

Communications/calculs collectifs

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

A

B

D

C

A

B

D

C

A B C D

AA B

A B C

A B C D

R e d u c e

S c a n

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

A

B

D

C

A

B

D

C

A

B

D

C

A B C DA B C D

AA B

A B CA B C

A B C DA B C D

R e d u c eR e d u c e

S c a n

Source: Jim Demmel, UC Berkeley

Communications collectives (suite)

● Les appels collectifs sont bloquants

● Une opération Reduce permet d'exécuter une opération sur desdonnées distribuées sur tous les membres d'un groupe(somme, max, “et” logique...)

● Le résultat d'une réduction peut être disponible sur tous lesprocessus en utilisant AllReduce

● Exemple 1: Reduce(sum,valeur_sum,valeur_loc,groupe,dest)

valeur_sum n'est disponible que sur le processus dest

● Exemple 2: AllReduce(max,valeur_max,valeur_loc,groupe)

valeur_max est disponible sur tous les processus du groupe

Exemple: produit matrice-vecteur

● 3 processus: p0, p1, p2

● Opération: y = A x

● Algorithme:

● p0 distribue A par colonne aux autres processus

● p0 distribue un sous-ensemble de x aux autres processus

● Tous les processus effectuent un produit matrice-vecteurlocal

● Réduction globale pour assembler la solution

= x

A(1,j1) A(1,j2)

x(j1)

x(j2)

Exemple: produit matrice-vecteur

p0 p1 p2

Send(A(1,j1),p1)

Send(A(1,j2),p2)

Send(x(j1),p1)

Send(x(j2),p2)

Dgemv(A(1,1),x,y)

Reduce(y,sum,p0)

Dgemv(A,x,y) Dgemv(A,x,y)

Reduce(y,sum,p0) Reduce(y,sum,p0)

Recv(A(1,1),p0)

Recv(A(1,1),p0)

Recv(x,p0)

Recv(x,p0)

temps

Exemples de facteurs influant sur la performance

● Distribution des données, taille de bloc dans les algorithmes

● Recouvrement des communications par des calculs

● Equilibrage de charge (load-balancing)

● Bande passante du réseau

● Nombre de fois où un message est copié ou lu (ex. checksum)

● Taille du message (ex: puissances de 2 ou longueurs de lignede cache peuvent donner de meilleures performances que destailles plus petites

● Taille des buffers (alignement sur un mot, ligne de cache, page)

● Accès aux ressources partagées

● Protocole différent pour messages courts et longs

● Ecriture du code parallèle (ex: receive exécuté avant le send)

III – Présentation de MPI

Introduction

● Définition d'un standard de transfert de messages à destinationdes développeurs

● Objectifs: portabilité, simplicité, développement du calculdistribué, implantation par les constructeurs

● Cible: machines multiprocesseurs, clusters, réseaux

● Standard officiel: http://www.mpi-forum.org(dernière version: MPI 3.2, 06/2015)

● MPI-2: création et gestion de processus, “one-sided”communications, opérations collectives étendues, interfacesexternes, I/O, langages additionnels (C++)

● Autres infos (présentations, didacticiels, FAQ...): http://www.mcs.anl.gov/mpi

Caractéristiques de MPI

● Parallélisme de tâches et communications par passage demessages

● Code source unique, exécuté par un ensemble de processus(SPMD, Single Program Multiple Data)

● Communicateurs: encapsulent les espaces de communications

● Types de données: élementaires, vecteurs, personnalisés

● Différents modes de communication: asynchrone bloquant, nonbloquant, synchrone, bufferisé

● Opérations collectives: barrière, broadcast, scatter/gather,réduction (max, somme, produit...)

● Topologies virtuelles de processus: identification des voisins

Structure d'un programme MPI

#include "mpi.h"

...

main (int argc, char *argv [])

{

...

MPI_Init (&argc, &argv) ;

...

MPI_Finalize () ;

...

}

Exemple 1: qui suis-je, combien sommes-nous?

● MPI_Comm_size: donne le nombre de processeurs

● MPI_Comm_rank: donne le numéro (rang) de processeuridentifiant le processus appelant dans le groupe (compris entre0 et size-1)

● Groupe: ensemble de processus pouvant communiquer

● Contexte: environnement dans lequel un message est envoyépuis reçu

● Communicateur = Groupe + Contexte

● Communicateur prédéfini: MPI_COMM_WORLD (tous lesprocessus disponibles pour le job MPI)Défini dans bibliothèque mpi.h (en C) ou mpif.h (en Fortran)

Exemple 1: code C

# i n c l u d e "m p i . h"# i n c l u d e <s t d i o . h>

i n t m a i n ( i n t a r g c, c h a r *a r g v[ ] ){

i n t r a n k , s i z e ;M P I _ I n i t( &a r g c, &a r g v ) ;M P I _ C o m m _ r a n k( M P I _ C O M M _ W O R L D , & r a n k ) ;M P I _ C o m m _ s i z e( M P I _ C O M M _ W O R L D , & s i z e ) ;p r i n t f( " I a m % d o f %d \ n " , r a n k , s i z e ) ;M P I _ F i n a l i z e( ) ;r e t u r n 0 ;

}

Exemple 1: code Fortran

p r o g r a m m a i n

i n c l u d e 'm p i f . h'

i n t e g e r i e r r, r a n k , s i z e

c a l l M P I _ I N I T ( i e r r )

c a l l M P I _ C O M M _ R A N K ( M P I _ C O M M _ W O R L D , r a n k , i e r r )

c a l l M P I _ C O M M _ S I Z E ( M P I _ C O M M _ W O R L D , s i z e , i e r r )

p r i n t * , ' I a m ' , r a n k , ' o f ' , s i z e

c a l l M P I _ F I N A L I Z E ( i e r r )

e n d

Exécution d'un code MPI

● Chaque instruction est exécutée indépendamment par chaqueprocesseur (y compris les impressions)

● Exécution: mpirun –np nbprocs code (pas dans MPI-1)

● Exemple 1: mpirun –np 4 ex1

● Résultat: “I am 0 of 4”“I am 1 of 4”…mais pas forcément dans l'ordre des processeurs

● MPI-2: mpiexec <args>

(juste une recommandation)

Description d'un message MPI

● Donnée:

● Adresse

● Nombre de valeurs

● Type de données (exemple sur slide suivant)

● Enveloppe:

● Rang du destinataire (si émission)

● Rang de l'émetteur (si réception)

● Tag (int): distingue les messages d'un couple émetteur/dest.

● Communicateur

Types de données (MPI_Datatype)

● Correspondances avec les types du C:

● MPI_CHAR: signed char

● MPI_INT: signed int

● MPI_SHORT: signed short int

● MPI_LONG: signed long int

● MPI_FLOAT: float

● MPI_DOUBLE: double

● MPI_LONG_DOUBLE: long double

● MPI_PACKED: <<struct>>

● Types particuliers:

● MPI_BYTE: pas de conversion

● MPI_PACKED: types construits

Emission simple (bloquante)

● MPI_Send(start, count, datatype, dest, tag,comm)

● Buffer d'envoi spécifié par (start, count, datatype)

● Destinataire identifié par son rang dest dans le

communicateur comm )

● En retour de fonction, la donnée à été envoyée au systèmeet le buffer d'envoi peut être ré-utilisé

● Le message peut ne pas avoir été reçu par le destinataire

MPI_Send(A,10,MPI_DOUBLE,1...) MPI_Recv(B,20,MPI_DOUBLE,0...)

A(10)

B(20)

Proc 0 Proc 1

Réception simple (bloquante)

● MPI_Recv(start, count, datatype, source, tag,commm, status)

● Attend jusqu'à ce que le message soit reçu et que le bufferde réception soit libéré

● Expéditeur identifié par son rang source dans le

communicateur comm ou par MPI_ANY_SOURCE)

● Possible de recevoir moins de count occurences de type

datatype (mais en recevoir plus génère une erreur)

MPI_Send(A,10,MPI_DOUBLE,1...) MPI_Recv(B,20,MPI_DOUBLE,0...)

A(10)

B(20)

Proc 0 Proc 1

Exemple 2: envoi/réception (C)

# i n c l u d e “ m p i . h”# i n c l u d e < s t d i o . h >i n t m a i n ( i n t a r g c , c h a r * a r g v [ ] ){

i n t r a n k , b u f ;M P I _ S t a t u s s t a t u s ;M P I _ I n i t ( & a r g v , & a r g c ) ;M P I _ C o m m _ r a n k ( M P I _ C O M M _ W O R L D , & r a n k ) ;

/ * P r o c e s s 0 s e n d s a n d P r o c e s s 1 r e c e i v e s * /i f ( r a n k = = 0 ) {

b u f = 1 2 3 4 5 6 ;M P I _ S e n d ( & b u f , 1 , M P I _ I N T , 1 , 0 , M P I _ C O M M _ W O R L D ) ;

}e l s e i f ( r a n k = = 1 ) {

M P I _ R e c v ( & b u f , 1 , M P I _ I N T , 0 , 0 , M P I _ C O M M _ W O R L D ,& s t a t u s ) ;

p r i n t f ( “ R e c e i v e d % d\ n ” , b u f ) ;}

M P I _ F i n a l i z e ( ) ;r e t u r n 0 ;

}

Exemple 2: envoi/réception (Fortran)

p r o g r a m m a i n

i n c l u d e ‘ m p i f . h’

i n t e g e r r a n k , b u f , i e r r , s t a t u s ( M P I _ S T A T U S _ S I Z E )

c a l l M P I _ I n i t ( i e r r )c a l l M P I _ C o m m _ r a n k ( M P I _ C O M M _ W O R L D , r a n k , i e r r )

C P r o c e s s 0 s e n d s a n d P r o c e s s 1 r e c e i v e si f ( r a n k . e q . 0 ) t h e n

b u f = 1 2 3 4 5 6c a l l M P I _ S e n d ( b u f , 1 , M P I _ I N T E G E R , 1 , 0 ,

* MPI_COMM_WORLD, ierr )

e l s e i f ( r a n k . e q . 1 ) t h e nc a l l M P I _ R e c v ( b u f , 1 , M P I _ I N T E G E R , 0 , 0 ,

* MPI_COMM_WORLD, status, ierr )

p r i n t * , “ R e c e i v e d “ , b u fe n d i f

c a l l M P I _ F i n a l i z e ( i e r r )

e n d

Communications non-bloquantes

Les opérations non bloquantes renvoient immédiatement unparamètre de requête pour tester ou attendre la disponibilité dela ressource

MPI_Request request;MPI_Status status;MPI_Isend(start, count, datatype, dest, tag,comm, &request);MPI_Irecv(start, count, datatype, src, tag,comm, &request);....MPI_Wait(&request, &status);

ouMPI_Test(&request, &flag, &status);

Communications collectives dans MPI

● Fonctions SPMD

● 3 types d'opérations: mouvements de données, calculscollectifs, synchronisation

● Les opérations collectives doivent être appelées par tous lesprocessus d'un communicateur

● Pas d'appels collectifs non bloquants

● MPI-2: appels collectifs inter-communicateurs

● Dans de nombreux cas, possibilité de remplacer de multiplesSend/Recv par un seul Bcast/Reduce

Opérations collectives

● Synchronisation des processus en un point de rendez-vous(pas d'échange d'information)

MPI_Barrier (comm)

● Diffusion: un même processus envoie une même valeur à tousles autres processus d’un communicateur

MPI_Bcast (message, count, datatype, root,comm)

A A

A

A

A

Broadcast

P0

P1

P2

P3

Opérations collectives

● Scatter: distribution d'un message personnalisé aux autresprocessus (one to all)

MPI_Scatter (send_buf, send_count, send_type,recv_buf, recv_count, recv_type, root, comm)

● Gather: mise à bout des messages de chacun des processus(all to one)

MPI_Gather (send_buf, send_count, send_type,recv_buf, recv_count, recv_type, root, comm)

A B C D A

B

C

D

ScatterP0

P1

P2

P3

Gather

Autres opérations collectives

A0 A1 A2 A3

B0 B1 B2 B3

C0 C1 C2 C3

D0 D1 D2 D3

A0 B0 C0 D0

A1 B1 C1 D1

A2 B2 C2 D2

A3 B3 C3 D3

MPI_Alltoall

P0

P1

P2

P3

A

B

C

D

A B C D

A B C D

A B C D

A B C D

MPI_Allgather

P0

P1

P2

P3

Calcul collectif

● Reduce: collecte par un processus d'un ensemble de valeursdétenues par tous les processus et réduction de cette valeur

MPI_Reduce (operand, result, count, datatype,op, root, comm)

● Le résultat se trouve sur le processus root. Pour avoir le

résultat sur chaque processus, utiliser MPI_Allreduce

● Opérations prédéfinies (MPI_MAX, MPI_SUM...), possibilité dedéfinir de nouvelles opérations

A

B

C

D

op (A,B,C,D)

Reduce

P0

P1

P2

P3

Les quelques routines utilisées en pratique

● Communications point à pointMPI_SEND/MPI_RECVMPI_ISEND/MPI_IRECVMPI_WAIT

● Initialisation/terminaisonMPI_INITMPI_FINALIZE

● Informations sur processusMPI_COMM_RANK MPI_COMM_SIZE

● Communications collectivesMPI_BCAST MPI_ALLREDUCEMPI_ALLGATHER

Exercice: calcul de π par intégration

● On calcule π par évaluation de l'intégrale

● L'évaluation se fait par la méthode des trapèzes en divisant

l'intervalle en intervalles

avec et

On a alors:

● Ecrire l'algorithme correspondant en répartissant le calcul sur pprocesseurs

∫0

1

f xdx≃∑i=0

n−1

hf xi f xi1

2

=∫0

14

1x2dx=∫

0

1

f xdx

x0=0, , xi=ih , , xn=1 h=1

n

[ x0, x1] , , [ xn−1 , xn]n[0,1]

Recommended