calcul haute-performancekayaogz.github.io/teaching/calcul-haute... · objectif: répartir/gérer...
TRANSCRIPT
Calcul Haute-PerformanceHigh-Performance Computing (HPC)
Université Paris-Sud
Marc Baboulin ([email protected])
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]