Introduction au Parallélisme et Architectures Parallèles
Introduction au Parallélisme et Architectures Parallèles
Cécile Germain-Renaud
[email protected]
Organisation
1. Introduction
1
Applications
• Réalisation séquentielle
double X[k+1], Y[k+1];
for (i = 1; i <= k ; i++)
for (j = 1; j <= k ; j++)
Y[i,j] = X[i,j];
for (i = 1; i <= k ; i++) k+1
. /, * 0
6
2
Faisabilité et objectifs
2. Architectures parallèles
Lectures – cours 1, 2, 3
• Recommandé
– A.J. van der Steen et J.Dongarra. Overview of Recent
Supercomputers http://www.top500.org/ORSC/2004/
• Références
– D. E. Culler et J.P. Singh Parallel Computer Architecture: A
Hardware/Software Approach. Morgan Kaufmann 1998 (1100
pages !)
3
Plan
10
Processeur séquentiel
Processeur
• Partie opérative
• Partie contrôle Automates
• Hiérarchie mémoire
• Bus (au pluriel) CP
RI
Bus
Mémoire Centrale
Caches
Disques
Mémoire Principale
11
CP
RI
Bus Partie Contrôle
Mémoire
12
4
Classification de Flynn
Instructions
SISD MISD
Données
SIMD MIMD
13
Classification de Flynn
14
SIMD
Actions
15
5
SIMD
Actions
16
SIMD
Actions
Réseau d’interconnexion
• Réseau
– SIMD : communications structurées identiques – modèle de
programmation systolique
– Communications quelconques
17
Réseau d’interconnexion
18
6
SIMD : Problème des conditionnelles
Actions
if (X(i) == 0)
Y(i) = 0
else
Y(i) = 1/X(i)
19
if (X(i) == 0)
Y(i) = 0
else
Y(i) = 1/X(i)
20
SIMD
21
7
MIMD non vectoriel
22
Plan
23
Processeur séquentiel
Processeur
• Hiérarchie mémoire
STORE LOAD
Bus
Mémoire Centrale
Caches
Disques
Mémoire Principale
24
8
Organisation mémoire
25
Organisation mémoire
+
Mémoire centralisée Espace d’adressage unique Accès mémoire uniforme
Mémoire @Max
Mémoire Mémoire
12
Réseau 9 3
@0
6 12
9 3
PE PE PE
Complexité
PE PE PE PE PE
Opposé
Mémoire
9 3
PE PE
PE PE PE 6
-
26
Terminologie
27
9
Architectures hybrides
Réseau de messagerie
28
• Architectures courantes
– Serveur bas de gamme ou poste de travail haut de gamme
Quelques (2-4) processeurs dans un seul PC
– Serveurs multiprocesseurs (SMP – Symmetric Multi-Processor )
Nombre moyen (4-64) de processeurs en un système - HP
SuperDome, Sun SunFire, IBM Regatta
• Clusters of Workstations (COW - NOW)
Ensemble de machines mono/bi/quadri processeur ou de petits
SMP - HP AlphaServer, Beowulf Linux PCs
• Supercalculateurs
– Massively Parallel Processors (MPP) : Multiprocesseurs mémoire
distribuée – nœuds SMP
– Constellations – systèmes parallèles à nœuds vectoriels
29
3. Performance
10
Plan
• Objectifs
• Débit
• Accélération
• D’autres critères d’extensibilité
31
Objectif (1)
• Paramètres de l’architecture
– Nombre de processeurs
– Caractéristiques processeurs : vitesse, caches, architecture
interne
– Performances réseau d’interconnexion
– Paramètres de configuration I/O OS
32
Objectif (2)
33
11
Définitions
• Un algorithme A
• Souvent paramétrisé : n
– Exemple : produit de matrices
• W(n) = Travail à effectuer
– Exemple : opérations flottantes
• T(p, n) = Temps d’exécution de A sur p processeurs
• Ts(n) = Temps d’exécution sur 1 processeur
– De A
– Du meilleur algorithme équivalent à A
• Exemple relaxation vs méthodes directes
34
Plan
• Objectifs
• Débit
• Accélération
• D’autres critères d’extensibilité
35
Rinf et n1/2
A est fixé
• Débit de travail, typiquement en FLOPS/s
R(p,n) = W(n)/T(p,n)
• Débit asymptotique
Rinf(p) = limite de R(p,n) quand n tend vers l’infini
• Demi-performance n1/2
R(p, n1/2 ) = Rinf(p)/2
• Paradigme : pipeline vectoriel
– Temps d’exécution affine
T(p,n) = s + cn
– Travail linéaire
W(n) = an
36
12
Linpack et le Top 500
• Résultats depuis 1993 sur les 500 machines parallèles les plus
puissantes
• Résolution d’un système linéaire
• Benchmark assez facile
• Volontariat
• Autres graphes
37
! " " #$% & ' ( )* ' )( + , " -( . /01 23# 4 5
! "! #$% & + 6 , 786 * 9 : 5 ;" -2<1 9 =4 >
! !5 #$% & + 6 , 786 * 9 : 5 ;" -2<1 9 ;
! !9 ?A@ BA( . C6 ' . ' 6 DE = 9 $+ F ' . =4 ;
! !G 23- @ DF ' H 7I. EE : 5 9; -2<1 = >5
! !; J % & ' ( )* ' )( + , : ! 5; #K. ( . LD E ;G A Z [K\^]_[K]`^ab]c
! != 23- MA-$ 9" ?NPO Q! K [ degfKhKi^j k \^`^a
! !> #$% - RK$ >5 ?NPO
j iYlKm3nabfK]c
! !Q ?A@ BA( . C6 ' . ' 6 DE ; : 5 !> S<& - JUT+ V Q5
! !" 23$W23. LE+ ' 6 , 7 : = G> OG%1 955 : 5 95
! !! #$% - RK$ = : " G9 S<& - JU@F )+ #K. * > 9Q
95 55 ?A@ BA( . C6 ' . ' 6 DE !> BTS#%1 > : G ;!
95 5 ?A@ BA( . C6 ' . ' 6 DE : 5 9; BTS#%1 > : = =5
95 59 #$% - F 6 78. ' + = : 95 %. ( ' XY& 6 7 9 > : = 55
D’après www.siam.org/sciencepolicy/keyes.ppt
38
D’après www.siam.org/sciencepolicy/keyes.ppt
39
13
Plan
• Objectifs
• Débit
• Accélération
• D’autres critères d’extensibilité
40
Accélération
• S(p,n) = Ts(n)/T(p,n)
• Bon comportement : croissante en p pour n fixé
• Application parfaitement parallélisable : S(p,n) = p
– Somme de vecteurs
– Parallélisme plaisant (ou trivial)
• Accélération linéaire : S(p,n) = kp ; k <1
• Limitations
– Taille du problème
– Processeurs oisifs – problème d’équilibrage de charge
– Surcoûts en particulier communications
41
Réduction
42
14
Loi d’Amdhal
• L’application comporte
– une fraction séquentielle f : contrôle, calculs scalaires
répliqués,…
– Une fraction parfaitement parallélisable 1-f
• T(p,n) = f + (1-f)/p
• S(p,n) = p/(pf + 1-f) < 1/f
– Inutile d’ajouter des processeurs au delà d’une certaine limite qui
dépend de l’application
• S’applique au déséquilibre de charge en général
• Quelle est l’hypothèse implicite ?
43
Surcoûts
44
Quand p augmente
45
15
Optimiser pour d’autres critères
46
La loi de Gustafson
47
Amdhal et Gustafson
48
16
Plan
• Objectifs
• Débit
• Accélération
• D’autres critères d’extensibilité
49
Critères économiques
• Par processeur
• Vitesse V(p,n) = R(p,n)/p
• Efficacité E(p,n) = S(p,n)/p < 1
• Iso-efficacité : Taille nécessaire pour atteindre une
efficacité donnée
– Peut on atteindre une certaine efficacité sur un système donné ?
– De combien faut-il augmenter la taille du problème ?
– Existe-t-il une taille maximale du système telle qu’on ne puisse
plus atteindre l’efficacité requise ?
– Comparaison des applications : la meilleur isoefficaité est la plus
petite
50
4. Introduction à la programmation
parallèle
17
Plan
• Ordonnancement et placement
52
Algorithme Relaxation
Programmation
53
Algorithme Relaxation
Programmation
54
18
Modèles
• D’exécution
– Expriment – ou sont une abstraction de – l’architecture matérielle
• mémoire partagée /mémoire distribuée
• SIMD/MIMD
• De programmation
– Expriment – ou sont une abstraction de – sources du
parallélisme : données/contrôle
55
pardo i = 1, n forall i = 1, n
a(i) = b(i) +c(i) a(i) = b(i) +c(i)
x(i) = y(i) + z(i) forall i = 1, n
end do x(i) = y(i) + z(i)
56
Modèles d’exécution
57
19
Ordonnancement
59
Placement
60
20
Modèles de programmation et modèles d’exécution
Algorithme Relaxation
Programmation
OpenMP, HPF, pC++…
Compilateurs LHN Description fonctionnelle
parallèles du placement/ordonnancement
Environnement MPI, PVM, threads
Compilateurs Code de
d’exécution //
+ exécutifs placement/ordonnancement
Programmes séquentiels
61
Plan
• Ordonnancement et placement
62
Placement statique
63
21
double A[N], B[N];
for (I=0; I<N-1; I++)
Décalage, distribution bloc A[I] = B[I+1];
À la HPF
double A(N), B(N) #define M=N/P
!HPF$ distribute (block) :: A, B double A[N], B[N];
forall I=1,N-1 À la #pragma omp for schedule(static, M)
A(I) = B(I+1) OpenMP for (I=0; I<N-1; I++)
A[I] = B[I+1];
À la #define M=N/P
À la MPI pthreads double A[N], B[N];
#define M=N/P pthread_t thread[P];
double a[M], B[M]; for (i=0; i < P; i++)
<group definition> pthread_create (&thread[i], myfunc, i);
if (me != 0) for (i=0; i < P; i++)
<send b[0] to me-1> pthread_join (thread[i]);
for (i=0; i<M-1; i++)
a[i] = b[i+1]; void myfunc (int k)
if (me != P-1) ideb = M*k;
<rcv(& a[M-1] from me+1> ifin = (k <P-1 ? M*(k+1) : M*(k+1) –1);
for (i=ideb; i < ifin -1; i++)
A[i] = B[i+1]; 64
Bisection récursive
65
Bisection récursive
66
22
Bisection récursive
67
Placement/ordonnancement dynamique
• Motivation:
– La durée des calculs n’est pas prévisible
– La puissance des machines n’est pas connue
• Placement/ordonnancement on-line : décidé à
l’exécution
• Questions
– Surcoûts : gestion des processus ou des threads, des échanges
d’information
– Robustesse à l’irrégularité des temps d’exécution
68
Placement/ordonnancement dynamique
• Centralisé: Maître-Esclave
Maître
– Implémente un algorithme de partitionnement, par M
exemple bloc, avec possibilité de taille variable du
bloc
• Taille fixe : équivalent à statique
• Guided self-scheduling: chaque esclave prend 1/P de S S S
ce qui reste
• Factoring: chaque esclave prend 1/P de la moitié du
batch restant
– Effectue les opérations globales par exemple
réduction
P Esclaves
– Exécutent un bloc, et redemandent du travail dès
que terminé
69
23
Placement/ordonnancement dynamique
• Réparti
– Vol de travail
• Un processus pousse sur la pile des
travaux en attente les tâches les plus
longues
• Les processus ou threads inactifs
sélectionnent un autre processus
auquel ils prennent du travail au fond
de la pile
• Peut être prouvé optimal pour une
large classe d’applications
• Implémentation délicate : gestion de
verrous en espace d’adressage
unique, protocole en espaces
d’adressages multiples
http://supertech.lcs.mit.edu/cilk/
70
4. Architectures de communication
Lectures
• Recommandé
– A.J. van der Steen et J.Dongarra. Overview of Recent
Supercomputers section networks
http://www.top500.org/ORSC/2004/networks.html#networks
– D.E Culler et al. LogP: Towards a Realistic Model of Parallel
Computation
• Références
– Tom Leighton Introduction to Parallel Algorithms and
Architectures Morgan Kaufmann, 1992. (> 800 pages)
72
24
Introduction
Réseau d’interconnexion
Matériel
Ethernet
73
Fonctionnalités
74
Plan
• Topologie
75
25
Réseaux élémentaires
76
Crossbar
• Relativement extensible N0
– P2 points de croisement N1
– 2P liens
N2
– 1 port/nœud
– Typiquement –Fin 2004 – N3
16 ports
N0 N1 N2 N3
77
Réseaux incomplets
78
26
Réseaux directs : grilles et tores
• Grille • Tore
– Extensible – Extensible
– Non isotrope – Isotrope
79
• Hypercube
– Extensible – par doublement
– Isotrope
80
81
27
Réseaux indirects
82
Reséaux indirects : le réseau de Clos C
• Connexion shuffle
– La sortie i du
switch d’entrée j
est connectée à
l’entrée i du
switch j
• Le réseau de Clos C est réarrangeable
Plan
• Topologie
• Routage
84
28
Routage
85
Plan
• Topologie
• Routage
• Performances
86
Caractéristiques de la performance
87
29
Composantes de la performance
88
89
Ping-Pong
Px Py
Os L Or Py Px
Os L Or
RTT = Os + Or + L
90
30
Le modèle LogP (2)
• g = Gap
Réseau
– Délai séparant deux communications
L
sur un processeur
– Etage le plus long du pipeline de
communication
g NI NI g
– Composantes
• Statique : ensemble du système
• Dynamique : congestion
Os Or
– 1/g = débit effectif disponible par
processeur
Procx Procy
91
Réseau saturé
Px Py
Os attente Or Py Px
Os attente Or
RTT = Os + Or + L
92
Détermination expérimentale
Temps moyen
• Os est mesuré pour M petit, par message
sans réception, et C = 0 g
• g est mesuré en faisant varier
C pour situer les courbes qui
convergent vers une asymptote Os+Or
commune
Os
M
93
31
Plan
• Topologie
• Routage
• Performances
• Optimisations logicielles
94
Méthodes d’optimisation
95
5. Analyse de dépendances -
Introduction à la parallélisation
automatique
32
Lectures
• La référence
– Randy Allen and Ken Kennedy. Optimizing compilers for modern
architectures. Morgan Kaufmann. 2002.
– Plus particulièrement chapitres 2, 5, 6.
97
Avertissements
98
Plan
• Introduction
99
33
Introduction
• Méthodes systématiques et
Programme
automatisables séquentiel
– Analyse d’un programme séquentiel,
fonctionnel, parallèle
– Pour la définition d’un ordonnancement Analyse de dépendances
compatible avec la sémantique du
Transformations
de programme
programme
Dépendances
– Exprimable dans une syntaxe parallèle
• Aide à la parallélisation manuelle. Parallélisation
• Les paralléliseurs automatiques et Vectorisation
leurs limites.
Programme
parallèle
100
• Programme séquentiel
– Boucles et séquences : pas de conditionnelles, ni de procédures
– Instruction : occurrence textuelle
– Opération : occurrence dynamique. Exemple A(1, 3, 2)=….
Nid de boucles parfaitement imbriqué
Instruction (statique)
Nid de boucles imparfaitement imbriqué
101
Introduction
• Contexte do i=1,N
– Nids de boucles do j =1, N
A(i,j) = B(i,j) +1
end do
• Grain très fin end do
– Vectorisation
– SIMD do i=1,N
– Machines parallèles si A(i,1:N) = B(i,1:N) +1
grands vecteurs end do
doall i=1,N
• Grain moyen do j =1, N
– Transcription directe en A(i,j) = B(i,j) +1
espace d’adressage end do
unique
end do
102
34
Plan
• Introduction
• Dépendances
103
Dépendances
Typologie
s -> t
• Dépendance de flot - RAW - dépendance vraie
s écrit, t lit
• Anti-dépendance - WAR
s lit, t écrit
• Dépendance de sortie - WAW
s et t écrivent
105
35
Parallélisation par tri topologique
• TD 5.1
• Pas directement utilisable pour les boucles
106
• Repère d’instruction
– décrit une opération dans un nid de boucles
– (nom_inst, i1, i2, …, in) où i1, i2, …, in sont les indices des
boucles qui englobent l’instruction
• Prédicat de séquencement
s, t deux instructions englobées dans n boucles
L’ ordre d’exécution des opérations est :
(s, i1, i2, …, in) << (t, i’1, i’2, …, i’n) ssi
(i1, i2, …, in) < (i’1, i’2, …, i’n) dans l’ordre lexicographique
OU
{(i1, i2, …, in) = (i’1, i’2, …, i’n) ET s avant t dans l’ordre
syntaxique de P}
• Exemples : TD 5.2.1
107
• Niveau de la dépendance
La dépendance
(s, i1, i2, …, in) -> (t, i’1, i’2, …, i’n)
est de niveau k si k est le premier indice tel que ik < i’k
• Dépendance inter-itération - loop carried dependency
Est de niveau ∝ si (i1, i2, …, in) = (i’1, i’2, …, i’n)
• Dépendance intra-itération - loop-independent dependency
• Graphe de dépendance réduit (GDR)
– Multi-graphe
– Nœuds = instructions (statiques)
– Arcs = dépendances étiquetées par leur niveau
• Exemples : TD 5.2.2
108
36
Plan
• Introduction
• Dépendances
• Parallélisation et transformations
109
Equivalence
110
Syntaxe parallèle
111
37
Instructions vectorielles
112
113
Parallélisation de boucles
• Preuve :
– Les ensembles Read et Write des opérations ne sont pas
modifiés
– Le prédicat de séquencement n’est modifié qu’au niveau k
– Donc le GDD n’est pas modifié (voir TD 5 -appendice)
114
38
Tranformations de boucles
115
Distribution de boucles
116
Distribution de boucles
do i = 1, N
s
s end do
do i = 1, N
do i = 1, N 1 ou ∝
t
s t end do
t
end do B
A
do i = 1, N
s t
end do
1 do i = 1, N
t s
end do
C
117
39
Distribution de boucles
L’algorithme de Kennedy-Allen
Préliminaires
• G un graphe. Une composante fortement connexe de G
est un ensemble de sommets tel qu’il existe un chemin
entre deux quelconques de ces sommets.
• Il existe des algorithmes pour trouver les composantes
fortement connexes maximales (CFCM) {π1, π2, …, πm} -
Tarjan
• Les arcs de G induisent naturellement un graphe sur
{π1, π2, …, πm} noté Gπ
119
L’algorithme de Kennedy-Allen
40
L’algorithme de Kennedy-Allen
121
Autres transformations
123
41
6. Parallélisme de données
Lectures
125
Plan
126
42
Principes
127
Collections : typologie
128
Collections : typologie
– Listes de listes
– Tableau irrégulier (ragged array)
129
43
Opérateurs parallèles
130
Opérateurs parallèles
• Réduction
• Préfixe parallèle
131
Préfixe parallèle
0 0+1 0+1+2
0+1+2+3
0+1+2+3+4
0+1+2+3+4+5
0+1+2+3+4+5+6
0+1+2+3+4+5+6+7
132
44
Opérateurs spécifiques
133
Opérateurs spécifiques
• Tableaux : sélection
T(a:b:c) est le tableau des
T(a + kc) pour 0 <= k <= (b-a)/c
134
Plan
135
45
Histoire
• Fortran 77 : séquentiel
• Fortran 90 : Vectoriel + encapsulation, polymorphisme
• Proposition de spécification réalisée par le HPF forum
– HPF 1 : 94
– HPF 2 : 97
136
L’instruction FORALL
• Syntaxe
FORALL (index-spec-list [, mask-expr]) forall-assignment
– index-spec-list : a1:b1:c1,a2:b2:c2, …, an:bn:cn
– forall-assignment : affectation
• Sémantique : itérateur sur un sous-ensemble d’un pavé
de Zn
– Evaluer l’ensemble des indices valides : ceux sur lesquels le
masque est vrai
– Pour tous les indices valides, évaluer le membre droit
– Pour tous les indices valides, réaliser l’affectation
137
L’instruction FORALL
138
46
Exemples
Affectation Multidiffusion
Permutation Sélection
139
Collisions
140
Jacobi
SEQ(PAR) :
"! #$&% ' () *,+ ! -.$./0
1/324##% .5 768 9 : 35 ;8 0
% 9 : 0 % % 8 9 : 0 % .9 : 0 % 9 : 8 0 < % 9 : 0 ) 6= ) 6= > % 9 : 0 0?@
$ + A1/324##
CB 2D.E.24#%24F<G% 48 00
,
$ +
141
47
Fonctions
142
La construction FORALL
• Syntaxe
FORALL (index-spec-list [, mask-expr])
forall-body-list
END FORALL
– forall-body : forall-assignment ou FORALL ou WHERE
• Sémantique
– Imbrication de forall : espace d’itération non rectangulair
– Exécution dans l’ordre syntaxique des instructions du forall-body
143
La construction FORALL
• Imbrication • Séquence
144
48
Placement des données
145
Alignement
146
Alignement
Individuel
Séquentialisé Répliqué
147
49
Distribution : la directive PROCESSORS
• Syntaxe
!HPF$ PROCESSORS array-decl
• Sémantique
Définit une géométrie rectangulaire de processeurs
limitée par le nombre de processeurs physiquement
disponibles
• Exemple A 64 processeurs
!HPF$ PROCESSORS PC(4,4,4) ou PC(2,4,8) etc.
!HPF$ PROCESSORS PP(8,8) ou P(4,16) etc.
!HPF$ PROCESSORS PL(64)
148
• Syntaxe
!HPF$ DISTRIBUTE array (dist-format-list) [ONTO procs]
• Sémantique
– Chaque dimension du tableau est distribuée suivant le schéma
correspondant de dist-format-list
– dist-format est
• BLOCK : fragments contigus de taille égale
• CYCLIC : circulaire
• BLOCK(k) : fragments contigus de taille k
• CYCLIC(k) : circulaire des blocks de taille k
• * : séquentialisé
– procs est un tableau de processeurs (calculé par le compilateur si
absent)
• Parallélisation possible des calculs associés aux données
distribuées sur des processeurs différents
149
150
50
Distribution : la directive DISTRIBUTE
REAL B(16,16)
!HPF$ PROCESSORS P(4,4)
!HPF$ DISTRIBUTE B(cyclic,block)
Remarque
151
Alignement et distribution
152
Alignement et distribution
153
51
Conclusion
154
7. Parallélisme de contrôle
Lectures
156
52
Plan
• Introduction
157
Introduction
158
Parallèle ou Réparti ?
159
53
Modèle de programmation à passage de messages
P0
P1
P2
160
Plan
• Introduction
• Passage de messages
161
• Composants
– Une librairie de passage de messages
– Un environnement de gestion d’une machine parallèle virtuelle
dynamique
• Une API et des implémentations
– Domaine public : protocole sous-jacent TCP
– Propriétaires : protocole sous-jacent propriétaire
– Pour la plupart des machines parallèles et les grappes
• Histoire
– Sous la direction de Jack Dongarra -> Top 500
– PVM 1.0 : 1989, interne Oak Ridge National Laboratory
– PVM 2.0 : 1991, University of Tennessee
– PVM 3.4.5 : 2004
162
54
La machine virtuelle : version interactive
console prag
pcX1 Hôte
pcX2 prog
console prog
Tâche
Console pvm
pcX3 prag add pcX1
add pcX3
prog
pcX2 spawn –2 prag
pvm
add pcX2
add pcX3
spawn –3 prog
163
La machine virtuelle
164
int numt = pvm_spawn( char *task, char **argv, int flag, char *where,
int ntask, int *tids
• task : nom de l’exécutable . Path par défaut $HOME/pvm3/bin/$PVM_ARCH/
• argv : arguments de l’exécutable
• flag : options de placement somme de
– PvmTaskDefault 0 : quelconque
– PvmTaskHost 1 : where spécifie une machine hôte
– …
• ntask : Nombre de copies de l’ exécutable à démarrer
• tids : Tableau[ntask] retourne les tids des processus PVM spawnés.
• numt Nombre de tâches spawnées.
165
55
Identification
166
Communication
int int
char char
167
Sérialisation
168
56
Emission : fonctions de base
• Réception
int bufid = pvm_recv(int tid, int msgtag)
– tid : identifiant émetteur ; -1 = non spécifié
– msgtag : un typage utilisateur; -1 = non spécifié
– bloquante : attente sur un message émis par tid avec le tag
msgtag.
• Formattage – désérialisation
int info = pvm_upckxxx(<type> *p, int cnt, int std)
– Copie dans le tableau p les données du buffer, avec le pas std
170
Réception
• Canaux FIFO
– Si A envoie deux messages successifs de même tag à B, les
réceptions s’effectuent dans l’ordre d’émission
– Rien n’est garanti sur l’ordre de réception de messages
provenant de processeurs différents
– Le non déterminisme est possible
– Le blocage en attente infinie est possible
– Compromis
• Programmation plus simple : Identifier les messages par tid et
msgtag
• Introduit des synchronisations inutiles
A B C
envoyer 2 à B recevoir(-1) envoyer 3 à B
Peut être 2 ou 3
171
57
Réceptions
• pvm_probe
– Crée un tampon tant que (pvm_probe (…) == -1)
travail utile
– >0 si un message est arrivé Ftq
– Évite l’attente, ou permet info = pvm_bufinfo (…)
de ne pas recevoir flag = attendu(info)
traitement suivant flag
• pvm_bufinfo
– Information sur le message arrivé
• pvm_nrecv : réception non bloquante
172
Synchronisation
• Groupes de tâches
– Syntaxe : voir group operations
– Numéros unique séquentiels
– Fonctions de conversion tid <-> inum
– Seule géométrie prédéfine anneau
• Conversion en géométrie nD triviale
• En 2D : xCoord = inum/N, yCoord= inum%N
• Barrière
int info = pvm_barrier (char*group, int count)
– Toutes les tâches appelantes attendent que count tâches aient
appelé la fonction
173
Synchronisation
• Un piège classique
Size = pvm_gsize(mygroup)
Info = pvm_barrier(gsize)
• Peut aboutir à une attente infinie
174
58
Passage de message vs Parallélisme de données
175
MPI
176
177
59
Retour sur l’introduction
• Programme = processus
• Fonctionnalités
– Identification
– Communication
– Synchronisation
• API bas niveau
– PVM, MPI
• Langages de programmation
– Pas d’usage courant
178
Plan
• Introduction
• Passage de messages
• Mémoire partagée
179
P C P C P C
Mémoire
180
60
Motivation pour les architectures SMP
• Economiques
– Intégrer des systèmes matériels standard pour fournir des
performances de milieu de gamme
– Evolutions actuelle
• Intégration de noeuds SMP dans des architectures très hautes
performances.
• Multiprocesseur en un circuit et circuits embarqués multiprocesseurs
• Simplicité de programmation
– Il n’est pas obligatoire de partitionner les données/les calculs
– Séduisant pour des applications irrégulières
• Objectif du cours
– Montrer les limites de cette approche
181
Consistance séquentielle
PX PY
A=1 Lire B
B=2 Lire A
Consistance séquentielle
183
61
Consistance séquentielle
184
Consistance séquentielle
185
Consistance séquentielle
62
Consistance séquentielle et microprocesseurs
187
Exemples
• Exclusion mutuelle
PX PY Mémoire
fx = 1 fy = 1
If (!fy) If (!fx) Buffer X 1 Écrire fx
code code Lire fy
• Tampon d’ écriture 0
Buffer Y 1 Écrire fy
• Ordre séquentiel = ordre de 0
lancement != ordre de visibilité Lire fx
• PX et PY exécutent code
188
Exemples
• Producteur-consommateur
lancer lire head
PX PY lancer lire data
retour data =0
data=2 while (!head); écrire data
head=1 val=data retour head=1
189
63
Consistance et microprocesseurs
190
Succès Echec
R Aucune • Acquérir ligne = recopier en mémoire Ecriture allouée,
la ligne éliminée si modifiée réécriture (write-
Marquer la ligne
W • Action succès back)
à modifiée
191
1 0 0
Propagation – cache write-through
1 1 1
192
64
Relation avec la consistance
193
Données Cache P0
Adresses Contrôleur Cache P1
adresses
contrôle
194
Le protocole MESI
65
Le protocole MESI : conditions processeur
RH Condition
RH = read hit
Invalid RMS Shared RMS = read miss shared
RME = read miss excl.
WM
Transaction bus
Modified Exclusive Cache block fill
WH
Read with-intent-
RH WH RH to modify
Invalidate
•Succès en écriture :
• Si partagé, invalidation des autres copies
• Etat futur modifié : les écritures suivantes ne provoquent
pas de transaction bus 196
SHR Condition
SHR = snoop hit on read
Invalid SHW Shared SHW = snoop hit on write
or
read with-intent-to modify
SHW
• Soop Hit = détection sur la ligne d’adresse d’un accès à une ligne que je
possède
• SHR : un autre lit la ligne
• SHW : un autre écrit la ligne que je possède ou invalidation
197
Cohérence et performances
• Trafic de cohérence
– L’écriture d’une donnée partagée invalide toutes les copies. Tous
les processeurs qui lisent la donnée doivent effectuer une
transaction de lecture.
• Faux partage
– Un processeur écrit dans une partie d’une ligne de cache.
– Un autre processeur écrit dans une autre partie d’une ligne de
cache
– Même si chaque processeur ne modifie que sa « partie » de la
ligne de cache, toute écriture dans un cache provoque une
invalidation de « toute » la ligne de cache dans les autres
caches.
198
66
Synchronisation
• Problème de l’atomicité
• P0 : s = s+1 ; P1 : s = s+2 ne produit pas nécessairement
s = 3 même sur une machine séquentiellement
consistante car l’opération lecture/écriture n’est pas
atomique (LD puis ST)
• Implémentation efficace de l’accès exclusif à une variable
199
Atomicité
200
201
67
Implémentation des transactions atomiques (2)
• Implémentation du TestAndSet
lwarx verrou, R1
cmp R1, 0
bfalse echec
stwcx 1, verrou
bfalse echec
….
202
SMP Conclusion 1
203
SMP Conclusion 2
204
68