obtenir le fichier

publicité
Introduction au calcul réparti
Françoise Roch
Plan
Introduction
Concepts et terminologie
Modèles d’architecture mémoire des machines
parallèles
Les tendances au niveau architecture
Modèles de programmation parallèle
Conception d’un programme parallèle
Exemples
Références
2
Introduction
•
Historiquement, un logiciel était écrit pour un traitement séquentiel :
Pour être exécuté sur une machine avec une seule unité de calcul
Un calcul était découpé en une série discrète d’instructions
Les instructions étaient exécutées les unes après les autres
Une seule instruction pouvait s’exécuter à un instant donné
Le problème
p
CPU
tn tn-1
t1
t0
3
Exécution parallèle
•
•
•
•
Un calcul parallèle est exécuté sur plusieurs unités de calcul
Le calcul est découpé en plusieurs parties pouvant s’exécuter simultanément
Chaque partie est découpée en séquences d’instructions
Des instructions de chaque partie s’exécutent simultanément sur # CPU
CPU
CPU
CPU
CPU
4
Exécution parallèle
• Les ressources de calcul peuvent être
– Une seule machine avec un ou plusieurs processeurs
– Plusieurs machines avec un ou plusieurs processeurs
interconnectées par un réseau rapide
– Une grille de calcul : plusieurs ensembles de plusieurs machines
• On peut donc améliorer le temps d’exécution en utilisant
plusieurs CPU à la fois
Si un CPU peut exécuter les opérations
arithmétiques
q
du pprogramme
g
en temps
p t,, alors n
CPU peuvent idéalement les exécuter en temps
t/n
5
Du Séquentiel au parallèle
• L’évolution du calcul séquentiel vers le calcul parallèle est
– permise grâce à ll’évolution
évolution de la technologie,
technologie la vitesse des réseaux
augmente et permet d’utiliser des ressources réparties
– Requise par les contraintes energetiques et economiques
• L
Le modèle
dèl parallèle
llèl « fit » avec notre
t univers
i
: la
l nature
t
estt
intrinsèquement parallèle, elle est composée d’éléments
complexes, qui évoluent en parallèle, interagissent, et subissent
simultanément certains événements.
Quelques exemples :
Les modèles
d l de
d météo et océans
Les déplacements de plaques tectoniques
Les chaînes d’assemblage automobile
La vision, la pensée, …
6
Le parallélisme aujourd
aujourd’hui
hui
•
Il est depuis une quinzaine d’années utilisé pour le
traitement de problèmes scientifiques constituant
de grands challenges, tels que :
météo et climat, biologie (génome), géophysique
(activité sismique), réactions chimique et réactions
nucléaires,, …
•
Mais aujourd’hui également pour des applications
commerciales :
Bases de données parallèles, exploration pétrolière,
moteurs de recherche web, réalité virtuelle, …
7
Pourquoi
q
utiliser le parallélisme
p
?
• Economiser du temps (à la montre)
• Résoudre des problèmes
p
de + grande
g
taille
• Avoir accès à + de mémoire et + de puissance en
cumulant les ressources matérielles
• Pouvoir
P
i traiter
t it plusieurs
l i
choses
h
en même
ê temps
t
• Les limites du séquentiel :
– Limites de la vitesse de transmission ( transmission des
données entre les différents éléments du hardware)
– La taille mémoire
– Les limites de la miniaturisation
– Les limites économiques : + cher d’augmenter la
rapidité d’un processeur que de multiplier les
processeurs ou les cores
8
Pourquoi utiliser le parallélisme ?
Un autre aspect : l’expressivité
• Une + grande puissance expressive des modèles
de calcul parallèles : une approche parallèle des
problèmes peut aboutir à des solutions originales
(nouveaux modèles, nouveaux algorithmes).
• De nouveaux concepts :
– Concurrence
C
– Communication
– Synchronisation
nouveaux problèmes : non déterminisme, justesse, interblocage,
terminaison
g
q
nouveaux modèles,, nouvelle dimension algorithmique
9
Modèles et Terminologie
10
Classification de Flynn
Classification des architectures selon 2 dimensions :
« instructions » et « data »,
2 états possibles pour chacune : « single » ou « multiple »
SISD
SIMD
Single Instruction
Instruction,Single
Single Data
Single Instruction
Instruction, Multiple Data
MISD
MIMD
Multiple Instruction, Single Data
Multiple Instruction, Multiple Data
11
Cl ifi ti de
Classification
d Flynn
Fl
• Flux/flot dd’instructions
instructions : séquence dd’instructions
instructions exécutées
par la machine
• Flux/flot de données : séquence de données appelées par le
flux d’instructions
load A
load b
C = A+B
teemps
• SISD : architecture
architect re séquentielle
séq entielle avec
a ec unn
seul flot d’instructions, un seul flot de
données, exécution déterministe
store C
A = B*2
store A
P
12
Cl ifi ti de
Classification
d Flynn
Fl
•
SIMD: architecture // , ttes les unités de traitement exécutent la même
instruction à un cycle d’horloge donnée, chaque unité peut opérer sur des
données différentes,, exécution déterministe
– Arrays processors
– Machines vectorielles (instructions sur des vecteurs de données)
– Exécution pipelinée
load A(2)
load A(n)
load B(1)
load B(2)
load B(n)
C(1) =
A(1)+B(1)
C(2) =
A(2)+B(2)
C(n) =
A(n)+B(n)
store C(1)
store C(2)
store C(n)
P1
P2
…
Pn
teemps
load A(1)
13
Cl ifi ti de
Classification
d Fl
Flynn
•
MISD : un seul flot de données
alimente plusieurs unités de traitement,
chaque unité de traitement opère
indépendamment des autres, sur des
flots d’instructions indépendants
Peu implémenté
Ex d’utilisation : exécution en // de
plusieurs algos de cryptographie pour le
décodage d’1 même message
load A(1)
load A(1)
C(1) =
A(1)*1
C(2) =
A(1)*2
C(3) =
A(1)*3
store
t
C(1)
store
t
C(2)
store
t
C(3)
P1
P2
Pn
load A(1)
call func
load D
load B(1)
xx=y
y
l dE
load
C(1) =
A(1)+B(1)
y=y+1
F=A*E
call
sum(x y)
sum(x,y)
store F
store C(1)
P1
P2
…
Pn
teemps
MIMD: architecture la plus courante
aujourd’hui,
Chaque
C
aque uunitéé de traitement
a e e peu
peut gérer
gé e
un flot d’instructions différent
Chaque unité peut opérer sur un flot de
données différent
L’exécution peut être synchrone ou
asynchrone, déterministe ou nondéterministe
load A(1)
temps
•
14
Terminologie
e
o og e
•
•
•
•
•
Tâche : une portion de travail à exécuter sur un ordinateur, du type un
ensemble d’instructions d’un programme qui est exécuté sur un CPU.
Tâ h parallèle
Tâche
llèl : une tâche
tâ h quii peutt s’exécuter
’ é t sur plusieurs
l i
CPU,
CPU sans
risque sur la validité des résultats
Exécution séquentielle : exécution d’un programme séquentiel, une
ét
étape
à la
l fois.
f i
Exécution parallèle : exécution d’un programme par plusieurs tâches,
chaque tâche pouvant exécuter la même instruction ou une instruction
diffé t à un instant
différente
i t t donné.
d
é
Mémoire partagée : D’un point de vue hard, réfère à une machine dont
tous les CPUs. ont un accès direct à une mémoire φ commune
( é é l
(généralement
t via
i un bus)
b )
D’un point de vue modèle de programmation : toutes les tâches ont la
même image mémoire et peuvent directement adresser et accéder au
même emplacement mémoire logique,
logiq e peu
pe importe où il se trouve
tro e en
mémoire physique.
15
Terminologie
•
•
•
•
•
•
Mémoire distribuée : dd’un
un point de vue physique,
physique basée sur un accès mémoire
réseau pour une mémoire physique non commune.
D’un point de vue modèle de programmation, les tâches ne peuvent voir que la
mémoire de la machine locale et doivent effectuer des communications pour
accéder à la mémoire dd’une
une machine distante,
distante sur laquelle dd’autres
autres tâches
s’exécutent.
Communications : les tâches parallèles échangent des données, par différents
moyens physiques : via un bus à mémoire partagée, via un réseau. Quelque soit la
méthode
é ode eemployée,
p oyée, on
o parle
p e de «communication
co
u c o »..
Synchronisation : la coordination des tâches en temps réel est souvent associée
aux communications, elle est souvent implémentée en introduisant un point de
synchronisation au-delà duquel la tâche ne peut continuer tant que une ou plusieurs
autres tâches ne l’ont pas atteint.
Granularité : mesure qualitative du rapport calcul / communications
– Grain grossier (coarse) : relativement bcp de calculs entre # communications
– Grain fin (fine) : relativement peu de calcul entre # communications
speedup :
mesure de l’amélioration des performances due au parallélisme
(wall clock time of serial execution) / (wall clock time of //execution)
Scalabilité : réfère à la capacité d’un système // à fournir une augmentation de
l’ élé ti proportionelle
l’accélération
ti ll à l’augmentation
l’
t ti du
d nombre
b de
d CPUs.
CPU
16
Architecture mémoire des machines
parallèles
17
Mémoire partagée
•
•
Tous les CPUs accède à toute la mémoire globale avec un même espace
d’adressage global
Chaque
q CPU travaille indépendamment
p
des autres,, mais les modifications
effectuées par un processeur à un emplacement mémoire (en mémoire
globale) sont visibles par tous les autres
Les CPUs ont leur propre mémoire locale (cache)
CPU
cache
cache
CPU
Mémoire
cache
•
CPU
cache
CPU
18
Mémoire ppartagée
g : UMA/NUMA
2 classes d’architecture à mémoire partagée,
différenciées ppar les temps
p d’accès mémoire :
• UMA (Uniform memory access) :
Des CPUs identiques, ayant tous le même temps
d’accès à la mémoire
Plus couramment appelées SMP (Symmetric
MultiProcessor)
Gestion de la cohérence des caches
Certains systèmes sont CC-NUMA : si un CPU
modifie un emplacement mémoire partagé, la
modification est visible ppar tous les autres CPUs
19
Mémoire ppartagée
g : UMA/NUMA
• NUMA (Non
(N Uniform
U if
M
Memory
A
Access)
):
Conçue pour pallier
aux problèmes d’accès
mémoire concurrents via un unique
q bus .
En général fabriquées à base de plusieurs blocs
SMP interconnectés
D temps
Des
t
d’ è à la
d’accès
l mémoire
é i diffèrent
diffè t suivant
i t la
l
zone accédée. Le temps d’accès via le lien
d’interconnexion des blocs est plus lent
Gestion de la cohérence des caches
CC-NUMA : Cache Coherent NUMA
20
Architectures NUMA
Mémoire physiquement distribuée mais logiquement partagée
CPU
CPU
CPU
CPU
21
Mémoire partagée
• Espace d’adresse globale J facilite le travail du
programmeur
• Mémoire proche des CPUs J le partage des données entre
tâches est rapide
p
Mais :
• Manque de scalabilité : augmenter le nombre de CPUs
accroît le traffic sur
s r le chemin d’accès à la mémoire
partagée
• Le programmeur doit gérer la synchronisation pour un
accès correcte à la mémoire globale
• Très coûteux de construire des architectures à mémoire
ppartagée
g avec un ggrand nombre de CPUs
22
Mémoire distribuée
• Le point commun de ces architectures : elles possèdent un réseau
d’interconnexion pour communiquer entre les mémoires des
différents processeurs.
processeurs
CPU
CPU
Réseau
CPU
CPU
23
Mémoire distribuée
• Chaque processeur à sa propre mémoire locale, il n’y a
pas de
d notion
ti d’espace
d’
d’adressage
d’ d
globale
l b l entre
t tous
t
les procs.
autres
• Les procs opèrent indépendamment les uns des autres,
une modification en mémoire locale n’a pas d’effet
sur la mémoire des autres procs.
• Si un processeur a besoin d’une donnée dans la
mémoire d’un autre processeur, le programmeur doit
définir explicitement la communication
communication.
• Les réseaux d’interconnexion sont divers, avec des
niveaux de pperformance très variables
24
Mémoire distribuée
• On peut augmenter le nombre de processeur et la mémoire
proportionnellement
• Accès rapide à la mémoire locale sur chaque proc, sans
surcoût de gestion de cohérence de cache
• Coût
C ût raisonnable
i
bl ex : PCs
PC en réseau
é
Mais :
• Le pprogrammeur
g
doit ggérer toutes les communications
entre processeurs
• Peut être difficile de faire coïncider une structure de
données basée sur une mémoire globale,
globale à cette
organisation physique de la mémoire
• Temps d’accès mémoire non locaux élevés
25
Architectures mémoire Hybrides
y
•
•
•
Les ordinateurs les plus puissants au monde sont aujourd’hui un
mixte de mémoire partagée et mémoire distribuée
La brique de base (nœud) est un multiprocesseur à mémoire partagée
Ces briques sont interconnectées par un réseau (type ethernet,
myrinet, Infiniband, …)
CPU
CPU
CPU
CPU
CPU
CPU
m
mémoire
CPU
m
mémoire
CPU
Réseau
CPU
CPU
CPU
CPU
CPU
CPU
mémoirre
CPU
mémoirre
CPU
26
Mémoire partagée vs Mémoire distribuée
• Parallélisation plus simple sur architecture à mémoire
partagée
• Mais mémoire partagée + chère que mém. distribuée
Des systèmes à mémoire virtuellement partagée pour
bénéficier des avantages du partagé sur architecture
distribué
Ou des langages à espace d’adressage global (Unified
Parallel C, Co-array Fortran, …)
Mais, si accès mémoire non uniforme, il faut tenir compte
de la répartition physique de la mémoire pour optimiser
les performances
plus complexe
27
Conséquences pour le programmeur
Nécessité de décoder la relation entre ll’architecture
architecture et les
applications:
Adapter les algorithmes, la programmation,
Comprendre le comportement d’un programme,
Choisir son infrastructure de calcul en fonction de ses
besoins, retenir le meilleur compromis
28
Les tendances au niveau architecture
Cell
Sandy Bridge
29
Evolution des architectures
Loii de
L
d Moore
M
: nbb de
d transistors
t
i t par circuit
i it intégré
i té é * 2 tous
t
les
l 2
ans.
En 10 ans,, la finesse de ggravure est ppassée de 0,25
, µ
µm ((Pentium
III) à 0,045 µm (Core 2 Penryn, Nehalem, …).
Evolution de l’architecture des processeurs (pipeline,
d li ti des
duplication
d unités
ité fonctionnelles,
f ti
ll exécution
é ti spéculative,
é l ti
exécution désordonnée ...).
pp
: dans le cas
Evolution des interactions architecture/applications
de l’Itanium, le compilateur fait partie intégrante de
l’architecture.
E l ti des
Evolution
d infrastructures
i f t t
vers un haut
h t degré
d é de
d parallélisme
lléli
en intégrant un grand nombre de cores.
Utilisation de cores hétérogènes (CPU + GPU) et API
compatibles (CUDA, Brook+, OpenCL)
30
x 10000
x 10000
Evolution des architectures:
g , giga,
g g , téra,, ppéta,, …
kilo,, méga,
1997 : année du Teraflops
2008 : année du Petaflops
Tests Linpack sur la machine IBM Roadrunner du DoE de
Los Alamos
Folding@Home, BOINC : projets de calcul bénévole
2017 : année
é de
d l’Exaflops
l’ fl
???
31
Evolution des processeurs:
GPU versus CPU
Vitesse des processeurs classiques * 2 tous les 16 mois
Vitesse des processeurs graphiques (GPU) *22 tous les 8 mois
32
Modèle de Von Neumann (1945)
La mémoire : contient le
programme (instructions) et
les données.
Une Unité Arithmétique et
Logique : UAL qui effectue
l opérations.
les
é ti
Une unité de contrôle :
chargée du séquençage des
opérations.
Une unité d’Entrée/Sortie.
33
U e aarchitecture
Une
c ec u e
d’aujourd’hui
Système
d’Entrées/
Sorties
Mémoire
Bus interface
L3
L1
inst
r
Core0
Core1
Core2
Core3
Unité de commande
UAL
UAL
UAL
L1
data
UAL
L
2
34
Caractéristiques des processeurs
Jeux d’instructions qu’il peut exécuter :
Complexe : CISC (beaucoup d’instr. Complexes
prenant plusieurs cycles d’horloge). Ex: x86
Réduit : RISC (Moins d’instr. Mais n’utilisant que
quelques cycles). Ex: PowerPC
N b dde bi
Nombre
bits pouvant être
ê traités
i é en une instruction,
i
i
32 ou 64 bits
N b dde ttransistors:
Nombre
it
plus
l il contient
ti t de
d transistors,
t
it
plus il est capable d’exécuter d’instructions /seconde
35
Comment faire des processeurs plus rapides
Augmenter la fréquence d’horloge (limites
techniques, solution coûteuse).
Permettre l’exécution simultanée de plusieurs
instructions :
Instruction Level Parallelism : pipelining, superscalaire,
architecture VLIW et EPIC.
Thread Level Parallelism : multithreading et SMT.
SMT
Améliorer les accès mémoire.
36
Augmenter la fréquence d’horloge
La fréquence d’horloge détermine la durée d’un cycle.
Chaque opération utilise un certain nombre de cycles.
La fréquence d’horloge est fonction de :
la technologie des semi-conducteurs,
le packaging,
les circuits.
Les limites :
La consommation électrique
q et la dissipation
p
thermique
q d’un
processeur sont fonction de sa fréquence d’horloge.
Le temps d’interconnexion ne suit pas la finesse de gravure.
Le nb de cycles d’horloge pour interruptions, « cache
miss »ou mauvaise prédiction de branchement augmentent. 37
Exécution en // de plusieurs instructions
1 CPU = plusieurs unités fonctionnelles qui peuvent travailler en // :
unité de gestion des bus, unité de commande, unité d’exécution.
L’unité
L
unité dd’exécution
exécution (ou de traitement) est composée notamment de :
une /plusieurs unités arithmétiques et logiques (UAL) qui assurent
les fonctions basiques de calcul arithmétique et les opérations
logiques.
une / plusieurs unités de virgule flottante (FPU). L’instruction de
calcul de base est la multiplication / addition (FMA : Floatingpoint Multiply and Add) en double précision.
La performance crête dépend de la taille des registres et est fonction de la
précision
é i i (SP,DP).
(SP DP)
Mesure de performance en terme de Mflops : évalue uniquement les
opérations sur les flottants, on peut utiliser les MIPS pour mesurer une
performance sur le nombre d’instructions p
p
par seconde.
Perf crête de l’Intel Harpertown (quadcore) 2.5GHz:
38
2FPU+1FMA, 4 FP/cycle
4*2.5*4 = 40 Gflops crête en DP
Exécution simultanée de plusieurs
instructions ILP (pipeling)
Principe :
Une opération est découpée en
plusieurs étapes indépendantes. Ces
différentes étapes sont exécutées
simultanément, sur des données
distinctes, par des éléments
différents du pprocesseur
(parallélisme d’instructions).
Phases d’exécution d’une
instruction :
IF : Instruction Fecht
ID : Instruction
Decode/Register Fecht
EX : Execution/Effective
Address
MA : Memory Access/
Cache Access
WB : Write
Write-Back
Back
5 instructions en // en 9
cycles (25 en séquentiel)
Multiplication du débit
39
d’exécution des instructions
Instruction Level Parallelism : architectures
superscalaires
Principe :
Duplication de composants
(FMA, FPU) et exécution
simultanée de plusieurs
instructions .
10 instructions en 9 cycles
40
Le parallélisme d’instruction
L techniques
Les
t h i
d’optimisation
d’ ti i ti
Gestion des instructions
– Statique (in-order): exécutées dans l’ordre du code machine
– Dynamique (out-of-order): le hardware modifie l’ordre des instructions
pour favoriser
f
i le
l parallélisme
lléli
(faible
(f ibl nombre
b d’i
d’instructions)
i )
Execution spéculative : faire une hypothèse sur la suite d’un traitement après un
branchement conditionnel (lorsque la valeur de la condition n’est pas encore
calculée).
Les p
problèmes de dépendances
p
entre instructions :
Partage des ressources : par exemple la mémoire
Dépendances des données entre instructions : une instruction produit une
opérande utilisée immédiatement par l’instruction suivante
Dépendances des contrôles : une instruction est une branche.
41
Mode SIMD
Principe :
Le mode SIMD (Single Instruction Multiple Data) permet
d’appliquer la même instruction simultanément à plusieurs
données (stockées dans un registre) pour produire plusieurs
résultats.
Exemples
p de Jeux d’instructions SIMD
MMX : permettent d'accélérer certaines opérations répétitives dans
des domaines tels que le traitement de l'image 2D, du son et des
communications.
SSE (SSE2, SSE3, SSE4, SSE5 annonçé par AMD) – Streaming
SIMD Extensions : par ex instructions pour additionner et
multiplier plusieurs valeurs stockées dans un seul registre (registre
SSE))
3DNow : jeu d’instructions multimédia développé par
AMD
42
Les architectures vectorielles
De nombreux problèmes intrinsèquement vectoriels: ils
opèrent
è t sur des
d vecteurs
t
de
d données
d
é unidimensionnels
idi
i
l
Certaines architectures disposent d’instructions vectorielles
l instruction vectorielle est décodée une seule fois, les éléments du
l’instruction
vecteur sont ensuite soumis un à un à l’unité de traitement
Les pipelines des unités de traitement sont pleinement alimentés
Exemple : Cray,
Cray NEC SX
SX, Fujitsu VPP,
VPP Altivec (PowerPC G4
et G5, Power6)
La tendance est au renforcement des instructions
multimédia, à l’augmentation de la taille et du nombre
de registres vectoriels
43
Les limites du //isme d’instructions
Obstacles à la performance sur les systèmes superscalaires
«standard»:
L branchements
Les
b
h
(IF CASE,
(IF,
CASE …))
Les mauvaises prédictions : en cas d’erreur de prédiction, il
faut faire marche arrière
Les petites branches ont peu de code à exécuter ce qui limite
le parallélisme
La latence de la mémoire
Utilise plus d’un cycle d’horloge
L’ t ti du
L’extraction
d parallélisme
lléli
d instructions
des
i t ti
Le compilateur « sérialise » le code, dont le parallélisme
intrinsèque doit être redécouvert dynamiquement par le
processeur
44
Dépasser les limites en aidant le processeur
Les architectures VLIW (Very Long Instruction Word)
et EPIC ((Explicitly
p
y Parallel Instruction Set Computing)
p
g)
permettent de traiter des instructions longues, aggrégations
d’instructions courtes indépendantes, de façon à les exécuter
explicitement en parallèle.
VLIW : le compilateur a la charge d’organiser correctement les
i
instructions
i
parmii les
l bundles
b dl (blocs
(bl
formés
f
é de
d plusieurs
l i
instructions successives), tout en respectant les types de
dépendances habituelles qui sont normalement gérées au
niveau matériel sur les architectures classiques.
classiques
On ggagne
O
g en pperformance (p
(pas de contrôle),
), mais la
compatibilité binaire en générations successives est quasiimpossible.
45
Dépasser les limites en aidant le processeur
EPIC (Explicitly Parallel Instruction Set Computing) : type
d’architecture de microprocesseurs utilisée notamment dans les
Itaniums Le parallélisme est exprimé de manière indépendante de
Itaniums.
la mise en oeuvre du processeur. Disparition du
réordonnancement à l’exécution : les instructions sont exécutées
dans ll’ordre
ordre exact dans lequel le compilateur les a mis.
→ L’effort d’optimisation repose sur le compilateur qui a la
charge d’organiser statiquement les dépendances interinstructions
128 bits
Instruction 1
41 bits
Instruction 2
41 bits
Instruction 3
41 bits
template
5 bits
46
Améliorer le remplissage du flot
di
d’instructions
i
du
d processeur : TLP (Thread
( h d
Level Parallelism)
Idée : mixer deux flux d’instructions arrivant au processeur pour
optimiser l’utilisation simultanée de toutes les ressources (remplir
l cycles
les
l perdus
d - cache
h miss,
i load
l d ...).
)
Le SMT (Simultaneous Multithreading) partage du pipeline du
processeur entre plusieurs threads(d’un même programme ou de
deux programmes différents). Les registres et les caches sont aussi
partagés.
L’hyperthreading = SMT d’Intel.
Le multithreading dégrade les performances individuelles des threads
mais améliore les performances de l’ensemble.
47
Les différentes architectures mémoire
Principalement deux types à base de semi-conducteur
semi conducteur :
– DRAM (Dynamic Random Access Memory) chaque bit est représenté
par une charge électrique qui doit être rafraîchie à chaque lecture/écriture.
– SRAM (Static
(S i Random
R d
Access
A
Memory)
M
) retient
i ses données
d
é aussii
longtemps qu’il y a du courant.
Temps d’un cycle SRAM de 8 à 16 fois plus rapide qu’un cycle DRAM.
Coût de la mémoire SRAM de 8 à 16 fois plus élevé que la mémoire
DRAM.
Solution la plus courante:
1. De 1 à 3 niveaux de SRAM
en mémoire cache.
2. La mémoire principale en
DRAM.
3. La mémoire virtuelle sur des
disques.
Type
Taille
Vitesse
Coût/bit
Registre
< 1 KB
< 1 ns
$$$$
SRAM
On-chip
8 KB - 6MB
< 10 ns
$$$
SRAM
Off-chip
1 MB 16 MB
< 20 ns
$$
DRAM
64 MB 1 TB
< 100 ns
$
Flash
64 MB – 32GB
< 100 μs
c
Disk
40 GB - 1 PB
5 bits
< 20
ms
~0
48
Hiérarchisation de la mémoire
Cas idéal : Mémoire la plus grande et la plus rapide possible
La performance des ordinateurs est limitée par la latence et la bande passante
de la mémoire :
L
Latence
= temps pour un seull accès.
è
Temps d’accès mémoire >> temps cycle processeur.
Bande passante = nombre d’accès par unité de temps.
μProc
60%/année
1000
CPU
100
Processeur-Mémoire Performance
50%/année
10
DRAM
7%/année
DRAM
2000
5 bits
1999
1998
1997
1996
1995
1994
1992
1993
1991
1990
1989
1988
1987
1986
1985
1984
1983
1982
1981
1
1980
Performan
nce
Moore’s Law
49
Notion de localité mémoire : 2 propriétés
importantes des références mémoire
Localité temporelle : si une zone est référencée, elle a
d chances
des
h
d’ê
d’être référencée
éfé
é à nouveau dans
d
un futur
f
proche.
E
Exemple
l de
d proximité
i ité temporelle
t
ll : dans
d
une bboucle
l
simple, chaque itération accède aux mêmes
instructions.
instructions
Localité spatiale : si une zone est référencée, les zones
voisines ont des chances dd’être
être référencées dans un
futur proche.
Exemple
p de pproximité spatiale
p
: dans un bloc
simple, chaque instruction sera accédée l’une après
50
l’autre.
Proximité temporelle
DO I = 1,10 0000
S1 = A(I)
S2 = A(I+K)
( ) # S2 sera réutilisé à l’itération I+K
END DO
L idée de base est de conserver A(I
L’idée
A(I+K)
K) (lecture de la
référence à l’itération I, déclaration S2) en mémoire
rapide jusqu’à sa prochaine utilisation à l’itération I+K,
déclaration S1.
Si on veut exploiter la localité temporelle via les
registres, cela suppose qu’il faille au moins K registres.
Cependant, dans le cas général, on aura certainement
b i de
besoin
d stocker
k d’autres
d
données.
d
51
L’évaluation précise de la proximité temporelle est très complexe
Proximité spatiale
Le voisinage
L
ii
d’une
d’
zone localisée
l li é par une adresse
d
doit
d it être
êt
évaluée dans l’espace d’adressage virtuel.
Les structures de données sont linéarisées et réduites à une
dimension pour être placées dans l’espace d’adressage linéaire.
Exemple en Fortran
(rangement des tableaux 2D
par colonne)
DO J = 1,1000
DO I = 1,10000
X1 = A(I,J)
X2 = B(J
B(J,I)
I)
END DO
END DO
Pour A : localité spatiale
parfaite, accès à des zones de
mémoire consécutives
consécutives.
Pour B : 2 références
consécutives sont distantes
d 1000 emplacements
de
l
mémoires
Pour exploiter la localité spatiale, il faut que la distance entre522
références soit inférieure à la taille de la ligne du cache.
La hiérarchie mémoire
2 principes de base pour pour que les références mémoire futures
soient rapidement satisfaites :
Localité temporelle
Garder les éléments récemment référencées aux plus hauts niveaux
de la hiérarchie (au plus près du CPU)
L li é spatiale
Localité
i l
Garder les voisins des éléments récemment référencés aux plus
hauts niveaux de la hiérarchie
53
Organisation des caches
Le cache est divisé en lignes de n mots.
2 niveaux de g
granularité :
le CPU travaille sur des « mots » (par ex 32 ou 64 bits).
Les transferts mémoire se font par blocs (par ex lignes
de cache de 256 octets).
Une même donnée peut être présente à différents niveaux
d la
de
l mémoire
é i : problème
blè de
d cohérence
hé
et de
d propagation
i
des modifications.
Les lignes de caches sont organisées en ensembles à
l’intérieur du cache, la taille de ces ensembles est constante
et est appelée le degré d’associativité
54
Organisation des caches
Direct Map : chaque adresse
mémoire est associée à une
li
ligne
de
d cache
h déterminée
dé
i é
(degré d’associativité = 1).
Fully associative : chaque
adresse mémoire correspond à
n’importe quelle ligne de
cache.
cache
k way associative : chaque
adresse a une alternative de k
lignes. La mémoire est divisé
en ensembles.
55
Effet des paramètres des caches sur les performances
•
•
•
•
Cache plus grand
☺ réduit les « cache miss »,
augmente le temps d’accès.
Plus grand degré d’associativité
☺ réduit les conflits de cache,
peut augmenter le temps d’accès.
Le prefetching consiste à anticiper les données et les instructions dont le processeur
aura besoin, et ainsi les précharger depuis la hiérarchie mémoire (le L2 ou la mémoire
centrale).
Différents type de prefetching :
mécanisme hardware de préchargement,
mécanisme software de préchargement,
mécanisme
é i
mixte.
i t
Le prefetching n’est pas gratuit, il consomme de la
56
bande passante qui est une ressource critique.
L communications
Les
i ti
en interne
i t
57
Communications CPU-mémoire
Xeon
N thb id
Northbridge
Opteron
H
Hypertransport
t
t
Nehalem
N
h l
QuickPath
58
Communications CPU-Mémoire
Exemple du Nehalem avec
le QuickPathInterconnect :
L contrôleur
Le
ôl
mémoire
é i est
intégré au CPU.
Exemple : calcul de la bande passante mémoire locale sur un noeud bi
bi-sockets
sockets
Intel Nehalem
BP vers mémoire locale au CPU :
3 canaux 64 bits vers mém. DDR3 1066 MHz, soit 3*1066*8
3 1066 8 = 25.6Go/s.
Un processeur peut également adresser la mémoire connecté à un autre
processeur NUMA (Non Uniform Memory Access)
Bande Passante vers mémoire d’un autre CPU : le Q
QPI à une bande passante
p
de 6.4 GT /s par lien, unité de transfert de 16 bits, soit 12.8 Go/s dans chaque
sens, soit une bande passante de 25.6 Go/s (par lien bi-directionnel).
59
Communications CPU-CPU
Hypertransport
H
t
t (HT),
(HT) solution
l ti AMD liaison
li i
point
i t à point
i t
Connexion haut débit, bidirectionnel, à faible latence.
Les processeurs sont reliés entre eux via un lien HT à 2 GHz en
HT 2.0 (passage à 2.6 GHz en HT 3).
Limite de la bande passante sur HT (V3 en 2.6 GHz) : 20.8 Go/s dans
chaque direction soit 41.6 en FD.
QuickPath Interconnect (QPI), solution Intel
Remplace le FSB sur l’architecture Nehalem,
Nehalem similaire à l’HT.
l’HT
Le principal intérêt du bus QPI provient de sa topologie point à
ppoint : le bus connectant les processeurs
p
aux autres composants
p
n’est plus partagé.
Jusqu’à 32 Go/s sur un lien bi-directionnel.
60
Communications CPU-IO
Bus PCI-X
B
PCI X
Evolution du bus PCI, préserve la compatibilité.
Interconnect parallèle. Interface entre le bus processeur et le bus
d’entrées/sorties. Bus 64 bits, Fréquence jusqu’à 533 MHz.
Bus série full duplex PCI
PCI-Express
Express
Utilise une interface série (1 bit donc) à base de lignes bidirectionnelles. En version 2, chaque lien série fonctionne à 250 Mo/s
d
dans
chaque
h
di i Le bus
direction.
b PCI-Express peut être construit
i en
multipliant le nombre de lignes => débits de 250 Mo/s à 8 Gos/s.
Limite de la bande passante sur PCI-X 133 : 64 bits 133 MHz =
1064 Mo/s
Limite de la bande passante sur PCI-Express
PCI Express (en V2 : 250 Mo/s par
canal) :
2X : 0.5 Go/s 4X : 1 Go/s 32X : 8 Go/s
61
Les architectures multi-coeurs
La version originale de la loi de Moore dit que le nombre de transistors des circuits
intégrés double tous les deux ans. Que faire de tous ces transistors ?
une complexité sur l’«out of order» accrue mais montre ses limites
d caches
des
h de
d plus
l en plus
l grands
d (mais
( i limitent
li i
la
l vitesse
i
d’accès
d
aux données),
d
)
+ de CPUs.
Un processeur composéé d’au
U
d’ moins
i 2 unités
i é centrales
l de
d calcul
l l sur
une même puce.
Permet dd’augmenter
augmenter la puissance de calcul sans augmenter la
fréquence d’horloge.
Et donc réduire la dissipation thermique.
Et augmenter la densité : les coeurs sont sur le même support, la
connectique reliant le processeur à la carte mère ne change pas par
rapport à un mono
mono-cœur
cœur
La course à la fréquence est terminée !
62
Intel Harpe
ertown
Exemples de processeurs multicoeurs
63
Pourquoi les multicoeurs ?
64
Architecture
c ec u e des caches
cac es
65
Partage des caches L2 et L3
Partage du cache L2 (ou L3) :
☺ communications pplus rapides
p
entre coeurs,
☺ meilleure utilisation de l’espace,
☺ migration des threads plus facile entre les coeurs,
contention au niveau de la bande passante et des caches
(partage de l’espace),
P dde partage
Pas
t
entre
t les
l caches
h :
☺ pas de contention,
communication/migration
i ti / i ti plus
l coûteuse,
ût
passage
systématique par la mémoire.
p
g
Power6,, Intel Nehalem
cache L2 pprivé,, cache L3 partagé:IBM
tout privé : le Montecito
66
L’architecture Nehalem
4 cores
3 niveaux de cache
Cache L1 : 32k I-cache + 32k D-cache
C h L2 : 256 k par core
Cache
L3 partagé 8 Mo on-chip, Cache inclusif : cohérence de cache onchip
core
core
core
core
SMT
732 M transistors, 1 puce de 263 mm2
8 Mo L3 shared cache
QuickPathInterconnect
Q
Memory
Link controller
Point à Point
controller
2 liens par socket CPU
1 pour la connexion à ll’autre
autre socket
2 Quickpath
3 DDR3
1 pour la connexion au chipset
Interconnect
Jusqu’à 6.4 GT/Sec dans chaque direction Channels
QuickPath Memory controller (DDR3) intégré
Bande passante
mémoire crête
25.6 GB/s
67
GPU : Graphic Processor Unit
Performance théorique GeForce 8800GTX vs Intel Core 2 Duo
3.0 GHz : 367 Gflops / 32 GFlops.
Bande passante mémoire : 86.4 GB/s / 8.4 GB/s.
P é t dans
Présents
d
tous
t
les
l PC : un marché
hé de
d masse.
Adapté au massivement parallèle (milliers de threads par
application).
pp
)
Jusqu’à récemment, uniquement programmable via des APIs
graphiques.
• Aujourd’hui, des modèles de programmation disponibles :
CUDA (Compute Unified Device Architecture).
68
Architecture de PC classique
Motherboard
CPU
System
y
Memory
y
Bus Port (PCI, AGP, PCIe)
Graphic Board
Vidéo Memory
GPU
69
Exemple : Geforce 8800
128 Unités de calcul !
8 partitions de 16
70
Architecture Geforce 8800
Architecture de type SIMD (Single
Instruction Multiple Data).
Data)
Peut être vu comme une grosse unité
de calcul divisée en multiprocesseurs.
Ch
Chaque
multiprocesseurs
lti
estt composéé
de plusieurs Stream Processors.
SIMD un même programme (kernel) exécuté plusieurs fois
simultanément.
Chaque exécution = 1 thread (élément de base).
base)
Threads groupés en warps (32 threads) à l’intérieur de blocs (64 à 512
threads) ; les 32 threads du warp sont exécutées en parallèles.
Les threads dd’un
un bloc peuvent coopérer mais les blocs peuvent ss’exécuter
exécuter
indépendamment les unsdes autres.
Ces blocs sont réunis dans des grilles.
71
Dans un futur proche
72
Conclusion sur les architectures actuelles
Vers une augmentation
V
t ti du
d nombre
b de
d coeurs plutôt
l tôt que de
d la
l
fréquence d’horloge : problème de finesse de gravure, d’échauffement .
Programmation de plus en plus complexe :
Nécessité d’une bonne connaissance des architectures,
notamment au niveau de la mémoire
Plus de croissance des performances au niveau du coeur
parallélisation obligatoire pour un gain de performance.
Nécessité d’élaborer des algorithmes et des programmes capables
d’exploiter un grand nombre de processeurs.
processeurs
Nécessité d’exploiter le parallélisme aux # niveaux de hardware
Programmation sur des architectures hybrides avec différents
types de processeurs.
Exploitation des performances des processeurs graphiques : produire
un code extrêmement parallélisé, capable dd’utiliser
utiliser TOUS les
"threads", sinon on atteint que quelques % de la puissance disponible.
73
Réseau de communication
• Les processeurs ou les machines peuvent être reliés de
différentes façons
• Les caractéristiques importantes :
– La
L bande
b d passante
t (bandwidth)
(b d idth) estt le
l débit maximal
i l
– Latence : temps d’initialisation de la communication
– Distance maximum entre deux noeuds
• Différents types d’interconnexion:
–
–
–
–
Bus
Switch crossbar
Hypercube
Tree
74
Réseau de communication
Bus
Hypercube
Chaque proc est le
Sommet d’un
d un hypercube
de dim n
Arbre
Réseau à
plusieurs
étages
75
Réseau de communication
exemple de la réduction d’une variable
Calcul de X1 + X2 + X3 + …+ X8 sur une
architecture hypercube
• Implémentation naïve
n communications
X1+ X2 +…+X8
X8
cpu8
X7
X1+X2+X3
…
X3
X1+X2
X2
X1
cpu2
cpu1
76
Réduction dd’une
une variable
X4
1
X8
X7
2
1
X6
1
X3
2
X2
3
1
X1
X5
Log n étapes de communications
77
Modèles de programmation parallèle
78
Modèles de programmation parallèle
• Modèle à mémoire partagée
• « threads »
• Passage de messages
• Parallélisme de données
• Modèle hybride
Ces modèles existent au dessus du hardware et des
architectures mémoire et peuvent théoriquement être
implémentés sur n’importe quel hardware.
Les + implémentés : MPI (passage de messages) sur
architectures distribuées et hybrides (mais souvent aussi
sur architecture à mémoire partagée)
OpenMP (mémoire partagée) sur architecture à mémoire
ppartagée
g
79
Modèle à mémoire partagée
• Les tâches partagent un espace d’adressage commun,
dans lequel elles lisent et écrivent de façon asynchrone
• # mécanismes tels locks (verrous), sémaphores sont
utilisés pour l’accès à la mémoire partagée
• L’avantage du point de vue de l’utilisateur est qu’il n’y
a pas la notion de « propriétaire d’une donnée », il n’a
pas à décrire explicitement les communications
• Mais attention, la localité des données a une impacte
sur les
l performances
f
mais
i n’est
’ pas facile
f il à gérer
é
80
Threads
• Dans ce modèle,
modèle un unique processus peut initier
plusieurs tâches concurrentes, appelées threads
• Chaque thread a sa mémoire locale, mais partage
également la mémoire globale du processus
• Les threads communiquent
q
entre elles via cette
mémoire globale
g
principal
p
p est pprésent durant toute
• Le pprogramme
l’exécution, alors qu’une thread peut apparaître
puis disparaître et réapparaître.
81
Threads
Exécutable
x=2
Zone séquentielle
y=3
call sub1
Zone parallèle
call sub2
Initialisation de 2 threads
A(i)=x*fn(i)
call
ll sub3
b3
print A
Un exemple :
T1 T2
tem
mps
T3
Implémentation des threads :
• une librairie de routines qui peuvent être appelées dans le code source //
• des
d directives
di i
de
d compilation
il i
82
Modèle Passage de Messages
• Un ensemble de tâches qui utilisent leur mémoire
locale, plusieurs de ces tâches pouvant être sur une
même ou sur plusieurs machines
• Ces tâches échangent des données via des
communications
i i
de
d messages (send/receive)
( d/
i )
• Un transfert de données requiert en général une
coopération
é ti entre
t les
l 2 tâches,
tâ h les
l opérations
é ti
sontt
spécifiées par le programmeur
83
Modèle Passage
g de Messages
g
Machine 1
Machine 2
T ki
Task
Task j
Send (x)
Receive(x)
A un envoi doit correspondre une réception
Le programmeur doit spécifier les opérations de façon explicite
Implémentation : librairie de routines auxquelles le programmeur
peut faire appel dans son code
Ex : PVM (le standard jusqu’en 92), MPI (le standard actuel)
Versions domaine public : MPICH, LAM/MPI, OpenMPI, MVAPICH
84
Modèle passage de messages - MPI
• Si les
l communications
i i
sont entre 2 tâches
â h
sur 2 machines #, elles passent par le réseau
• Si les communications sont entre 2 tâches
sur une même machine, les implémentations
de MPI choisissent en général de les faire
passer par la mémoire partagée (copies
mémoire) pour des raisons de performance
85
Modèle « Data Parallel »
•
•
•
Un ensemble de tâches travaillent
collectivement sur une même
structure de données, chaque tâche
effectue la même opération mais sur
une partie différente de la structure
Sur machine à mémoire partagée,
peuvent accéder à la Do i=1,10 Do i=11,20 Do i=21,30 Do i=31,40
toutes les tâches p
structure de données via la mémoire A(i)=fn(i) A(i)=fn(i) A(i)=fn(i) A(i)=fn(i)
Enddo
Enddo
Enddo
Enddo
globale
Sur machine à mémoire distribuée, la
structure
t t
estt «éclatée»
é l té en # blocs
bl
quii
sont stockés dans la mémoire locale
de chaque tâche.
86
Modèle « Data Parallel »
• Un programme data parallel est souvent
écrit en utilisant des constructions
spécifiques dites « data parallel », et/ou des
p
directives de compilation
• Ex :
– Fortan90
Fortan90, Fortan95
– HPF (High Performance Fortran) : extension
du fortran90 pour le parallélisme de données
87
Modèles hybrides
• Ils sont basés sur l’utilisation combinée de
pplusieurs des modèles précédents
p
– Typiquement la combinaison du modèle
Message
g Passingg avec MPI et du modèle des
threads ou du modèle mémoire partagée avec
OpenMP.
Ce modèle peut être intéressant sur une
architecture type cluster de multiprocesseurs.
88
Modèle PGAS (Partitioned Global
Address Space)
Idéalement, un modèle parallèle doit fournir :
la performance
La localité des données
La simplicité de programmation
La facilité de référencement des données
Modèle PGAS :
un espace d’adressage
d’ d
global
l b l
le process n’a “d’affinité” qu’avec les composantes locales de structures
distribuées.
Le compilateur introduit des communications pour résoudre les références
distantes
des communications “one-sided” (pas d’intervention du process distant)
le support pour des structures de données distribuées
89
Ex : UPC (Unified Parallel C)
Du point de vue utilisateur :
Un ensemble de thread opérant dans un espace
d’adressage global, logiquement partitionné entre les
threads.
Chaque thread a une affinité avec une portion de l’espace
d’adressage globalement partagé.
Ch
Chaque
thread
h d a également
é l
un espace privé.
i é
Th d 0
Thread
Th d 1 Thread
Thread
Th d 2
Th d 3
Thread
partagé
Privé 0
Privé 1
Privé 2
Privé 3
90
Conception de programmes
parallèles
91
Coût dd’un
un programme parallèle
• Loi d’Amdhal
Speedup max ?
Soit S la fraction séquentielle du programme,
programme
P la fraction qui peut être parallélisée P=1-S
N le nombre de processeurs
Soit t le temps d’exécution en séquentiel (temps du prog. // sur 1 proc)
En théorie, le temps minimum en parallèle est (S + (1-S)/N)*t
Speedup maximum =
1
1-S + S
N
Speedup
linéaire
92
Coût dd’un
un programme parallèle
Mais en pratique les algorithmes des versions séquentielle et
parallèle peuvent être différents
L’accélération parallèle peut être calculée à partir
• du temps d’exécution du prog. // sur 1 proc.
• d’un
d’ ttemps d’exécution
d’ é ti uniprocesseur
i
de
d référence
éfé
De plus, le calcul du coût théorique (par analyse de complexité)
peut difficilement prendre en compte les spécificités des
architectures
D’où
D
où parfois, en pratique, des accélérations surlinéaires :
• Sur des architectures hybrides distribuée/partagée lorsque la
taille du problème excède la capacité de la mémoire locale
• Lorsque
Lorsq e l’algorithme parallèle est plus
pl s efficace
93
Coût dd’un
un programme parallèle
Influence du coût de communication sur l’accélération
Supposons la fraction séquentielle S=0
aalors
o s Tséq = Tcalcul
Tpar
Tséq
Tpar
Tcomm
Tcalcul
Tcalcul
=
+ Tcomm
N
=
Tcalcul
Tcalcul
+ Tcomm
N
=
N
1 + N Tcomm
Tcalcul
Est un paramètre important
94
Conception de programmes
parallèles
• Vérifier dd’abord
abord si un code // nn’est
est pas déjà disponible
pour ce problème, dans une bibliothèque //
Sinon :
• Bien comprendre le problème à résoudre en parallèle
parallèle.
Si on démarre à partir d’un code séquentiel, il faut bien
comprendre le code
• Déterminer si le problème peut réellement être parallélisé
• Identifier les parties coûteuses en temps de calcul
• Identifier les opérations qui interdisent la parallélisation
(par ex dépendance de données)
• Rechercher des algorithmes éventuellement mieux adaptés
à la parallélisation, événtuellement restructurer le code
95
Décomposition
p
ou Partitionnement
• Une des premières étapes est de décomposer le
problème
blè en parties
i approximativement
i i
de
d même
ê taille
ill
qui seront distribuées sur différentes tâches
• 2 méthodes
éth d pour dé
décomposer ett affecter
ff t à ≠ tâches
tâ h // :
Décomposition de domaine : les données associées au pb
sont décomposées
Décomposition fonctionnelle : le problème est
décomposé en fonction du travail à effectuer,
effectuer chaque
tâche exécute une portion de la totalité du travail.
Le choix de la méthode est dicté par ll’application
application.
96
Décomposition de domaine
• Ce modèle sera d’autant plus efficace que le rapport :
(taille des sous-domaine/taille des frontières) est grand
( l l / communications)
(calculs
i i )
1D
block
1D
cyclic
2D
Bloc,*
2D
97
Décomposition fonctionnelle
• Ce modèle est adaptée
p aux problèmes
p
qui
q
peuvent se découper naturellement en # tâches
Ensemble d’instructions
du problème
Tâche 1
Tâche 2
Tâche 3
Tâche 4
98
Communications
2 cas de
d fi
figure :
• Les tâches travaillent indépendamment les unes des autres, avec très
peu de communications entre tâches : le problème est dit
«embarrassingly parallel »
• Les tâches ont des données à échanger,
D un surcoût si les comm.
comm ne peuvent être masquées par les calculs
D des synchronisations entre tâches
Temps de communication de B octets = α + B β
Où α temps de latence et β temps de transfert d’1 octet
Trop de petites communications D domination des temps de latence
(en général α >> β)
La solution : concaténer les petits messages pour envoyer de plus
gros paquets et améliorer ainsi les performances
Définir les structures de communication et les algos appropriés
99
Communications
synchrones/asynchrones
• Les communications synchrones requièrent un
« handshake » entre tâches qui échangent les
données. Elles sont dites bloquantes.
• Les comm. asynchrones
y
sont non bloquantes.
q
Une tâche ne sera pas bloquée sur
l’instruction de comm,, elle ppeut continuer à
traiter les instructions suivantes pendant que
la comm. s’effectue.
100
Communications
point à point/collectives
• Point à point – une tâche agit en tant que
émetteur/producteur de données, et l’autre en
tant que récepteur/consommateur.
• Collective – met en jjeu le partage
p
g de données
entre plusieurs tâches (plus que 2), qui sont
p
comme étant membres d’un
souvent spécifiées
groupe. Des exemples classiques : broadcast,
ggather, reduction, scatter
101
Communications collectives
102
Répartition
p
de la charge
g
• Notion de load balancing : consiste à distribuer le travail de
façon à ce que toutes les tâches soient occupées tout le temps
• Quelques règles pour s’en approcher :
– Pour des opérations sur des tableaux où toutes les tâches
effectuent un travail similaire
Distribuer des ens. de données de façons uniformes
– Pour des itérations de boucles où les itérations sont
similaires,
Répartir de façon uniforme les itérations entre tâches
– Lorsque le travail de chaque tâche est variable et
imprédictible
p
dynamique
y
q du travail
Utiliser une répartition
103
G
Granularité
l ité
• Grain fin
Peu de calcul entre les communications
F ilit le
Facilite
l load
l d balancing
b l i
Risque de surcoût dû aux comm. et aux synchros
• Gros
G grain
i
Beaucoup de calculs entre 2 comm.
Plus simple d’améliorer les performances
Plus difficile d’améliorer le load balancing
104
Entrées / Sorties parallèles
• Des systèmes de fichiers // : GPFS, PVFS , Lustre, CxFS, GFS,
P FS
PanFS
• Une couche logicielle s’interfaçant entre le programme parallèle
et le système de fichiers : BPFS (Basic Parallel File System)
• Une interface de programmation d’entrées/sorties // dans MPI 2
• Travailler sur des zones partagées ?
– Confiner les comms au niveau de la tâche 1 puis utiliser des comms
parallèles pour propager les données aux autres tâches
– Sur les architectures distribuées, souvent plus efficace de travailler dans
des zones locales aux nœuds (scratch local au nœud)
– Créer
C é des
d noms de
d fichiers
fi hi uniques
i
pour chaque
h
tâche.
â h
105
Coût d’une application //
en temps humain
h
i
• En ggénéral,, l’application
pp
pparallèle est pplus complexe
p
que l’appli. séquentielle correspondante.
p des # étapes
p du
• Son coût se mesure en tenant compte
cycle de développement
–
–
–
–
–
Conception
Codage
Déboguage
T i
Tuning
Maintenance
106
Portabilité
• Des standards de programmation : MPI, HPF,
Threads Posix, OpenMP
p
• Les systèmes et les hardware peuvent jouer sur la
portabilité
Scalabilité
• Généralement, des limites intrinsèques à
l’algorithme
• Le hardware joue un rôle important (débit bus
mémoire-cpu sur SMP, débit réseau de comm., taille
mémoire,
é i vitesse
it
d’horloge
d’h l
du
d proc., …))
107
Ressources nécessaires au code //
par rapport au code séq.
• + de cpus
• Souvent + de mémoire pour la duplication
des données
• Sur des exécutions de courte durée,
durée la
version // peut être plus lente que la version
séq (surcoût associé à la mise en œuvre de
séq.
l’environnement //)
108
Exemple 1
f (i j)
fn(i,j)
do j=1,n
do i=1,n
( ,j) = fn(i,j)
( ,j)
A(i,j)
end do
end do
Solution parallèle:
do j=mystart,myend
do i=1,n
A(i,j) = fn(i,j)
end do
end do
Problème « Embarrasingly // »
Distribution par bloc-colonne
(J fortran, données rangées par colonne)
tâche1 tâche2
… tâche n
109
Exemple 1 (suite)
Implémentation 1 (modèle SPMD) :
if (I am a master)
Initialize the array
sendd eachh worker
k its
it j_first,
j fi t j_end
j d
send each worker its portion of the array
Else receive from master myj_first, myj_end
do j=myj
j=myj_first,myj_end
first myj end
do i=1,n
Répartition statique du travail
A(i,j) = fn(i,j)
end do
Efficace si toutes les tâches ont la même
end do
quantité de travail et les processeurs sont
send master results
de même rapidité et sont identiquement
end if
chargés
110
Exemple 1 (suite)
Implémentation 2 (schéma « pool de tâches ») :
if (I am a master)
do until no more jobs
send to worker next job
receive results from the worker
end do
tell worker no more jobs
else if i am worker
do until no more jobs
Répartition dynamique du travail
receive from master next job
Granularité très fine
calculate A(i,j) = fn(i,j)
D plus
l de
d communications
i i
send results to master
D La portion de travail « optimale »
end do
dépend du problème
end if
111
Références
• http://computing.llnl.gov
• http://www.realworldtech.com
htt //
l
ldt h
• http://www.ncsa.illinois.edu/UserInfo/Traini
ng ncsa (national center for supercomputing)
• http://www.irisa.fr/ORAP (organisation
associative pour le parallélisme)
• http://calcul.math.cnrs.fr
• http://www.idris.fr
• http://www.cines.fr
htt //
i
f
112
Téléchargement