Calcul Réparti et Grid Computing - Patrick R. Amestoy

Transcription

Calcul Réparti et Grid Computing - Patrick R. Amestoy
Calcul Réparti et Grid Computing
Patrick Amestoy et Michel Daydé (ENSEEIHT-IRIT)
préparé en collaboration avec
J.-Y. L’Excellent (INRIA/LIP-ENS Lyon)
2015-2016
1 / 396
Outline
Introduction
Introduction aux calculateurs haute-performance
Evolutions architecturales
Programmation
Conclusion
2 / 396
Outline
Introduction
Introduction aux calculateurs haute-performance
Evolutions architecturales
Programmation
Conclusion
3 / 396
I
Intérêts du Calcul Haute-Performance
I
I
I
I
I
Applications temps-critique
Cas de calcul plus gros
Diminution du temps de réponse
Minimisation des coûts de calcul
Difficultés
I
Accès aux données : hiérarchie mémoire complexe
→ Exploiter la localité des références aux données
I
Identification et gestion du parallélisme dans une application
→ Approche algorithmique
4 / 396
Systèmes parallèles:
I
I
I
I
I
I
I
Les machines les plus puissantes sont à haut degré de
parallélisme
Le rapport prix / performance est attractif
Plus que quelques constructeurs dans la course
Systèmes plus stables
Logiciels applicatifs et librairies disponibles
Exploitation industrielle et commerciale : plus uniquement
laboratoires de recherche
Mais: travail algorithmique important et validation/maintenance
difficile.
Nouvelles évolutions:
I
1 core per chip → multi-core chips
I
Graphycal Processing units (GPU)
I
supercomputing → métacomputing (“grid computing”)
5 / 396
Classes de calculateurs
I
Serveurs de calcul :
I
I
I
I
Calculateurs plus spécifiques :
I
I
I
I
I
Utilisables sur une large gamme d’applications
Multiprogrammation et temps partagé
Stations de travail, serveurs départementaux, centre de calcul
Efficaces sur une classe plus limitée de problèmes (haut degré de
parallélisme)
A cause de leur architecture ou de limitations du logiciel
Par exemple architectures massivement parallèles (MPP, clusters
de PC,.....)
Gains importants possibles avec rapport coût-performance
intéressant
Calculateurs spécialisés :
I
I
I
I
Résolution d’un problème (image processing, crash test, . . . )
Hardware et logiciels conçus pour cette application-cible
Gains très importants possibles avec un rapport coût-performance
très intéressant
Par exemple, la machine MDGRAPE-3 (dynamique moléculaire)
installée au Japon atteint 1 PFlop/s !
6 / 396
Besoins dans le domaine du calcul scientifique
Science traditionnelle
1. Construire une théorie, puis effectuer des expériences ou construire un
système.
I
I
I
I
trop difficile (ex: souffleries de grandes tailles)
trop cher (fabriquer un avion juste pour quelques
expérimentations)
trop lent (attente de l’évolution du climat / de l’univers)
trop dangereux (armes, médicaments, expérimentations sur le
climat)
Calcul scientifique
I
simuler le comportement de systèmes complexes grâce à la simulation
numérique.
I
lois physiques + algorithmes numériques + calculateurs HPC
7 / 396
Exemples dans le domaine du calcul scientifique
I
Contraintes de durée: prévision du climat
8 / 396
Quelques exemples dans le domaine du calcul scientifique
I
Cost constraints: wind tunnels, crash simulation, . . .
9 / 396
Scale Constraints
I
large scale: climate modelling, pollution, astrophysics
I
tiny scale: combustion, quantum chemistry
10 / 396
Pourquoi des traitements parallèles ?
I
Besoins de calcul non satisfaits dans beaucoup de disciplines
(pour résoudre des problèmes significatifs)
I
Performance uniprocesseur proche des limites physiques
Temps de cycle 0.5 nanoseconde (fréq: 2GH)
↔ 8 GFlop/s (avec 4 opérations flottantes / cycle)
I
Calculateur 40 TFlop/s ⇒ 5000 coeurs
→calculateurs massivement parallèles
I
Pas parce que c’est le plus simple mais parce que c’est nécessaire
Puissance actuelle (cf http://www.top500.org):
Juin 2010, Cray XT5, Oak Ridge Natl Lab, 1.7Pflops,
300Tbytes, 224K coeurs
Juin 2013, TH-IVB cluster, NUDT (Chine), 33.8Pflops,
1PetaByte, 3M coeurs
11 / 396
Quelques unités pour le calcul haute performance
Vitesse
Megaflop/s 106 opérations / seconde
Gigaflop/s
109 opérations / seconde
Teraflop/s
1012 opérations / seconde
Petaflop/s 1015 opérations / seconde
Exaflop/s
1018 opérations / seconde
Mémoire
1 MB / 1 Mo 1 Megabyte
106 octets
1 GB / 1 Go
1 Gigabyte
109 octets
1 TB / 1 To
1 Terabyte
1012 octets
1 PB / 1 Po
1 Petabyte
1015 octets
1 EB / 1 Eo
1 Exabyte
1018 octets
Origines grecques des préfixes : kilo (mille); Mega (grand); Giga
(géant); Tera (monstre); Peta (cinq); Exa (six)
1
1
1
1
1
MFlop/s
GFlop/s
TFlop/s
PFlop/s
EFlop/s
1
1
1
1
1
12 / 396
Mesures de performance
I
I
Nombre d’opérations flottantes par seconde (pas MIPS)
Performance crête :
I
I
I
I
Ce qui figure sur la publicité des constructeurs
Suppose que toutes les unités de traitement sont actives
On est sûr de ne pas aller plus vite :
#unités fonctionnelles
Performance crête =
clock (sec.)
Performance réelle :
I
Habituellement très inférieure à la précédente
Malheureusement
13 / 396
Rapport (Performance réelle / performance de crête) souvent bas !!
Soit P un programme :
1. Processeur séquentiel:
I
I
1 unité scalaire (1 GFlop/s)
Temps d’exécution de P : 100 s
2. Machine parallèle à 100 processeurs:
I
I
Chaque processor: 1 GFlop/s
Performance crête: 100 GFlop/s
3. Si P : code séquentiel (10%) + code parallélisé (90%)
I
I
4.
Temps d’exécution de P : 0.9 + 10 = 10.9 s
Performance réelle : 9.2 GFlop/s
Performance réelle = 0.1
Performance de crête
14 / 396
Loi d’Amdahl
I
fs fraction d’une application qui ne peut pas être parallélisée
fp = 1 − fs fraction du code parallélisé
N: nombre de processeurs
I
Loi d’Amdahl:
f
tN ≥ ( Np + fs )t1 ≥ fs t1
Speed-up: S =
t1
tN
≤
1
f
fs + Np
≤
1
fs
Sequential
t∞
= fs t1
Parallel
t3
t2
t1
15 / 396
Calculateur
Intel WoodCrest (1 core, 3GHz)
HP ProLiant (1 core, 3.8GHz)
HP ProLiant (1 core, 3.8GHz)
IBM eServer(1.9GHz, Power5)
IBM eServer(1.9GHz, Power5)
Fujitsu Intel Xeon (3.2GHz)
Fujitsu Intel Xeon (3.2GHz)
SGI Altix (1.5GHz Itanium2)
NEC SX-8 (2 GHz)
Cray T932
Hitachi S-3800/480
procs
1
1
2
1
8
1
2
1
1
32
4
LINPACK
n = 100
3018
1852
1776
1679
1659
2177
1129 (1 proc.)
408 (1 proc.)
LINPACK
n = 1000
6542
4851
8197
5872
34570
3148
5151
5400
14960
29360
20640
Perf.
crête
12000
7400
14800
7600
60800
12800
6400
6000
16000
57600
32000
Table : Performance (MFlop/s) sur la résolution d’un système d’équations
linéaires (d’après LINPACK Benchmark Dongarra [07])
16 / 396
Machine
PFlop/s computer
TFlop/s computer
CM2 64K
CRAY-YMP-8
ALLIANT FX/80
SUN 4/60
VAX 11/780
IBM AT
APPLE MAC
Problème de
petite taille
2 secondes
30 minutes
4 heures
5 jours
1 mois
9 mois
9 ans
23 ans
Problème de
grande taille
36 secondes
10 heures
1 an
10 ans
250 ans
1500 ans
14,000 ans
170,000 ans
450,000 ans
Table : Vitesse de certains calculateurs sur un problème Grand Challenge en
1995 (d’après J.J. Dongarra)
17 / 396
Machine
PFlop/s computer
TFlop/s computer
CM2 64K
CRAY-YMP-8
ALLIANT FX/80
SUN 4/60
VAX 11/780
IBM AT
APPLE MAC
Problème de
petite taille
2 secondes
30 minutes
4 heures
5 jours
1 mois
9 mois
9 ans
23 ans
Problème de
grande taille
36 secondes
10 heures
1 an
10 ans
250 ans
1500 ans
14,000 ans
170,000 ans
450,000 ans
Table : Vitesse de certains calculateurs sur un problème Grand Challenge en
1995 (d’après J.J. Dongarra)
Depuis, les problèmes “Grand Challenge” ont grossi !
18 / 396
Outline
Introduction
Introduction aux calculateurs haute-performance
Evolutions architecturales
Programmation
Conclusion
19 / 396
Evolutions architecturales: historique
I
I
Pour 1,000 $ : calculateur personnel plus performant, avec plus
de mémoire et plus de disque qu’un calculateur des années 70
avec 1,000,000 $
technologie et conception !
Durant les 25 premières années de l’informatique progrès :
technologie et architecture
Depuis les années 70 :
I
I
I
conception basée sur les circuits intégrés
performance : +25-30% par an pour les “mainframes” et minis
qui dominaient l’industrie
Depuis la fin des années 70 : émergence du microprocesseur
I
I
I
meilleure exploitation des avancées dans l’intégration que pour les
mainframes et les minis (intégration moindre)
progression et avantage de coût (production de masse) : de plus
en plus de machines sont basées sur les microprocesseurs
possibilité de pourcentage d’amélioration plus rapide = 35% par
an
20 / 396
Evolutions architecturales: historique
I
Deux changements sur le marché facilitent l’introduction de
nouvelles architectures :
1. utilisation décroissante de l’assembleur (compatibilité binaire
moins importante)
2. systèmes d’exploitation standards, indépendants des architectures
(e.g. UNIX)
⇒ développement d’un nouvel ensemble d’architectures : RISC
à partir de 85
I
I
performance : + 50% par an !!!
Conséquences :
I
plus de puissance :
I
I
I
Performance d’un PC > CRAY C90 (95)
Prix très infèrieur
Domination des microprocesseurs
I
I
I
I
PC, stations de travail
Minis remplacés par des serveurs à base de microprocesseurs
Mainframes remplacés par des multiprocesseurs à faible nombre
de processeurs RISC (SMP)
Supercalculateurs à base de processeurs RISC (essentiellement
MPP)
21 / 396
Moore’s law
I
I
I
Gordon Moore (co-fondateur d’Intel) a prédit en 1965 que la
densité en transitors des circuits intégrés doublerait tous les 24
mois.
A aussi servi de but à atteindre pour les fabriquants.
A été déformé:
I
I
24 → 18 mois
nombre de transistors → performance
22 / 396
Comment accroı̂tre la vitesse de calcul ?
I
Accélérer la fréquence avec des technologies plus rapides
On atteint les limites:
I
I
I
I
Conception des puces
Consommation électrique et chaleur dissipée
Refroidissement ⇒ problème d’espace
On peut encore miniaturiser, mais:
I
I
I
pas indéfiniment
résistance des conducteurs (R = ρ×l
s ) augmente et ..
la résistance est responsable de la dissipation d’énergie (effet
Joule).
effets de capacités difficiles à maı̂triser
Remarque: 0.5 nanoseconde = temps pour qu’un signal parcourt
15 cm de cable
I
Temps de cycle 0.5 nanosecond ↔ 8 GFlop/s (avec 4 opérations
flottantes par cycle)
23 / 396
Seule solution: le parallélisme
I
I
parallélisme: exécution simultanée de plusieurs instructions à
l’intérieur d’un programme
A l’intérieur d’un processeur :
I
I
I
micro-instructions
traitement pipeliné
recouvrement d’instructions exécutées par des unités distinctes
→ transparent pour le programmeur
(géré par le compilateur ou durant l’exécution)
I
Entre des processeurs ou cœurs distincts:
I
suites d’instructions différentes exécutées
→ synchronisations implicites (compilateur, parallélisation
automatique) ou explicites (utilisateur)
24 / 396
Unités centrales haute-performance
Concept clé: Traitement pipeliné :
I
L’exécution d’une opération (arithmétique) est décomposée en
plusieurs sous-opérations
I
Chaque sous-opération est exécutée par une unité fonctionnelle
dédiée = étage (travail à la chaine)
I
Exemple pour une opérations diadique (a ← b × c) :
T1.
T2.
T3.
T4.
T5.
Séparer mantisse et exposant
Multiplier mantisses
Additionner les exposants
Normaliser le résultat
Ajouter signe au résultat
25 / 396
Exemple pour des opérations diadiques (suite)
I
Supposition: l’opération a ← b × c s’effectue en 5 traitements
élémentaires T1,T2,. . . ,T5 d’un cycle chacun. Quel est le
nombre de cycles processeur pour la boucle suivante ?
Pour i = 1 à N
A(i) = B(i) * C(i)
Fin Pour
I
I
Traitement non pipeliné: N * 5 cycles
Traitement pipeliné (à la chaine): N + 5 cycles
I
I
I
I
I
I
1er cycle: T1(1)
2ème cycle: T1(2), T2(1)
3ème cycle: T1(3), T2(2), T3(1)
...
kème cycle: T1(k), T2(k-1), T3(k-2), T4(k-3), T5(k-4)
...
26 / 396
Impact de l’approche CRAY
L’approche CRAY (années 80) a eu un grand impact sur la
conception des supercalculateurs :
I
horloge la plus rapide possible
I
unité vectorielle pipelinée sophistiquée
I
registres vectoriels
I
mémoire très haute performance
I
multiprocesseurs à mémoire partagée
processeurs vectoriels
I
I
I
I
I
exploitent la régularité des traitements sur les éléments d’un
vecteur
traitement pipeliné
couramment utilisés sur les supercalculateurs
vectorisation par le compilateur
27 / 396
Processeurs RISC
I
Processeurs RISC : introduits sur le marché vers 1990
I
I
I
I
CISC (Complex Instruction Set Computer)
I
I
pipeline sur les opérations scalaires
performance proche de celle des processeurs vectoriels à
fréquence égale
plus efficaces sur des problèmes scalaires
Efficacité par un meilleur encodage des instructions
RISC (Reduced Instruction Set Computer)
I
I
Concept étudié fin des années 70
Décroı̂tre le nombre de cycles par instruction à 1
Jeu d’instructions simple
↓
Hardware simplifié
↓
Temps de cycle plus faible
28 / 396
I
Idées maı̂tresses dans la conception des RISC :
I
I
I
I
I
I
I
Instructions décodées en 1 cycle
Uniquement l’essentiel réalisé au niveau du hardware
Interface load/store avec la mémoire
Utilise intensivement le principe du pipeline pour obtenir un
résultat par cycle même pour les opérations complexes
Hiérarchie mémoire haute-performance
Format d’instructions simple
RISC super scalaires ou superpipelines: plusieurs unités
fonctionnelles
29 / 396
Architectures multi-cœurs
Constats
I
La quantité de composants / puce va continuer à augmenter
I
La fréquence ne peut plus augmenter beaucoup
(chaleur/refroidissement)
I
Il est difficile de trouver suffisamment de parallélisme dans le flot
d’instructions d’un processus
Multi-cœurs
I
plusieurs cœurs à l’intérieur d’un même processeur
I
vus comme plusieurs processeurs logiques par l’utilisateur
I
Mais: multi-threading nécessaire au niveau de l’application
30 / 396
Processeur Cell
I
La PS3 est basée sur un processeur
Cell (Sony,Toshiba,IBM)
I
1 Cell= un Power PC + 8 SPE
(Synergetic Process. Elem.)
I
1 SPE = processeur vectoriel SIMD
+ DMA = 25.6 GFlop/s
I
204 GFlop/s de performance crête
en arithmétique 32 bits
(14.6 GFlop/s en 64 bits)
I
D’où regain d’intérêt pour le calcul en 32 bits
I
I
I
Mélange d’arithmétiques simple et double précision (voir [12])
Typiquement: 32-bit pour le gros des calculs, 64 bits pour
améliorer la précision
Pas seulement sur processeur Cell
Example of mixed-precision arithmetic
I
I
Solve Ax = b, A sparse with the sparse direct solver MUMPS
Compare single precision + iterative refinement to double
precision run (Number of steps of iterative refinements indicated
on Figure).
Speed-up obtained wrt double precision
(Results from A. Buttari et.al., 2007)
32 / 396
Année
1955-65
1965-75
1975-85
1985-1995
1995-2005
2008 -
Calculateur
CDC 6600
CDC 7600
IBM 370/195
ILLIAC IV
CRAY-1, XMP, CRAY 2
CDC CYBER 205
FUJITSU VP400
NEC SX-2
CRAY-YMP, C90
ETA-10
NEC SX-3
FUJITSU VP2600
CRAY T3E
INTEL
IBM SP
HP
NEC
IBM Blue Gene
Roadrunner
MFlop/s
1-10
10 - 100
100 - 1000
1000 - 100,000
1.2 TFlop/s
1.8 TFlop/s
16 TFlop/s
20 TFlop/s
40 TFlop/s
180 TFlop/s
1 PFlop/s
Table : Evolutions des performances par décennie
Problèmes
I
I
On est souvent (en pratique) à 10% de la performance crête
Processeurs plus rapides → accès aux données plus rapide :
I
I
organisation mémoire,
communication inter-processeurs
I
Hardware plus complexe : pipe, technologie, réseau, . . .
I
Logiciel plus complexe : compilateur, système d’exploitation,
langages de programmation, gestion du parallélisme,
. . . applications
Il devient plus difficile de programmer efficacement
34 / 396
Problèmes de débit mémoire
I
L’accès aux données est un problème crucial dans les
calculateurs modernes
I
Accroı̂ssement de la vitesse de calcul sans accroı̂tre le débit
mémoire → goulet d’étranglement
MFlop/s plus faciles que MB/s pour débit mémoire
I
Temps de cyle processeurs → 2 GHz (.5 ns)
Temps de cycle mémoire
→ ≈ 20 ns SRAM
≈ 50 ns DRAM
35 / 396
Comment obtenir de hauts débits mémoire ?
I
Plusieurs chemins d’accès entre mémoire et processeurs
I
CRAY XMP et YMP :
I
I
I
NEC SX :
I
I
2 vector load + 1 vector store + 1 I/O
utilisés pour accéder des vecteurs distincts
chemins d’accès multiples peuvent être aussi utilisés pour charger
un vecteur
(améliore le débit, mais pas la latence !)
I
Plusieurs modules mémoire accédés simultanément (entrelaçage)
I
Accès mémoire pipelinés
I
Mémoire organisée hiérarchiquement
La façon d’accéder aux données peut affecter la performance:
I
I
I
I
Minimiser les défauts de cache
Minimiser la pagination mémoire
Localité: améliorer le rapport références à des mémoires locales/
références à des mémoires à distance
36 / 396
Size
Average access time (# cycles) hit/miss
Registers
1 − 128 KB
256 KB − 16 MB
1 − 10 GB
Cache level #1
Cache level #2
Main memory
Remote memory
Disks
<1
1−2 / 8 − 66
6−15 / 30 − 200
10 − 100
500 − 5000
700,000 / 6,000,000
Figure : Exemple de hiérarchie mémoire.
37 / 396
Conception mémoire pour nombre important de
processeurs ?
Comment 500 processeurs peuvent-ils avoir accès à des données
rangées dans une mémoire partagée (technologie, interconnexion, prix
?)
→ Solution à coût raisonnable : mémoire physiquement distribuée
(chaque processeur a sa propre mémoire locale)
I 2 solutions :
I
I
I
Scalibité impose :
I
I
I
mémoires locales globalement adressables : Calulateurs à
mémoire partagée virtuelle
transferts explicites des données entre processeurs avec échanges
de messages
augmentation linéaire débit mémoire / vitesse du processeur
augmentation du débit des communications / nombre de
processeurs
Rapport coût/performance → mémoire distribuée et bon rapport
coût/performance sur les processeurs
38 / 396
Architecture des multiprocesseurs
Nombre élevé de processeurs → mémoire physiquement distribuée
Organisation
logique
Partagée
Distribuée
Organisation physique
Partagée (32 procs max)
Distribuée
multiprocesseurs
espace d’adressage global
à mémoire partagée
(hard/soft) au dessus de messages
mémoire partagée virtuelle
émulation de messages
échange de messages
(buffers)
Table : Organisation des processeurs
Remarque: standards de programmation
Organisation logique partagée:
Organisation logique distribuée:
threads, OpenMP
PVM, MPI, sockets
39 / 396
Remarques
Mémoire physiquement partagée
Temps d’accès uniforme à toute la mémoire
Mémoire physiquement distribuée
Temps d’accès dépend de la localisation de la donnée
Mémoire logiquement partagée
I
Espace d’adressage unique
I
Communications implicites via la mémoire partagée
Mémoire logiquement distribuée
I
Plusieurs espaces d’adressage privés
I
Communications explicites (messages)
Terminologie
Architecture SMP (Symmetric Multi Processor)
I
Mémoire partagée (physiquement et logiquement) et temps
d’accès uniforme à la mémoire
I
Similaire du point de vue applicatif aux architectures
multi-cœurs (1 cœur = 1 processeur logique)
I
Mais communications bcp plus rapides dans les multi-cœurs
(latence < 3ns, bande passantee > 20 GB/s) que dans les SMP
(latence ≈ 60ns, bande passantee ≈ 2 GB/s)
Architecture NUMA (Non Uniform Memory Access)
I
Mémoire physiquement distribuée et logiquement partagée (plus
facile d’augmenter le nombre de procs qu’en SMP)
I
Temps d’accès dépend de la localité (accès locaux plus rapides ;
hardware assure cohérence des caches (ccNUMA))
41 / 396
Outline
Introduction
Introduction aux calculateurs haute-performance
Evolutions architecturales
Programmation
Conclusion
42 / 396
Classification de Flynn
I
S.I.S.D. : Single Instruction Single Data stream
I
I
I
I
architecture monoprocesseur
calculateur von Neumann conventionnel
exemples : SUN, PC
S.I.M.D. : Single Instruction Multiple Data stream
I
I
I
I
I
processeurs exécutent de façon synchrone la même instruction sur
des données différentes (e.g. éléments d’un vecteur, d’une
matrice, d’une image)
une unité de contrôle diffuse les instructions
processeurs identiques
Exemples : CM-2, DAP, MasPar,. . .
plus récemment: chacun des 8 SPE du processeur CELL se
comporte comme un système SIMD
43 / 396
I
I
M.I.S.D. : n’existe pas
M.I.M.D. : Multiple Instructions Multiple Data stream
I
I
I
processeurs exécutent de façon asynchrone des instructions
différentes sur des données différentes
processeurs éventuellement hétérogènes
chaque processeur a sa propre unité de contrôle
44 / 396
Modes de programmation SIMD et MIMD
I
Avantages du SIMD :
I
I
I
I
I
Facilité de programmation et de débogage
Processeurs synchronisés → coûts de synchronisation minimaux
Une seule copie du programme
Décodage des instructions simple
Avantages du MIMD :
I
I
Plus flexible, beaucoup plus général
Exemples:
I
I
mémoire partagée: OpenMP, threads POSIX
mémoire distribuée: PVM, MPI (depuis C/C++/Fortran)
45 / 396
Outline
Introduction
Introduction aux calculateurs haute-performance
Evolutions architecturales
Programmation
Conclusion
46 / 396
Evolutions du Calcul Haute-Performance
I
Mémoire virtuellement partagée :
I
I
I
Clusters de machines
I
I
Souvent à base de noeuds multicoeurs avec ou sans accélérateurs
Programmation parallèle hybride capable d’exploiter : mémoire
partagée et multicoeurs, transfert de message, data parallèle
I
I
clusters
Hiérarchie mémoire plus étendue
Efforts de définition de standards : Open MP et threads POSIX,
MPI, HPF, . . .
MPPs et clusters
I
I
I
représentent l’avenir pour le calcul haute-performance
rapport communications souvent faible par rapport aux
puissance de calcul
multiprocesseurs à mémoire partagée
intégration dans l’ensemble des moyens de calcul d’une entreprise
de plus en plus courante
47 / 396
Environnements de programmation
I
I
On n’évitera pas le calcul parallèle
Logiciels ont toujours un temps de retard / aux architectures
I
I
I
I
Système d’exploitation
Parallélisation automatique
Logiciels applicatifs et librairies scientifiques
Pour des architectures massivement parallèles :
I
I
I
I
Standard de programmation : MPI ou MPI + threads
(POSIX/OpenMP)
Langages: le plus souvent C ou Fortran
Besoins d’outils de dévelopement (débogueurs, compilateurs,
analyseurs de performance, librairies, . . . )
Développements/maintenance difficiles et difficultés d’utilisation
des outils de mise au point.
48 / 396
Pe
er
to
(SE peer
TI@
ho
me
)
Gr
id−
bas
ed
com
Ne
pu
tw
tin
ork
g
of
ws
Be
ow
ul
Clu f clus
ter
spe sters
cia w/
l in
ter
con
Pa
nec
ral
t
lel
dis
tm
e
TF
m
lop
ma
chi
nes
HPC Spectrum (d’après J.Dongarra)
Distributed Systems
Massively // Systems
- Gather (unused) resources steal cycles
- System software manages
resources
- 10% - 20% overhead is OK
- Resources drive applications
- Completion time not critical
- Time-shared - heterogeneous
- Bounded set of resources
- Apps grow to consume all cycles
- Application manages resources
- 5% overhead is maximum
- Apps drive purchase of
equipment
- Real-time constraints
- Space-shared - homogeneous
49 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
50 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
51 / 396
Introduction
I
Conception d’un supercalculateur
I
I
I
Déterminer quelles caractéristiques sont importantes (domaine
d’application)
Maximum de performance en respectant les contraintes de coût
(achat, maintenance,consommation)
Conception d’un processeur :
I
I
I
I
Jeu d’instructions
Organisation fonctionnelle et logique
Implantation (intégration, alimentation, . . . )
Exemples de contraintes fonctionnelles vs domaine d’application
I
I
I
Machine généraliste : performance équilibrée sur un large
ensemble de traitements
Calcul scientifique : arithmétique flottante performante
Gestion : base de données, transactionnel, . . .
52 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
53 / 396
Pipeline
I
Pipeline = principe du travail à la chaı̂ne
I
I
I
I
un traitement est découpé en un certain nombre de
sous-traitements réalisés par des unités différentes (étages du
pipeline)
les étages fonctionnent simultanément sur des opérandes
différents (éléments de vecteurs par exemple)
après amorçage du pipeline, on obtient un résultat par temps de
cyle de base
Processeur RISC :
I
I
Pipeline sur des opérations scalaires indépendantes :
a = b + c
d = e + f
Code exécutable plus complexe sur RISC :
do i = 1, n
a(i) = b(i) + c(i)
enddo
54 / 396
I
Code correspondant :
boucle :
I
i = 1
load b(i) dans registre #1
load c(i) dans registre #2
registre #3 = registre #1 + registre #2
store registre #3 dans a(i)
i = i + 1 et test fin de boucle
Exploitation du pipeline → déroulage de boucle
do i = 1,
a(i )
a(i+1)
a(i+2)
a(i+3)
enddo
n, 4
= b(i ) + c(i
)
= b(i+1) + c(i+1)
= b(i+2) + c(i+2)
= b(i+3) + c(i+3)
55 / 396
I
Sur processeur vectoriel :
do i = 1, n
a(i) = b(i) + c(i)
enddo
load vector b dans registre #1
load vector c dans registre #2
register #3 = register #1 + register #2
store registre #3 dans vecteur a
Stripmining : si n > nb (taille registres vectoriels)
do i = 1, n, nb
ib = min( nb, n-i+1 )
do ii = i, i + ib - 1
a(ii) = b(ii) + c(ii)
enddo
enddo
56 / 396
Problèmes dans la conception des pipelines
I
Beaucoup d’étages:
I
I
I
coût d’amorçage plus élévé
performances plus sensibles à la capacité de nourrir le pipeline
permet de réduire le temps de cycle
I
I
Moins d’étages
I
I
sous-instructions plus complexes
plus difficile de décroı̂tre le temps de cycle
57 / 396
Problèmes des dépendences de données
I
Exemple :
do i = 2, n
a(i) = a(i-1) + 1
enddo
a(i) initialisés à 1.
I
Exécution scalaire :
Etape 1 :
a(2) = a(1) + 1 = 1 + 1 = 2
Etape 2 :
a(3) = a(2) + 1 = 2 + 1 = 3
Etape 3 : a(4) = a(3) + 1 = 3 + 1 = 4
.....
58 / 396
I
Exécution vectorielle : pipeline à p étages → p éléments dans le
pipeline
Etages du pipe
------------------------------------------Temps
1
2
3
...
p
sortie
------------------------------------------------------t0
a(1)
t0 + dt
a(2)
a(1)
t0 + 2dt
a(3)
a(2)
a(1)
....
t0 + pdt
a(p+1)
a(p)
...
a(2)
a(1)
-------------------------------------------------------
D’où :
a(2) = a(1) + 1 = 1 + 1 = 2
a(3) = a(2) + 1 = 1 + 1 = 2
...
car on utilise la valeur initiale de a(2).
Résultat exécution vectorielle 6= exécution scalaire
59 / 396
Overlapping (recouvrement)
I
Utiliser des unités fonctionnelles en parallèle sur des opérations
indépendantes. Exemple:
do i = 1, n
A(i) = B(i) * C(i)
D(i) = E(i) + F(i)
enddo
Pipelined multiplier
B
A
C
E
D
F
Pipelined adder
I
Timeoverlapping = max{Startupmul , Startupadd + dt} + n × dt
Timeno overlap. = {Startupmul + n × dt} + {Startupadd + n × dt}
Avantages: parallélisme entre les unités fonctionnelles
indépendantes et plus de flops par cycle
60 / 396
Chaining (chaı̂nage)
I
I
La sortie d’une unité fonctionnelle est dirigée directement vers
l’entrée d’une autre unité fonctionnelle
Exemple :
do i = 1, n
A(i) = ( B(i) * C(i) ) + D(i)
enddo
B
Pipelined multiplier
Pipelined adder
A
C
D
I
Timechaining = Startupmul + Startupadd + n × dt
Timenochaining = {Startupmul + n × dt} + {Startupadd + n × dt}
Avantages : plus de flops par cyle, exploitation de la localité des
données, économie de stockage intermédiaire
61 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
62 / 396
Locality of references
Programs tend to reuse data and instructions recently used
I
Often program spends 90% of its time in only 10% of code.
I
Also applies - not as strongly - to data accesses :
I
temporal locality : recently accessed items are likely to be
accessed in the future
I
spatial locality : items whose addresses are near one another
tend to be referenced close together in time.
63 / 396
Concept of memory hierarchy - 1
In hardware : smaller is faster
Example :
I
On a high-performance computer using same technology
(pipelining, overlapping, . . . ) for memory:
I
I
signal propagation is a major cause of delay thus larger memories
→ more signal delay and more levels to decode addresses.
smaller memories are faster because designer can use more power
per memory cell.
64 / 396
Concept of memory hierarchy - 2
Make use of principle of locality of references
I
Data most recently used - or nearby data - are very likely to be
accessed again in the future
I
Try to have recently accessed data in the fastest memory
I
Because smaller is faster → use smaller memories to hold most
recently used items close to CPU and successively larger
memories farther away from CPU
→ Memory hierarchy
65 / 396
Typical memory hierarchy
Level
Registers
Cache
Main memory
Disk
Size
≤ 1KB
≤ 4MB
≤ 4GB
≥ 1GB
access
time
2-5 ns
3-10 ns
80-400 ns
5 ×106 ns
bandwidth
MB/s
400-32,000
800-5,000
400-2,000
4-32
technology
(BI)CMOS
CMOS SRAM
CMOS DRAM
magnetic disk
manag.
compiler
hardware
OS
OS/user
66 / 396
Memory interleaving
Memory Interleaving
"The memory is subdivided into several independent memory modules (banks)"
Two basic ways of distributing the addresses
Example:
10
Memory size 2 =1024 Words divided into 8 banks
Low order interleaving
High order interleaving
Real a(256)
Banks
Banks
1
2
3
4
5
6
7
8
a(1), a(2), ..., a(128)
a(129), ..., a(256)
1
2
a(1), a(9), ..., a(249)
a(2), a(10), ..., a(250)
3
4
a(3),a(11), ..., a(251)
a(4),...
5
6
7
8
a(5), ...
a(6), ...
a(7), ..., a(255)
a(8), a(16), ..., a(256)
"well adapted to pipelining memory access"
67 / 396
Effect of bank cycle time
Bank cycle time:
Time interval during which the bank
cannot be referenced again
Example
Low order interleaved memory, 4 banks, bank cycle time 3CP.
% column access
%row access
Real a(4,2)
Do j=1,2
Do i=1,4
... = a(i,j)
Enddo
Enddo
Real a(4,2)
Do i=1,4
Do j=1,2
... = a(i,j)
Enddo
Enddo
Bank
Bank
a(1,1)
1
a(1,2)
a(2,1)
2
a(3,1)
3
a(4,1)
4
1 CP
1
a(2,2)
2
a(3,2)
3
a(4,2)
10 Clock Period
a(1,1)
a(1,2)
a(2,1)
a(2,2)
a(3,1)
a(3,2)
a(4,1)
4
time
a(4,2)
18 Clock Period
Bank Conflict: Consecutive accesses to the same bank in less than bank cycle time.
Stride:
Memory address interval between successive elements
68 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
69 / 396
Organisation interne et performance des processeurs
vectoriels (d’après J. Dongarra)
I
Soit l’opération vectorielle triadique :
I
do i = 1, n
y(i) = alpha * ( x(i) + y(i) )
enddo
On a 6 opérations :
1.
2.
3.
4.
5.
Load vecteur x
Load vecteur y
Addition x + y
Multiplication alpha × ( x + y )
Store dans vecteur y
70 / 396
I
Organisations de processeur considérées :
1.
2.
3.
4.
5.
I
Séquentielle
Arithmétique chaı̂née
Load mémoire et arithmétique chaı̂nées
Load mémoire, arithmétique et store mémoire chaı̂nés
Recouvrement des loads mémoire et opérations chaı̂nées
Notations :
a:
b:
c:
d:
startup pour load mémoire
startup pour addition
startup pour multiplication
startup pour store mémoire
71 / 396
Sequential Machine Organization
a
load x
a
load y
add.
b
mult.
c
d
store
memory path busy
Chained Arithmetic
a
load x
a
load y
b
add.
c
mult.
d
store
memory path busy
72 / 396
Chained Load and Arithmetic
a
load x
load y
a
b
add.
c
mult.
d
store
memory path busy
Chained Load, Arithmetic and Store
a
load x
a
load y
b
add.
c
mult.
d
store
memory path busy
73 / 396
Overlapped Load with Chained Operations
a
load x
a
load y
b
add.
c
mult.
d
store
memory path 1 busy
memory path 2 busy
memory path 3 busy
74 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
75 / 396
Organisation des processeurs RISC
The execution pipeline
Instruction
Fetch
Instruction
Decode
Execution
Memory access
and branch
completion
Write back
(write results
in register file)
Example (DLX processor, Hennessy and Patterson, 96 [10])
I
I
Pipeline increases the instruction throughput
Pipeline hazards: prevents the next instruction from executing
I
I
I
Structural hazards: arising from hardware resource conflicts
Data hazards: due to dependencies between instructions
Control hazards: branches for example
76 / 396
Instruction Level Parallelism (ILP)
I
I
Pipelining: overlap execution of independent operations →
Instruction Level Parallelism
Techniques for increasing amount of parallelism among
instructions:
I
I
I
I
reduce the impact of data and control hazards
increase the ability of processor to exploit parallelism
compiler techniques to increase ILP
Main techniques
I
I
I
I
I
I
I
I
loop unrolling
basic and dynamic pipeline scheduling
dynamic branch prediction
Issuing multiple instructions per cycle
compiler dependence analysis
software pipelining
trace scheduling / speculation
...
77 / 396
Instruction Level Parallelism (ILP)
I
I
Simple and common way to increase amount of parallelism is to
exploit parallelism among iterations of a loop : Loop Level
Parallelism
Several techniques :
I
I
Unrolling a loop statically by compiler or dynamically by the
hardware
Use of vector instructions
78 / 396
ILP: Dynamic scheduling
I
Hardware rearranges the instruction execution to reduce the
stalls.
I
Advantage: handle cases where dependences are unknown at
compile time and simplifies the compiler
I
But: significant increase in hardware complexity
I
Idea: execute instructions as soon as their data are available
Out-of-order execution
I
Handling exceptions becomes tricky
79 / 396
ILP: Dynamic scheduling
I
I
I
I
I
I
Scoreboarding: technique allowing instruction out-of-order
execution when resources are sufficient and when no data
dependences
full responsability for instruction issue and execution
goal : try to maintain an execution rate of one instruction /
clock by executing instructions as early as possible
requires multiple instructions to be in the EX stage
simultaneously → multiple functional units and/or pipelined
units
Scoreboard table record/update data dependences + status of
functional units
Limits:
I
I
I
amount of parallelism available between instructions
number of scoreboard entries: set of instructions examined
(window)
number and type of functional units
80 / 396
ILP: Dynamic scheduling
I
Other approach : Tomasulo’s approach (register renaming)
I
Suppose compiler has issued:
F10 <- F2 x F2
F2 <- F0 + F6
I
Rename F2 to F8 in the second instruction (assuming F8 is not
used)
F10 <- F2 x F2
F8 <- F0 + F6
I
Can be used in conjunction with scoreboarding
81 / 396
Impact of ILP : example
This example is from J.L. Hennessy and D.A. Patterson (1996) [10].
I
Original Fortran code
do i = 1000, 1
x(i) = x(i) + temp
enddo
I
Pseudo-assembler code
R1 <- address(x(1000))
load temp -> F2
Loop : load x(i) -> F0
F4 = F0 + F2
store F4 -> x(i)
R1 = R1 - #8 % decrement pointer
BNEZ R1, Loop % branch until end of loop
82 / 396
I
Architecture
Integer Unit
1 stage
FP add
4 stages
IF
ID
MEM
WB
FP mult
4 stages
Divide
not pipelined
Example of pipelined processor (DLX processor, Hennessy and
Patterson, 96 [10])
83 / 396
I
I
I
Latency: # cycles between instruction that produces result and
instruction that uses result
Initiation interval : # cycles between issuing 2 instructions of
same type
Latency = 0 means results can be used next cycle
Functional unit Latency Initiation interval
Integer ALU
0
1
Loads
1
1
FP add
3
1
FP mult
3
1
FP divide
24
24
Characteristics of the processor
Inst. producing result Inst. using result
FP op
FP op
FP op
store double
Load double
FP op
Load double
store double
Latency between instructions
Latency
3
2
1
0
Latency FP op to store double : forwarding hardware passes result from
ALU directly to memory input.
84 / 396
I
Straightforward code
#cycle
1
2
3
4
5
6
7
8
9
Loop : load x(i) -> F0
stall
F4 = F0 + F2
stall
stall
store F4 -> x(i)
R1 = R1 - #8
BNEZ R1, Loop
stall
I
9 cycles per iteration
I
Cost of calculation 9,000 cycles
I
Peak performance : 1 flop/cycle
I
Effective performance :
1
9
load lat. = 1
FP op -> store = 2
delayed branch 1
of peak
85 / 396
I
With a better scheduling
Loop : load x(i) -> F0
stall
F4 = F0 + F2
R1 = R1 - #8
BNEZ R1, Loop
store F4 -> x(i)
#cycle
1 load lat. = 1
2
3
4 Try keep int. unit busy
5
6 Hide delayed branching
by store
I
6 cycles per iteration
I
Cost of calculation 6,000 cycles
I
Effective performance :
1
6
of peak
86 / 396
I
Using loop unrolling (depth = 4)
do i = 1000, 1, -4
x(i ) = x(i )
x(i-1) = x(i-1)
x(i-2) = x(i-2)
x(i-3) = x(i-3)
enddo
+
+
+
+
temp
temp
temp
temp
87 / 396
I
Pseudo-assembler code (loop unrolling, depth=4):
#cycle
Loop : load x(i) -> F0
1
F4 = F0 + F2
3
store F4 -> x(i)
6
load x(i-1) -> F6
7
F8 = F6 + F2
9
store F8 -> x(i-1) 12
load x(i-2) -> F10 13
F12= F10+ F2
15
store F12-> x(i-2) 18
load x(i-3) -> F14 19
F16= F14+ F2
21
store F16-> x(i-3) 24
R1 = R1 - #32
25
BNEZ R1, Loop
26
stall
27
I
I
I
1 stall
2 stalls
1 stall
2 stalls
1 stall
2 stalls
1 stall
2 stalls
27 cycles per iteration
Cost of calculation 1000
4 × 27 = 6750 cycles
Effective performance : 1000
6750 = 15% of peak
88 / 396
I
I
I
I
Using loop unrolling (depth = 4) and scheduling
#cycle
Loop : load x(i) -> F0
1
load x(i-1) -> F6
2
load x(i-2) -> F10 3
load x(i-3) -> F14 4
F4 = F0 + F2
5
F8 = F6 + F2
6
F12= F10+ F2
7
F16= F14+ F2
8
store F4 -> x(i)
9
store F8 -> x(i-1) 10
store F12-> x(i-2) 11
R1 = R1 - #32
12
BNEZ R1, Loop
13
store F16-> x(i-3) 14
14 cycles per iteration
Cost of calculation 1000
4 × 14 = 3500 cycles
Effective performance : 1000
3500 = 29% of peak
89 / 396
I
I
Now assume superscalar pipeline : integer and floating point
operations can be issued simultaneously
Using loop unrolling with depth = 5
Integer inst. | Float.inst.|#cycle
___________________________________________
Loop: load x(i) -> F0 |
|
1
load x(i-1)-> F6 |
|
2
load x(i-2)-> F10| F4 =F0 +F2 |
3
load x(i-3)-> F14| F8 =F6 +F2 |
4
load x(i-4)-> F18| F12=F10+F2 |
5
store F4 ->x(i) | F16=F14+F2 |
6
store F8 ->x(i-1)| F20=F18+F2 |
7
store F12->x(i-2)|
|
8
store F16->x(i-3)|
|
9
R1 = R1 - #40
|
| 10
BNEZ R1, Loop
|
| 11
store F20->x(i-4)|
| 12
I
I
I
I
12 cycles per iteration
Cost of calculation 1000
5 × 12 = 2400 cycles
Effective performance : 1000
2400 = 42% of peak
Performance limited by balance between int. and float. instr.
90 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
91 / 396
Réutilisation des données (dans les registres)
I
Améliorer l’accès aux données et exploiter la localité spatiale et
temporelle des références mémoire
I
Déroulage de boucles : réduit le nombre d’accès mémoire en
utilisant le plus de registres possible
I
Utiliser des scalaires temporaires
I
Distribution de boucles : si nombre de données réutilisables >
nombre de registres : substituer plusieurs boucles à une seule
92 / 396
Déroulage de boucle
Objectif : réduire nombre d’accès mémoire et améliorer pipeline
opérations flottantes.
I
Produit matrice-vecteur : y ← y + At × x
do ...
do ...
y(i) = y(i) + x(j)*A(j,i)
enddo
enddo
I
2 variantes :
I
AXPY :
do j = 1, N
do i = 1, N
...
I
DOT
do i = 1, N
do j = 1, N
...
93 / 396
DOT variant
Processeurs RISC mieux adaptés à DOT que AXPY
do i = 1, N
temp = 0.
do j = 1, N
temp = temp + x(j)*A(j,i)
enddo
y(i) = y(i) + temp
enddo
Stride = 1 dans boucle la plus interne
load A(j,i)
load x(j)
perform x(j)*A(j,i) + temp
Ratio Flops/références mémoire =
2
2
=1
94 / 396
Réutilisation de x(j) : déroulage à une profondeur 2
* Cleanup odd iteration
i = MOD(N,2)
if ( i >= 1 ) then
do j = 1, N
y(i) = y(i) + x(j)*A(j,i)
enddo
end if
* Main loop
imin = i + 1
do i = imin, N, 2
temp1 = 0.
temp2 = 0.
do j = 1, N
temp1 = temp1 + A( j,i-1) * x(j)
temp2 = temp2 + A( j,i ) * x(j)
enddo
y(i-1) = y(i-1) + temp1
y(i ) = y(i ) + temp2
enddo
95 / 396
load A(j,i-1)
load x(j)
perform A(j, i-1 ) * x(j) + temp1
load A(j,i)
perform A(j,i
) * x(j) + temp2
I
Ratio Flops/références mémoire =
I
Déroulage à une profondeur de 4 :
I
Déroulage à une profondeur k:
4
3
8
5
2k
k+1
96 / 396
Performance of y = At x on HP 715/64
45
Rolled
40
Unrolled 2
Unrolled 4
35
Unrolled 8
MFlops
30
25
20
15
10
5
0
200
400
600
Size
800
1000
1200
Figure : Effect of loop unrolling on HP 715/64
97 / 396
Performance of y = At x on CRAY T3D
50
45
Rolled
Unrolled 2
40
Unrolled 4
Unrolled 8
MFlops
35
30
25
20
15
10
5
0
200
400
600
Size
800
1000
1200
Figure : Effect of loop unrolling on CRAY T3D
98 / 396
AXPY variant
Habituellement préférée sur processeurs vectoriels
do j = 1, N
do i = 1, N
y(i) = y(i) + x(j)*A(j,i)
enddo
enddo
Stride > 1 dans la boucle la plus interne
load A(j,i)
load y(i)
perform x(j)*A(j,i) + y(i)
store result in y(i)
Ratio Flops/références mémoire =
2
3
99 / 396
Réutilisation de y(i) : déroulage à profondeur 2
* Cleanup odd iteration
j = MOD(N,2)
if ( j .GE. 1 ) then
do i = 1, N
y(i) = y(i) + x(j)*A(j,i)
enddo
end if
* Main loop
jmin = j + 1
do j = jmin, N, 2
do i = 1, N
y(i) = y(i)+A(j-1,i)*x(j-1)+A(j,i)*x(j)
enddo
enddo
load y(i)
load A(j-1,i)
perform A(j-1,i ) * x(j-1) + y(i)
load A(j,i)
perform A(j,i) * x(j) + y(i)
store result in y(i)
I
Ratio Flops/références mémoire = 1
I
Déroulage à profondeur 4 → Ratio =
I
Déroulage à profondeur p → Ratio =
4
3
2p
2+p
101 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
102 / 396
Organisation d’une mémoire cache
I
Cache
I
I
I
Ligne de cache
I
I
I
I
I
Unité de transfert entre cache et mémoire principale
Défaut de cache
I
I
Buffer rapide entre les registres et la mémoire principale
Divisé en lignes de cache
Référence à une donnée non présente dans le cache
Stratégie de choix d’une ligne à remplacer (LRU parmi les
éligibles)
Une ligne de cache contenant la donnée est chargée de la
mémoire principale dans le cache
Problème de la cohérence de cache sur les multiprocesseurs à
mémoire partagée
Rangement des données dans les caches
I
correspondance mémoire ↔ emplacements dans le cache
103 / 396
I
Stratégies les plus courantes :
I
I
I
I
Conception des caches :
I
I
I
I
“direct mapping”
“fully associative”
“set associative”
L octets par ligne de cache
K lignes par ensemble (K est le degré d’associativité)
N ensembles
Correspondance simple entre l’adresse en mémoire et un
ensemble :
I
I
N = 1 : cache “fully associative”
K = 1 : cache “direct mapped”
104 / 396
I
“Direct mapping”
I
I
I
Chaque bloc en mémoire ↔ un placement unique dans le cache
Recherche de données dans cache peu coûteuse (mais
remplacement coûteux)
Problème de contention entre les blocs
line
cache
main memory
I
“Fully associative”
I
I
Pas de correspondance a priori
Recherche de données dans cache coûteuse
105 / 396
I
“Set associative”
I
I
I
Cache divisé en plusieurs ensembles
Chaque bloc en mémoire peut être dans l’une des lignes de
l’ensemble
“4-way set associative” : 4 lignes par ensemble
cache set #k
line 1
line 2
line 3
line 4
line
main memory
106 / 396
Gestion des caches
I
I
Coût d’un défaut de cache : entre 2 et 50 C (temps de cycle)
“Copyback”
I
Pas de m-à-j lorsqu’une ligne de cache est modifiée, excepté lors
d’un cache flush ou d’un défaut de cache
Mémoire pas toujours à jour.
Pas de problème de cohérence si les processeurs modifient des
lignes de cache indépendantes
I
“Writethrough”
I
Donnée écrite en mémoire chaque fois qu’elle est modifiée
Données toujours à jour.
Pas de problème de cohérence si les processeurs modifient des
données indépendantes
107 / 396
Cache coherency problem
Processor # 1
Processor # 2
cache
cache
cache line
X
I
Y
Cache coherency mechanisms to:
I
I
I
avoid processors accessing old copies of data (copyback and
writethrough)
update memory by forcing copyback
invalidate old cache lines
108 / 396
Cache coherency problem
Processor # 1
Processor # 2
cache
cache
cache line
X
I
Cache coherency mechanisms to:
I
I
I
I
Y
avoid processors accessing old copies of data (copyback and
writethrough)
update memory by forcing copyback
invalidate old cache lines
Example of mechanism (snooping):
I
I
I
assume writethrough policy
Each processor observes the memory accesses from others
If a write operation occurs that corresponds to a local cacheline,
invalidate local cacheline
109 / 396
Processor
DEC 21164
IBM Power2
MIPS R8000
∗
Line size
Level
Size
Organization
32 B
1
2∗
3∗
1
8 KB
96 KB
1-64 MB
128 KB /
256 KB
16 KB
4-16 MB
Direct-mapped
3-way ass.
Direct-mapped
4-way-ass.
128 B /
256 B
16 B
1
2∗
miss
C
C
C
C
Access /
cycle
2
2
2
2
7C
50 C
2
2
2
≥8
≥ 12
8
Direct-mapped
4-way-ass.
Cache configurations on some computers.
: data + instruction cache
I
Current trends:
I
I
Large caches of several MBytes
Several levels of cache
110 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
111 / 396
Réutilisation des données (dans les caches)
Example
I
I
cache 10 times faster than memory, hits 90% of the time.
What is the gain from using the cache ?
I
I
I
Cost cache miss: tmiss
Cost cache hit: thit = 0.1 × tmiss
Average cost:
112 / 396
Réutilisation des données (dans les caches)
Example
I
I
cache 10 times faster than memory, hits 90% of the time.
What is the gain from using the cache ?
I
I
I
I
Cost cache miss: tmiss
Cost cache hit: thit = 0.1 × tmiss
Average cost: 90%(0.1 × tmiss ) + 10% × tmiss
tmiss ×100%
1
gain = 90%×(0.1×t
= (0.9×0.1)+0.1
=
miss )+10%×tmiss
1
0.19
= 5.3
(similar to Amdahl’s law)
113 / 396
Réutilisation des données (dans les caches)
Il est critique d’utiliser au maximum les données dans le cache ↔
améliorer le % de succès de cache
I
Exemple : effet du % de défauts de cache sur un code donné
I
I
I
Pmax performance lorsque toutes les données tiennent dans le
cache (hit ratio = 100%). Tmin temps correspondant.
Lecture de donnée dans le cache par une instruction et exécution
: thit = 1 cycle
Temps d’accès à une donnée lors d’un défaut de cache : tmiss =
10 ou 20 cycles (exécution instruction tmiss + thit )
I
Ttotal = %hits.thit + %misses × (tmiss + thit )
I
Topt = 100% × thit
I
Perf =
Topt
Ttotal
114 / 396
Tmiss
10
20
10
20
%hits
100%
99%
99%
95%
95%
Tps hits
1.00
0.99
0.99
0.95
0.95
Tps misses
0.00
0.11
0.21
0.55
1.05
Ttotal
1.00
1.10
1.20
1.50
2.00
Perf.
100%
91%
83%
66%
50%
Table : Effet des défauts de cache sur la performance d’un code (exprimés
en pourcentages vs pas de défaut de cache).
115 / 396
Efficient cache utilization: Exercise
Reuse as much as possible data held in cache ↔ Improve cache hit
ratio
I
I
I
I
Cache : single block of CS (cache size) words
When cache is full: LRU line returned to memory
Copy-back: memory updated only when a modified block
removed from cache
For simplicity, we assume cache line size L=1
Example from D. Gannon and F. Bodin :
do i=1,n
do j=1,n
a(j) = a(j) + b(i)
enddo
enddo
1. Compute the cache hit ratio (assume n much larger than CS).
2. Propose a modification to improve the cache hit ratio.
116 / 396
I
I
I
I
Total number of memory references = 3 × n2 i.e. n2 loads for a,
n2 stores for a, and n2 loads for b (assuming the compiler is
stupid).
Total number of flops = n2
Cache empty at beginning of calculations.
Inner loop:
do j=1,n
a(j) = a(j) + b(i)
enddo
Each iteration reads a(j) and b(i), and writes a(j)
For i=1 → access to a(1:n)
For i=2 → access to a(1:n)
As n >> CS, a(j) no longer in cache when accessed again,
therefore:
I
I
I
I
each read of a(j) → 1 miss
each write of a(j) → 1 hit
each read of b(i) → 1 hit (except the first one)
Hit ratio =
# of hits
=
Mem.Refs
2
3
= 66%
117 / 396
blocked version
The inner loop is blocked into blocks of size nb < CS so that nb
elements of a can be kept in cache and entirely updated with b(1:n).
do j=1,n,nb
jb = min(nb,n-j+1)
! nb may not divide n
do i=1,n
do jj=j,j+jb-1
a(jj) = a(jj) + b(i)
enddo
enddo
enddo
118 / 396
To clarify we load the cache explicitely; it is managed as a 1D array :
CA(0:nb)
do j=1,n,nb
jb = min(nb,n-j+1)
CA(1:jb) = a(j:j+jb-1)
do i=1,n
CA(0) = b(i)
do jj=j,j+jb-1
CA(jj-j+1) = CA(jj-j+1) + CA(0)
enddo
enddo
a(j:j+jb-1) = CA(1:jb)
enddo
Each load into cache is a miss, each store to cache is a hit.
119 / 396
I
I
Total memory references = 3n2
Total misses:
I
I
I
I
n
× nb
load a = nb
n
load b = nb
×n
n2
Total = n + nb
Total hits = 3n2 − n −
n2
nb
hits
Hit ratio =
≈1−
Mem.Refs
if nb is large enough.
= (3 −
1
3nb
1
nb )
× n2 − n
≈ 100%
120 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
121 / 396
Mémoire virtuelle
I
Mémoire réelle : code et données doivent être logés en mémoire
centrale
I
Mémoire virtuelle : mécanisme de pagination entre la mémoire
et les disques
Une pagination mémoire excessive peut avoir des conséquences
dramatiques sur la performance !!!!
I
TLB :
I
I
I
I
Translation Lookaside Buffer : correspondance entre l’adresse
virtuelle et l’adresse réelle d’une page en mémoire
TLB sur IBM Power4/5: 1024 entrées
Défaut de TLB : 36 C environ
AIX offre la possibilité d’augmenter la taille des pages (jusqu’à 16
MB) pour limiter les défauts de TLB.
122 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
123 / 396
Exercice sur la réutilisation des données (en mémoire)
(inspiré de (Dongarra, Duff, Sorensen, van der Vorst [6]))
C ←C +A×B
A, B, C : matrices n × n, n = 20000, stockées par colonnes
I
Calculateur vectoriel (Performance de crête 50 GFlop/s)
I
Mémoire virtuelle (remplacement page : LRU)
I
1 page mémoire = 2Mmots = 100 colonnes de A, B, ou C
(1 mot = 8 bytes)
I
1 défaut de page ≈ 10−4 secondes
I
Stockage de A, B, et C : 3 × 400Mmots = 3 × 3.2 GB = 9.6 GB
I
capacité mémoire : 128 pages soit:
128 × 2Mmots = 256Mmots = 2GB → A, B, C ne peuvent être
stockées totalement
124 / 396
Variante (1) : ijk
do i = 1, n
do j = 1, n
do k = 1, n
Cij <- Cij + Aik * Bkj
enddo
enddo
enddo
1. Quel est le nombre de défauts de pages et le temps de calcul de
cette variante (ijk) ?
2. Quel est le nombre de défauts de pages et le temps de calcul de
la variante (jki) ?
3. Quel est le nombre de défauts de pages et le temps de calcul de
la variante (jki) avec blocage sur j et k par blocs de taille 4
pages mémoire ?
125 / 396
Variante (1) : ijk
do i = 1, n
do j = 1, n
do k = 1, n
Cij <- Cij + Aik * Bkj
enddo
enddo
enddo
Si accès en séquence aux colonnes d’une matrice, 1 défaut de page
toutes les 100 colonnes.
n
= 200 défauts de page.
Accès à une ligne de A → 100
2
10
D’où 200 × 20000 = 8 × 10 defauts de page.
8 × 1010 défauts de page × 10−4 sec. = 8 Msec ≈ 128 jours de calcul
126 / 396
Variante (2) : jki
do j = 1, n
do k = 1, n
do i = 1, n
Cij <- Cij + Aik * Bkj
enddo
enddo
enddo
Pour chaque j :
I
toutes colonnes de A accédées : n*200 défauts de page
I
accés aux colonnes de B et C : 200 défauts de page
I
total ≈ 4 × 106 défauts de page
Temps d’exécution ≈ 4 × 106 × 10−4 sec = 400 sec
127 / 396
Variante (3) : jki bloqué
Les matrices sont partitionées en blocs de colonnes tq bloc-colonne
(nb = 400 colonnes) = 4 pages mémoire.
Réutilisation maximale des sous-matrices en mémoire.
* Organisation des calculs sur des sous-matrices
do j = 1, n, nb
jb = min(n-j+1,nb)
do k = 1, n, nb
sectioning loops
kb = min(n-k+1,nb)
* Multiplication sur les sous-matrices
* C1:n,j:j+jb-1 <- C1:n,j:j+jb-1
*
+ A1:n,k:k+kb-1 * Bk:k+kb-1,j:j+jb-1
do jj = j, j+jb-1
do kk = k, k+kb-1
do i = 1, n
Cijj <- Cijj + Aikk * Bkkjj
enddo enddo enddo
enddo
enddo
Défauts de page :
I
nb = 400 colonnes (4 pages mémoire)
I
accès à B et C, défauts de page lors de la boucle en j: 200
défauts de page
I
n/nb accès (boucle en j) à A par blocs de colonnes, pour chaque
indice k: 200, soit n/nb × 200 au total.
I
n
+ 2) × 200 défauts de page
Total ≈ ( nb
I
nb = 400 donc
I
et donc ≈ 104 défauts de page
I
n
nb
= 50
Temps de chargement mémoire = 1 sec
Attention : le temps de calcul n’est plus négligeable !!
Temps = 2 × n3 /vitesse ≈ 320 secondes
Idées identiques au blocage pour cache
Blocage : très efficace pour exploiter au mieux une hiérarchie
mémoire (cache, mémoire virtuelle, . . . )
129 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
130 / 396
Interconnexion des processeurs
I
Réseaux constitués d’un certain nombre de boı̂tes de connexion
et de liens
I
I
I
I
Commutation de circuits : chemin créé physiquement pour toute
la durée d’un transfert (idéal pour un gros transfert)
Commutation de paquets : des paquets formés de données +
contrôle trouvent eux-même leur chemin
Commutation intégrée : autorise les deux commutations
précédentes
Deux familles de réseaux distincts par leur conception et leur
usage :
I
I
Réseaux mono-étage
Réseaux multi-étages
131 / 396
Réseau Crossbar
0
1
2
o
o
o
o
o
o
o
o
o
o
3
o
o
o
o
o
1
o
o
2
3
Toute entrée peut être connectée à toute sortie sans blocage.
Théoriquement, le plus rapide des réseaux mais concevable seulement
pour un faible nombre d’Entrées/Sortie.
132 / 396
Réseaux multi-étages
Constitués de plus d’un étage de boitiers de connexion. Système de
communication permettant le plus grand nombre possible de
permutations entre un nombre fixe d’entrées et de sorties.
A chaque entrée (ou sortie) est associée une unité fonctionnelle.
Nombre d’entrées = nombre de sorties = 2p .
0
1
2
0
1
2
3
3
4
5
6
7
4
5
6
7
Figure : Exemple de réseau multi-étage avec p=3.
Réseaux birectionnels ou doublement du réseau.
133 / 396
Boı̂te de connexion élémentaire
Elément de base dans la construction d’un réseau : connexion entre
deux entrées et deux sorties
I Boı̂te à deux fonctions (B2F) permettant les connexions directe
et croisée contrôlée par un bit
I
Boı̂te à quatre fonctions (B4F) permettant les connexions
directe, croisée,à distribution basse et haute contrôlée par deux
bits.
134 / 396
I
Topologie : mode d’assemblage des boı̂tes de connexion pour
former un réseau de N = 2p entrées / N sorties. La plupart des
réseaux sont composés de p étages de N2 boı̂tes.
I
Exemple : Réseau Omega
Topologie basée sur le “Perfect Shuffle” (décalage à gauche des
bits plus boucle) permutation sur des vecteurs de 2p éléments.
0
0
1
1
2
2
3
3
4
5
4
5
6
6
7
7
Le réseau Omega reproduit à chaque étage un “Perfect Shuffle”.
Autorise la distribution d’une entrée sur toutes les sorties
(“broadcast”).
135 / 396
0
0
0
0
A
1
1
2
2
3
B
3
1
E
I
F
J
G
K
2
2
3
1
3
4
4
5
4
4
C
5
5
5
6
6
7
6
D
6
H
7
7
L
7
Réseau Omega 8 × 8.
136 / 396
I
Anneau
Proc 0
I
Proc 1
Proc 2
Proc n
Grille
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Utilisé sur Intel DELTA et PARAGON, . . .
137 / 396
I
0
I
0
I
Shuffle Exchange : Perfect Shuffle avec en plus Proc # i
connecté à Proc # (i+1)
1
2
3
4
5
6
7
N-cube ou hypercube : Proc #i connecté au Proc # j si i et j
diffèrent d’un seul bit.
1
2
3
4
5
6
7
Grand classique utilisé sur hypercubes Intel (iPSC/1, iPSC/2,
iPSC/860), machines NCUBE, CM2, SGI . . .
138 / 396
Figure : 4-Cube in space.
139 / 396
Topologies usuelles pour les architectures distribuées
I
Notations :
I
I
I
I
I
I
# procs = N = 2p
diamètre = d (chemin critique entre 2 procs)
# liens = w
Anneau : d = N2 , w = N
1
1
1
Grille 2D : d = 2 × (N 2 − 1), w = 2 × N 2 × (N 2 − 1)
Tore 2D (grille avec rebouclage sur les bords) :
1
d = N2,w = 2 × N
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
I
Hypercube ou p-Cube : d = p, w =
N×p
2
140 / 396
Remarques
I
Tendance actuelle:
I
I
I
Réseaux hiérarchiques/multi-étages
Beaucoup de redondances (bande passante, connections
simultanées)
Conséquence sur les calculateurs haute performance:
I
I
Peu de différence de coût selon sources/destinations
La conception des algorithmes parallèles ne prend plus en compte
la topologie des réseaux (anneaux, . . . )
141 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
142 / 396
Statistiques Top 500 (voir www.top500.org)
I
Liste des 500 machines les plus puissantes au monde
I
Mesure: GFlops/s pour pour la résolution de
Ax = b, A matrice dense.
I
Mises à jour 2 fois par an (Juin/ISC, Novembre/SC).
I
Sur les 10 dernières années la performance a augmenté plus vite
que la loi de Moore:
143 / 396
Analyse des sites - Definitions
I
Rang (noté # par la suite): Position dans le top 500.
I
Rpeak (Gflop/s): Performance crête de la machine en nombre
d’opérations flottantes par secondes.
I
Rmax (Gflop/s): Performance maximum obtenue sur le test
LINPACK
I
Nmax: Taille du problème ayant servi à obtenir Rmax.
Power (MWatt/s) : Watt/s consommés (voir aussi
www.green500.org)
I
I
I
I
I
L’efficacité énergétique s’améliore
Les calculateurs à efficacité energétique la plus forte possédent
des processeurs cell
Green500.org: #1: 3208 Mflops/Watt, CINECA (Bologne)
Top500 performance #1: 1900 Mflops/Watt, Tianhe-2 (Chine)
(#1 en 2010 : 253 Mflops/Watt !!!)
144 / 396
Top 500: évolution des performances (RMAX)
I
June 1997: ASCI Red,
Sandia NL
I
I
I
I
#1 = 280 TFlop/s
#500 = 4 TFlop/s
June 2008: Roadrunner,
LosAlamos NL
I
#1 = 1.1 TFlop/s
(effectif)
#500 = 7.7 GFlop/s
June 2007:IBM Blue
gene, Livermore NL
I
I
I
I
#1 = 1 PFlop/s (1026
TFlop/s)
#500 = 4 TFlop/s
June 2010: Jaguar,
OakRidge NL
I
I
#1 = 1,75 PFlop/s (1026
TFlop/s)
#500 = 25 TFlop/s
June 2013: #1 Tianhe-2 (MilkyWay-2) National Univ. of Def.
Tech., Chine, 33.8 Pflops (> 3 Millions coeurs)
#500 = 100 Tera
145 / 396
Evolution des performances energétiques des Top #1
I
Entre 2002 et 2005 :
NEC earth simulator (40 Tflop/s) : 6 MFlops/Watt
I
Entre 2005 et 2007 :
IBM Bleu gene L (280 Tflop/s) : 205 Mflops/Watt
I
2008 :
Roadrunner Blade center ( 1 Pflop/s) : 444 Mflops/Watt
I
2010 :
Jaguar, Cray XT5 Opteron 6 core (1.7 Pflop/s) :
253 Mflops/Watt
I
2013 :
Tianhe-2, Cray XT5 Opteron 6 core (33.8 Pflop/s) :
1900 Mflops/Watt
146 / 396
Evolution des performances (RMAX)
147 / 396
Top 5 (Juin 2013)
148 / 396
Distribution géographique
149 / 396
Répartition par segment d’activité
150 / 396
Statistiques constructeurs
151 / 396
Analyse des familles de processeurs
152 / 396
Analyse des familles de processeurs
153 / 396
Analyse des sites français – Juin 2013 (23 dans Top 500)
Rang
11
15
25
37
38
54
123
Site
Total
CEA/TGCC
CEA
CNRS/IDRIS
EDF R&D
Météo France
Airbus
Système
SGI ICE X, Xeon, 8C, 2.6GH
Bullx, Xeon, 8C 2.7GH
Bullx, super-node
BlueGene/Q, Power BQC, 1.6GH
BlueGene/Q, Power BQC, 1.6GH
Bullx
HP POD - Cluster Platform
Cores
(x1000)
110K
77K
136K
65K
65K
26K
25,8
Rmax
(Tflops)
2098
1359
1050
716
716
500
243
Power
(Mw)
2,1
2,2
4,5
0.33
0.33
401
Autres domaines concernés (Institution financieres (4), Service,
Automobile, Simulation (EADS, CNES))
Meteo France, Espace Clément Ader (Toulouse), 1 Petaflops en 2014
et 5 Petaflops en 2016
154 / 396
Outline
Calculateurs haute-performance: concepts généraux
Introduction
Organisation des processeurs
Organisation mémoire
Organisation interne et performance des processeurs vectoriels
Organisation des processeurs RISC
Réutilisation des données (dans les registres)
Mémoire cache
Réutilisation des données (dans les caches)
Mémoire virtuelle
Réutilisation des données (en mémoire)
Interconnexion des processeurs
Les supercalculateurs du top 500 en Juin 2013
Conclusion
155 / 396
Conclusion
I
Performance :
I
I
Horloge rapide
Parallélisme interne au processeur
I
I
I
I
Traitement pipeliné
Recouvrement, chaı̂nage des unités fonctionnelles
Parallélisme entre processeurs
Mais :
I
Accès aux données :
I
I
I
I
Organisation mémoire
Communications entre processeurs
Complexité du hardware
Techniques de compilation : pipeline / vectorisation /
parallélisation
Comment exploiter efficacement l’architecture ?
156 / 396
Ecriture de code efficace (I) : MFLOPS ou MIPS ?
I
MFLOPS: floating point operations /sec.
Ne dépend pas du calculateur
I
MIPS: instructions de bas-niveau
Dépend du calculateur
I
Watt: code efficace sur des machines a faible consommation en
Watt par proc. (Exemple des proc. Cell).
I
Précision des calculs: travail partiel en précision numérique
affaiblie (plus efficace).
157 / 396
Ecriture de code efficace (II)
I
Facteurs architecturaux influençant la performance :
I
I
I
I
I
débit et latence mémoire
coûts des communications et de synchronisation
temps d’amorçage des unités vectorielles
besoins en entrées/sorties
Facteurs dépendant de l’application :
I
parallélisme (dépend des algorithmes retenus)
I
I
I
I
I
régularité des traitements
équilibrage des traitements
volume de communications (localité)
granularité - scalabilité
Localité des données (spatiale et temporelle)
encore plus critique sur les architectures Cell et GPU (Graphical
Proc Unit)
158 / 396
Notion de calcul potentiellement efficace
I
Proposition: Soient x et y des vecteurs et A, B, C des matrices
d’ordre n; le noyau de calcul (1) x = x + αy est potentiellement
moins efficace que le noyau (2) y = A × x + y qui est
potentiellement moins efficace que le noyau (3) C = C + A × B
I
Exercice : justifier la proposition précédente.
159 / 396
I
I
La mesure du rapport entre le nombre d’opérations flottantes et
de réferences mémoire pour chacun des noyaux de calcul
explique le potentiel.
x = x + αy
I
I
I
I
y =A×x +y
I
I
I
I
n2 références mémoire
2n2 opérations flottantes
rapport Flops/Ref = 2
C =C +A×B
I
I
I
I
3n références mémoire
2n opérations flottantes
rapport Flops/Ref = 2/3
4n2 références mémoire
2n3 opérations flottantes
rapport Flops/Ref = n/2
Typiquement Vitesse (3) = 5 × vitesse(2) et vitesse(2) = 3 ×
vitesse(1) . . . si on utilise des bibliothèques optimisées !
160 / 396
Limites de l’optimisation de code et de la
vectorisation/parallélisation automatiques
C ← α × A × B + βC (DGEMM du BLAS)
20
30
40
DO 40 j = 1, N
................
DO 30 l = 1, K
IF ( B( l, j ) .NE. ZERO ) THEN
TEMP = ALPHA * B( l, j )
DO 20 i = 1, M
C( i, j ) = C( i, j ) + TEMP * A( i, l )
CONTINUE
END IF
CONTINUE
CONTINUE
Plupart des compilateurs : parallélisent la boucle d’indice j et
optimisent / vectorisent la boucle d’indice i
161 / 396
Table : Performance de versions différentes de GEMM sur processeurs RISC
avec des matrices 128 × 128.
Calculateur
DEC 3000/300 AXP
HP 715/64
IBM RS6000/750
Pentium 4
standard
23.1
16.9
25.2
113
optimisé
48.4
38.4
96.1
975
perf. de crête
150.0
128.0
125.0
3600
I
Plupart des optimisations réalisées par les compilateurs sur la
boucle interne
I
En théorie très bon potentiel grâce au rapport entre opérations
flottantes et références mémoire : ( 4n2 références mémoire, 2n3
opérations flottantes)
i.e.
n
2
mais les compilateurs ne savent pas l’exploiter !!
162 / 396
I
Optimisation de code :
I
I
I
I
I
I
I
Améliorer l’accès aux données et exploiter la localité spatiale et
temporelle des références mémoire
Déroulage de boucles : réduit le nombre d’accés mémoire en
améliorant la réutilisation des registres, permet aussi une
meilleure exploitation du parallélisme interne aux processeurs
Blocage pour une utilisation efficace du cache : améliore la
localité spatiale et temporelle
Copie des données dans des tableaux de travail pour forcer la
localité et éviter des ”strides” critiques (pas toujours possibles car
parfois trop coûteux)
”prefetch” des données
Utilisation de l’assembleur (cas désespéré !!)
Utilisation de bibliothèques optimisées (cas ideal !!)
163 / 396
Utilisation d’une bibliothèque optimisée
I
Noyaux de calcul matriceXmatrice optimisés existent :
I
I
ATLAS - Automatic Tuned Linear Algebra Software.
http://netlib.enseeiht.fr/atlas/
Goto from Univ. Texas at Austin
http://www.cs.utexas.edu/users/flame/goto/
Figure : Comparaison de la performance de noyaux de calcul en algèbre
Outline
La programmation par mode message
Contexte informatique, objectifs et besoins
Le modèle de programmation par transfert de messages
Envoi et réception de messages
Choisir un mode de communication
165 / 396
Outline
La programmation par mode message
Contexte informatique, objectifs et besoins
Le modèle de programmation par transfert de messages
Envoi et réception de messages
Choisir un mode de communication
166 / 396
Contexte informatique
I
Multiprocesseur à mémoire distribuée ou réseau de stations de
travail
computer #2
network #1
cluster
computer #1
network #2
multiprocessor
Exemple de réseau de calculateurs.
167 / 396
Objectifs et besoins
I
I
But : répartir/gérer des calculs sur la machine cible
Outils nécessaires : ( minimum )
I
I
I
I
I
I
I
Sécurité et droits d’accés (machines et données)
Création de processus distants
Communication entre processus
Synchronisation entre processus
Gestion de la cohérence des donnés et des traitements
Séquenceur des tâches réparties
Gestion dynamiques des processeurs et des processus
(gestion des pannes, gestion de points de reprises)
168 / 396
Outline
La programmation par mode message
Contexte informatique, objectifs et besoins
Le modèle de programmation par transfert de messages
Envoi et réception de messages
Choisir un mode de communication
169 / 396
Le modèle de programmation par transfert de messages
I
Permet d’exprimer la communication et la synchronisation
I
C’est le modèle le plus répandu en calcul réparti
mais ce n’est pas le seul (voir par ex. LINDA )
I
Il n’apporte pas de solution à tous les problèmes posés.
Caractéristiques :
I
I
I
I
I
expression du parallélisme à la charge du programmeur
distribution des données à la charge du programmeur
l’échange de données est explicite
prise en compte possible d’un réseau hétérogènes de calculateurs
avec gestion des pannes.
170 / 396
Modèle pelure d’oignon pour l’échange de message
Chaque niveau peut-être construit au dessus du précédent
I
Niveau le plus bas : adressage au niveau canal
I
I
I
I
I
I
procédures pour transférer des paquets sur des liens
Adressage au niveau processus
éventuellement plus d’un processus par processeur
échange de message en donnant l’adresse d’un processus
Exemples : Nx sur iPSC, Vertex sur nCUBE, Express, PARMACS,
PVM, MPI, . . .
Niveau plus élevé d’abstraction : mémoire partagée virtuelle,
LINDA, espace de tuples partagé ou réparti)
171 / 396
Hypothèse d’exécution
I
Machine complètement connectée
I
Routeur automatique de messages
Machine 1
Machine 2
Processus
P22
P11
P21
P12
P31
Machine 3
les deux hypothèses ci-dessus ne sont pas toujours vraies
(Transputers)
172 / 396
Bibliotèques portables pour la programmation
d’applications parallèles distribuées
I
P4 de l’Argonne National Laboratory
I
I
I
I
I
PICL de l’Oak Ridge National Laboratory portable sur une large
gamme de multiprocesseurs à mémoire distribuée
PVM : Univ. Tennessee, Univ. Emory, Oak Ridge Nat. Lab., . . .
I
I
I
offre à la fois les modèles mémoire partagée et transfert de
message
communications entre processus
disponible et optimisé sur une large gamme de calculateurs (et
réseaux de calculateurs)
pour réseaux hétérogènes de calculateurs
aussi disponible sur multiprocesseurs
MPI : le standard pour le transfert de message
173 / 396
Outline
La programmation par mode message
Contexte informatique, objectifs et besoins
Le modèle de programmation par transfert de messages
Envoi et réception de messages
Choisir un mode de communication
174 / 396
Envoi et réception de messages
Un arbre qui cache la forêt
175 / 396
Environnement d’exécution des communications
I
I
Chaque processus est identifié par un numéro d’instance
(rang dans un groupe ou communicateur)
L’enveloppe d’un message doit permettre la caractérisation et
le traitement du message. Elle contient:
1.
2.
3.
4.
5.
le numéro de l’émetteur
le numéro du récepteur
le label du message
la taille du message
...
176 / 396
Types de communication classiques
I
I
communications point à point (one-to-one) :
échange d’information entre 2 processus
communications collectives ( dans groupe / communicateur ) :
I
I
I
one-to-many (broadcast, fan-out) :
d’un processus vers un ensemble de processus
many-to-one (collect, fan-in) :
un processus collecte des informations issues d’un ensemble de
processus
many-to-many :
échange global d’informations entre plusieurs processus
177 / 396
Communications point à point
(quelques questions)
I
Envoi et réception de messages
Processus
Source
Dest
Send (Dest, data)
Recv(Source, data)
data
data
Temps
I
I
I
I
Questions:
Synchronisation entre l’envoi et la réception ?
Quand peut-on réutiliser la donnée envoyée ?
Bufferisation des communications ?
178 / 396
Outline
La programmation par mode message
Contexte informatique, objectifs et besoins
Le modèle de programmation par transfert de messages
Envoi et réception de messages
Choisir un mode de communication
179 / 396
Choisir un mode de communication
(Communications Synchrones/ Asynchrones)
I
Envoi/réception synchrones:
Le premier arrivé attend l’autre (notion de rendez-vous).
I
Envoi/Réception asynchrones:
L’émetteur et le récepteur ne s’attendent pas.
I
Un envoi asynchrone peut cependant être bloqué par la non
consommation du message par le récepteur
(ceci sera détaillé par la suite)
I
L’èmetteur et le récepteur n’ont pas à être tous les deux
synchrones/asynchrones !!
180 / 396
Trace d’éxecution(8 proc. CRAY T3E)
Algorithme Asynchrone
8.9s
Process 0 5 5
5
5
4
8.95s
4 5
108
5
5
5
108 5
5
Algorithme Synchrone
9.0s
5
5
5
5 Facto_L1
4 5
9.28s
Process 1
108
4
4
108 5
5
5
5
5
5
Facto_L1
9.3s
9.32s
4
Process 0
Process 2
Process 3
108 4
5
5
5
4
4 108
5
108
5
5
5
5
5
5
5
5
5
4 108
5
5
5
5
5
5
108
5
108 5
4 108 5
5
Process 1
80
80
80
80
80
80
80
80
Process 2
80
80
80
80
80
80
80
80
80
Process 5
80
80
80
80
80
80
80
80
80
Process 6
80
80
80
80
80
80
80
80
80
Process 3
Process 4
4
108
5
5
4
5
5
5
5
Process 5 4
4 4
5 5
4 108 5
5
5
5
5
5
108
5
108
5
5
2
2
2
2
5
5
108
5
108 5
2
2
108 5
5
4 108 5
5
Process 4
Process 6
4
Process 7
108
4 108
4
4 108 2 2
5
5
2
5
5
2
5
5
2 2
5
Process 7
L
(Algorithmes de factorisation LU de matrices creuses développés à
l’ENSEEIHT (asynchrone) et au NERSC, Berkeley (synchrone) )
181 / 396
Envoi/Réception bloquants ou non bloquants
I
Envoi/Réception bloquants:
La ressource est disponible en retour de la procédure.
I
Réception non-bloquante simple
un paramètre de retour indique si l’information est disponible.
I
Envoi/Réception non-bloquants généraux :
-Retour de la procédure sans garantir que la donnée ait été
envoyée/reçue.
-L’utilisateur ne peut pas réutiliser l’espace mémoire associé (au
risque de changer ce qui sera envoyé).
-Il faut donc pouvoir tester/attendre la libération (si envoi) ou la
réception effective de la donnée. Send/Recv ( Dest/Source,
data, Ireq) renvoie aussi un numéro de requête
Test ( Ireq ) et Wait ( Ireq )
182 / 396
Envoi asynchrone : bloquant et non-bloquant
Envoi asynchrone bloquant
Envoi asyncrhone non−bloquant
Send (Dest, data,Ireq)
Send (Dest, data)
Attente
Test (Ireq)
(par ex. copie dans buffer interne)
Actif
Actif
data modifiable (pas tjrs recue)
Recv(Source, data)
Wait (Ireq)
data modifiable (pas tjrs recue)
Temps
Recv(Source, data)
183 / 396
Réceptions bloquantes asynchrones
Réception non−bloquante simple
Réception non−bloquante générale
Recv (Dest, data,Ireq)
Recv(Source, data,Recu)
Send (Dest, data)
Si ( Recu ) alors
traiter data
Fin Si
Test (Ireq)
Wait (Ireq)
Send (Dest, data)
ATTENTE
Temps
(indépendant du mode d’envoi)
184 / 396
Où va l’information envoyée ?
Source
Destination
Send (Dest, data)
Buffer envoi
Réseau
Buffer réception
Recv(Dest, data)
I
Le(s) buffer(s) sont soit internes à la couche système soit gérés
par l’utilisateur.
185 / 396
Proprietés de la communication bufférisée
I
I
I
I
Buffer(s) implique(ent) copies multiples
(coût mémoire et temps)
Même dans un mode bloquant l’envoyeur peut être libre
immédiatement
Si Taille(buffer d’envoi) ≥ Taille (message) alors
( envoi asynchrone bloquant ≡ envoi non-bloquant )
Attention à gérer la saturation des buffers
(deadlock possible !!! )
Destination
Source
Send (Dest, data)
Send (Source, data)
Buffer envoi
Réseau
Buffer envoi
si l’envoi est asynchrone (bloquant) l’envoi peut être bloqué
jusqu’au lancement de la réception correspondante.
186 / 396
Propriétés des communications
I
Diffusion des messages ordonnancée FIFO :
les messages issus de Proc1 sont reçus dans l’ordre par Proc2.
Proc 1
Temps
Proc 2
I
Par contre PAS d’ordonnancement causal
Proc 1
Temps
Proc 2
Proc 3
187 / 396
Exemples (PVM et MPI) de communications point à point
I
Envoi/réception standard
I
I
I
Envoi synchrone:
I
I
I
pvm send/pvm recv: asynchrone bloquant
(pvm Nrecv : réception non-bloquante simple)
mpi send/mpi recv: bloquant (synchronisme dépend de
l’implémentation)
(mpi Isend/mpi Irecv : communication non-bloquante
générale)
Bloquant : mpi Ssend
Non-bloquant : mpi ISsend
Envoi bufferisé:
bloquant : mpi Bsend et non-bloquant : mpi IBsend
188 / 396
Communications non symétriques
I
PUT(data) : écriture directe dans la mémoire d’un autre
processus
I
GET(data) : lecture dans la mémoire d’un autre processeur
Proc 1
Proc 2
Put (data)
Proc 1
Proc 2
Mémoire locale
Mémoire locale
Get (data)
Proc2 ne fait pas de réception
Proc1 ne fait pas d’envoi
Attention aux problèmes de cohérence de données !!
189 / 396
Examples d’opérations collectives
I
Communications au sein d’un groupe de processus ou d’un
communicateur
I
Les appels collectifs sont bloquants mais ne constituent pas un
point de synchronisation fiable (comparable à une barrière).
I
Diffusion dans un groupe:
Broadcast (data, label, Groupe)
I
Somme des données distribuées sur un groupe de procs:
Reduce (SUM, ValeurSum, ValeurLoc, Groupe, Dest)
ValeurSum n’est disponible que sur le processus Dest.
I
Maximum de valeurs distibuées disponible sur chaque processus
AllReduce(MAX, ValeurMax, ValeurLoc, Groupe)
ValeurMax est disponible sur tous les processus du Groupe.
190 / 396
Commentaires sur les protocoles de communications
I
un protocole différent est souvent utilisé pour les messages
courts et les messages longs (ex. Cray T3E, SGI origin)
I
Protocole pour messages courts
1/ écriture dans le buffer interne des données envoyées.
2/ le processus envoyeur continue son travail (si envoi
asynchrone)
I
Protocole pour messages longs
1/ envoi d’une requête d’envoi au destinataire
2/ attente d’un message prêt à recevoir
3/ envoi effectif des données rangées dans l’espace utilisateur du
récepteur
191 / 396
Influence de la taille des buffers sur les Communications
asynchrones
A/ Taille (Message) < Buf_interne
B/ Taille(Message) > Buf_interne
Proc. Source
Proc. Destination
Asynch.−Non bloquant
(isend)
Proc. Source
Proc. Destination
Asynch.−Non bloquant
irecv(User_buf, Ireq)
Asynch.−Non bloquant
(isend)
buf_interne
Local copy
Réception bloquante
recv (User_buf)
User_buf
Attente message
wait(Ireq)
Message déjà dans User_buf
Transfer
(User_buf)
Temps
192 / 396
Communications asynchrones et surcoût MPI
Illustration sur un code de factorization de matrices creuses
(code disponible sous mumps.enseeiht.fr/)
recv standard
recv asynchrone
Application
MPI
VT_API
20%
40%
60%
80%
193 / 396
Communications asynchrones et performance
• Temps pour la factorisation LU
(Matrice creuse d’ordre 64838 avec 7Mega entrées, 8 procs d’un Cray
T3E):
type de réception
standard
asynchrone
∗
0
37.0
27.3
512
37.4
26.5
MPI buffer size (bytes)
1K 4K∗ 64K 512K
38.3 37.6 32.8
28.3
26.6 26.4 26.2
26.2
2Mega
26.4
26.4
Valeur par défaut sur le Cray T3E.
194 / 396
Remarques sur la taille des buffers systèmes
Changer la taille des buffers peut donc conduire à
I
Une modification de la performance
(temps attente, nombre de copies internes ...)
I
Des résultats faux
(causalité mal gérée)
I
De nouvelles situations d’interblocage
(codes basés sur des communications standards (mpi send et
mpi recv) )
tous les cas d’erreur correspondent à des programmes/algo. erronés
195 / 396
Qu’est-ce qui influence les performances ?
I
La distribution des données
I
L’équilibrage du travail sur les processus
I
Recouvrement des communications par les calculs
L’optimisation des communications :
I
I
I
I
I
choix du mode de communication
( point à point ? symétrique ? synchrone ? bufferisé ? bloquante
...)
Optimisation algorithmiques:
pipelining - blocage - envoi au plus tôt - prefetch . . .
exploitation des protocoles d’implémentation des communications
(et taille des buffers internes)
exploiter l’architecture du réseau (topologie, connexions
bidirectionnelles, fonctionnement de plusieurs canaux simultanés)
196 / 396
Outline
Description des standards pour la programmation en mode message
Distributed and heterogeneous computing using PVM
MPI : le standard pour le transfert de message
197 / 396
Description des standards pour la programmation en mode
message
198 / 396
Outline
Description des standards pour la programmation en mode message
Distributed and heterogeneous computing using PVM
MPI : le standard pour le transfert de message
199 / 396
Distributed and heterogeneous computing using PVM
I
Short overview of the PVM computing environment.
I
Simple example.
I
XPVM tracing tool used for illustration
I
Complete description of PVM : [2, 8, 3].
I
Many of the examples we use are coming from these references.
200 / 396
Overview of the PVM computing environment
PVM (Parallel Virtual Machine) :
I
Public domain software available on netlib
I
Developed by the Oak Ridge National Laboratory, the University
of Tennessee, the University of Carnegie Mellon, the Pittsburgh
Supercomputing Center and the Emory University of Atlanta.
I
Allows to use a network of heterogeneous UNIX computers
(either serial or parallel) as a unique computing resource referred
to as a virtual machine.
201 / 396
Workstation
Workstation
Fast network
Workstation
Workstation
Slow Network
Workstation
Mini−Comp
Super−Comp
Figure : Example of virtual machine
202 / 396
I
Daemon on each node of the virtual machine coordinates work
distributed on the virtual machine.
I
Host file : contains the list of computers and allows to
automatically activate the UNIX daemons and build the parallel
virtual machine at start-up.
I
Application viewed as a set of parallel processes (MIMD
programing mode) being executed on the processors of the
virtual machine
I
Communication and synchronization using message passing
I
Processes can be organized into groups (a process can belong to
several groups and groups can change at any time during
computation).
203 / 396
From the user point of view, the PVM package is composed of two
parts :
I
daemon process pvmd3: resides on each computer of the
parallel virtual machine. Can be started interactively or
automatically.
I
When user wants to run an application in the PVM environment:
I
I
I
pvmd3 starts a daemon on each node of a virtual machine
described in host file.
The application can then be started from any node.
pvm starts the PVM console used to interactively control and
modify the virtual machine both in terms of host nodes and
processes. pvm may be started and stopped multiple times on
any of the hosts.
204 / 396
I
set of library procedures: communication and synchronization
procedures used from C or FORTRAN.
I
I
I
I
I
Facilities to create and terminate processes,
to communicate between processes,
to synchronize processes,
to modify the parallel virtual machine,
and to manipulate process groups.
205 / 396
We focus on the main procedures of the PVM user library.
Complete version of PVM3 user library [8] available on netlib.
206 / 396
The PVM3 user library
Notations:
tid
ntask
tids()
bufid
msgtag
encoding
bytes
info
task
group
size
xp
stride
nitem
integer
integer
integer array
integer
integer
integer
integer
integer
character
character
integer
’what’
integer
integer
:
:
:
:
:
:
:
:
:
:
:
:
:
:
identifier of the PVM process
number of processes
array of PVM process identifiers
identifier of a buffer
message label
message coding
length of a message in bytes
erro message
name of an executable file
group identifier
size of the group
data array
stride between two elements
number of elements
Control of processes
Enroll a process in PVM
call pvmfmytid(tid)
At its first call, the pvmfmytid() procedure creates a PVM
process. pvmfmytid() returns the process identifier tid and may be
called several times. If the host node does not belong to the
parallel virtual machine then an error message is returned.
Leave PVM
call pvmfexit(info)
pvmfexit indicates to the local daemon (pvmd3) that the process
leaves the PVM environment. The process is not killed but it
cannot communicate (via PVM) with other PVM processes.
Kill another PVM process:
call pvmfkill(tid, info) pvmfkill kills the PVM process identified by
tid.
208 / 396
Activation of processes
Starting other processes on the virtual machine
call pvmfspawn(task, flag, where, ntask, tids, numt)
Starts ntask copies of executable file task. flag allows to control
the type of computer on which will be activated the processes.
Predefined values of flag :
PvmDefault PVM chooses the computers
PvmArch
where defines a target architecture.
PvmHost
where specifies a target computer.
PvmDebug
processes are activated in debugging mode.
numt → # processes actually activated. Task identifiers → first
numt positions of tids(ntask). Error codes (neg. values) → last
ntask-numt positions of tids().
Get tid of father: call pvmfparent(tid)
On exit tid → tid of parent process , otherwise tid set to negative
value PvmNoParent.
209 / 396
Fortran Example
SPMD programming mode
......
* Enroll task in PVM system
call pvmftid( mytid )
* Find out if I am parent or child *
All child processes have parents
call pvmfparent( tids( 0 ) )
if( tids( 0 ) .lt. 0 ) then
tids( 0 ) = mytid
me = 0
* Start up child tasks ( copies of parent task )
call pvmfspawn( ’spmd’, PVMDEFAULT, ’*’,
&
NPROC - 1, tids( 1 ), info )
endif
......
210 / 396
Interprocess communication
Communication between PVM processes based on message-passing.
PVM provides asynchronous send, blocking receive, and nonblocking
receive facilities.
Sending a message is done in three steps :
1. initialization of a send buffer and choice of an encoding format
to send data; (pvmfinitsend)
2. packing of data to be sent into the send buffer (pvmfpack);
3. actual send/broadcast of the message stored in the send buffer
to destination(s) process(es) (pvmfsend, pvmfcast).
211 / 396
Memory/data
Send buffer
pvmfpack
pvmfsend
Sending Process
Memory/data
Receive buffer
pvmfunpack
pvmfrecv
Receiving Process
Figure : Illustration of send/receive main steps
212 / 396
I
Main advantage of this strategy : user can compose his message
out of various pieces of data and therefore decrease the number
of messages effectively sent.
I
With the broadcast option, only one send buffer has to be filled.
I
If one large array of only a given data type needs to be sent
(pvmfpsend) has been designed to pack and send data in one
call to improve performance.
213 / 396
Reception is symmetric to the three step sending procedure After
reception of message into the active buffer, data are unpacked into
the destination arrays.
Various options to receive data are provided:
pvmfrecv
: blocking receive
pvmftrecv : timeout receive
pvmfnrecv : nonblocking receive
pvmprecv : combines blocking receive and unpacking.
214 / 396
Management of buffers
Clear/initialize send buffer
call pvmfinitsend( encoding, bufid)
clears the send buffer and prepare it for packing a new message.
Encoding scheme used during data packing defined by encoding.
Predefined values of encoding in FORTRAN:
PvmDefault The XDR encoding used
(heterogeneous network of computers).
PvmRaw
No encoding, native format of the host node.
PvmInPlace Data are not copied into the buffer which
only contains the size and pointers to the data.
Several buffers can be used simultaneously, but only one is active
buffer for sending/receiving data. Procedures to create/release
buffers (pvmfmkbuf, pvmffreebuf) to get/set the active send/receive
buffer (pvmfgetrbuf, pvmfgetsbuf, pvmfsetsbuf, pvmfsetrbuf) are
designed for this purpose.
215 / 396
Packing/unpacking data
call pvmfpack(what, xp, nitem, stride, info)
pvmfpack packs an array of data of a given type into the active
send buffer. A message containing data of different types may be
built using successive calls to pvmfpack. nitem elements chosen
each stride elements of the linear array xp of type what are packed
into the buffer.
Predefined values of what :
STRING, BYTE1, INTEGER2, INTEGER4
REAL4, REAL8, COMPLEX8, COMPLEX16
call pvmfunpack(what, xp, nitem, stride, info)
Similarly, pvmfunpack is used to unpack informations held into the
active receive buffer. The unpacked data are then stored into the
array xp.
216 / 396
Sending messages
Send : call pvmfsend(tid, msgtag, info)
pvmfsend sets the message label to msgtag then sends it to the
pvm process of number tid.
Broadcast : call pvmfmcast(ntask, tids, msgtag, info)
pvmfmcast broadcast the message to ntask processes specified
into the integer array tids.
Pack and send :
call pvmfpsend (tid, msgtag, xp, nitem, type, info)
217 / 396
Receiving Messages
Blocking receive
call pvmfrecv( tid, mstag, bufid )
Non Blocking Receive
call pvmfnrecv( tid, mstag, bufid )
( bufid = 0 ≡ message not received )
Wildcards
tid = -1 any message message tag mstag.
mstag = -1 any message message from tid.
tid = -1 and mstag = -1 any message.
218 / 396
Receive and unpack
call pvmfprecv(tid,msgtag,xp,nitem,type,rtid,rtag,ritem,info)
Check for arrived messages
call pvmfprobe(tid, msgtag, bufid)
If the message is not arrived then bufid =0, otherwise a buffer
number is returned but the message is not received.
A posteriori verification call pvmfbufinfo(bufid, bytes, msgtag,
tid, info)
pvmfbufinfo returns the characteristics of the message stored in
bufid: label msgtag, sending process tid, length in bytes bytes.
pvmfbufinfo is particularly useful in conjunction with pvmfprobe or
when the label –or the source– of the message to be received have
not been specified.
219 / 396
Sequential code
Parallel Approach
Do It = Ibeg, Ifin
(subdive the image)
Update image
(1)
(2)
(3)
(4)
Print image
Enddo
(1)
(2)
(3)
(4)
(4)
(1)
(3)
(2)
Master task
( Build a complete image at each iteration )
Slave task ( i )
Do It = Ibeg, Ifin
( Update image ( i ); Pack in active buffer )
call pvmfsend(tid_master, It, info)
Enddo
Do It = Ibeg, Ifin
Do Idummy= 1, Nb_slaves
call pvmfrecv ( −1, It, bufid)
( bufinfo −−> tids (Islave) )
( Unpack and Assemble image Islave )
Enddo
( Print full image )
Enddo
* SPMD Fortran example using PVM 3
* Enroll in pvm
call pvmfmytid( mytid )
call pvmfparent( tids( 0 ) )
if( tids( 0 ) .lt. 0 ) then
tids( 0 ) = mytid; me = 0
call pvmfspawn(’spmd’,PVMDEFAULT,’*’,NPROC-1,
tids( 1 ), info )
*
multicast tids array to children
call pvmfinitsend( PVMDEFAULT, info )
call pvmfpack( INTEGER4, tids( 1 ), NPROC-1, 1, info )
call pvmfmcast(NPROC-1,tids(1),msgt0,info)
else
*
receive the tids of brothers and identify
call pvmfrecv( tids( 0 ), msgt0, info )
call pvmfunpack( INTEGER4, tids(1),NPROC-1,1,info)
do i = 1, NPROC-1
if( mytid .eq. tids( i ) ) me = i
enddo
endif
call dowork(me,tids,NPROC )
call pvmfexit( info )
stop
end
221 / 396
s u b r o u t i n e dowork ( me , t i d s , n p r o c )
i n c l u d e ’ ??/ i n c l u d e / fpvm3 . h ’
∗ S i m p l e s u b r o u t i n e to p a s s a t o k e n a r o u n d a r i n g
i n t e g e r me , nproc , t i d s ( 0 : n p r o c )
i n t e g e r token , d e s t , count , s t r i d e , msgtag
c o u n t = 1 ; s t r i d e = 1 ; msgtag = 4
i f ( me . eq . 0 ) then
token = t i d s ( 0 )
c a l l pvmf i n i t s e n d ( PVMDEFAULT, i n f o )
c a l l pvmf pack ( INTEGER4 , token , count , s t r i d e , i n f o )
c a l l pvmf s e n d ( t i d s ( me + 1 ) , msgtag , i n f o )
c a l l pvmf r e c v ( t i d s ( n p r o c − 1 ) , msgtag , i n f o )
else
c a l l pvmf r e c v ( t i d s ( me − 1 ) , msgtag , i n f o )
c a l l pvmf unpack ( INTEGER4 , token , count , s t r i d e , i n f o )
c a l l pvmf i n i t s e n d ( PVMDEFAULT, i n f o )
c a l l pvmf pack ( INTEGER4 , token , count , s t r i d e , i n f o )
d e s t = t i d s ( me + 1 )
i f ( me . eq . nproc −1 ) d e s t = t i d s ( 0 )
c a l l { pvmfsend } ( d e s t , msgtag , i n f o )
endif
return
222 / 396
Management of process groups
Procedures to manage process groups form a layer on top of the
PVM layer (library libgpvm3.a).
Main characteristics of PVM groups:
• Any PVM process can join pvmfjoingroup and pvmfleave a
group;
• A process can belong to several groups;
• A message can be broadcasted to a PVM group from any PVM
process pvmfbcast
• Synchronization within a group can be performed using barriers
pvmfbarrier.
• Useful procedures: pvmfgettid, pvmfgetinst pvmfgsize, . . .
PVM 3.3 provides collective communication routines such as
pvmfreduce() that performs a global arithmetic operations (e.g.
global maximum or global sum) across a group. Must be called by all
processes in the group, final result is sent to a member specified as
root.
There is also a way of managing with system signals.
223 / 396
Illustrative Example: a dot version of the matrix vector
product
I
I
Straightforward static parallelization of the matrix-vector
product,
y = A×x
where A is a (m × n) matrix, x an n-vector, and y an m-vector.
Master-slave paradigm: Each process is in charge of computing
one block y . Additionally master process broadcasts the data to
the slaves and collects the final results.
The sequential FORTRAN code is:
do i = 1 ,
y( i ) =
do j =
y( i )
enddo
enddo
m
0 . 0 D0
1, n
= y ( i ) + A( i , j ) ∗ x ( j )
224 / 396
In the parallel implementation,
master
x
A
x
slave 1
x
first_row(1)
first_row(2)
first_row(3)
slave 2
x
slave 3
x
Figure : Static parallelization of the matrix vector product: A partitioned
into block of rows distributed on the slave processes.
225 / 396
• Master process
• Slave process
(the master holds A and x)
enroll into PVM
enroll into PVM
create slaves
send data to slaves
recv data from master
compute part of y
compute my block of y
receive results
send back results
leave PVM application
leave PVM application
Computation of one block of y is performed using GEMV from the
Level 2 BLAS (see [5]) which performs:
y = α A x + βy
226 / 396
Codes for master and slave processes
Master’s code:
*
* Enroll this program in Pvm
call pvmfmytid (my_id)
if (my_id .lt. 0) then
write(*,*) ’failure in enrolling on host’
stop
endif
write(*,*) ’ How many slave worstations will you used ’
read(*,*) nb_of_slaves
* Initiate nb_of_slaves instances of slave program
call pvmfspawn (’slave’,PVMDEFAULT,’*’,
&
nb_of_slaves,inst,numt)
* Check if everything is Ok
if (numt .ne. nb_of_slaves) stop
227 / 396
*
*
*
nb_of_processes = nb_of_slaves +1
do j=1,n
do i = 1,m
a(i,j) = DBLE(i+j)/DBLE(m+n) + one
enddo
x(j) = one + DBLE(j)/DBLE(n)
enddo
compute the index of the first row
performed by each process
first_row(1)
= 1
first_row(nb_of_processes+1) = m+1
j = (m / nb_of_processes)
if (nb_of_slaves.gt.0) then
do i=2,nb_of_processes
first_row(i) = j*(i-1) +1
enddo
work balancing
j = mod(m,nb_of_processes)
do i=1, j-1
first_row(nb_of_processes-i+1) =
&
first_row(nb_of_processes-i+1) +j -i
enddo
228 / 396
* broadcast n and x
type = 0
call pvmfinitsend ( PVMDATADEFAULT, bufidS)
call pvmfpack (INTEGER4, n, 1, 1, info)
call pvmfpack (REAL8,
x, n, 1, info)
call pvmfmcast (nb_of_slaves, inst, type, info)
* send its sub-matrix data to each slave process
type = 1
do no_slave = 1, nb_of_processes-1
*
number of components computed by the slave no_slave
j = first_row(no_slave+2) - first_row(no_slave+1)
call pvmfinitsend ( PVMDATADEFAULT, bufidS)
call pvmfpack (INTEGER4, j, 1, 1, info)
call pvmfsend (inst(no_slave), type, info)
do i=1, n
call pvmfinitsend ( PVMDATADEFAULT, bufidS)
call pvmfpack (REAL8,
&
a(first_row(no_slave+1),i),j,1,info)
call pvmfsend (inst(no_slave), type, info)
enddo
enddo
229 / 396
*
*
*
*
*
*
*
*
*
-----------------------------------compute its part of the work
-----------------------------------perform y <-- one*Ax + zero*y
where A is an matrix of order (first_row(1)-1) x n.
incx = 1
call dgemv(’N’,first_row(1)-1,n,one,a,lda,x,
&
incx,zero,y,incx)
---------------------collect results
---------------------type = 2
do no_slave = 1, nb_of_slaves
j holds number of rows computed by no_slave
j = first_row(no_slave+2) - first_row(no_slave+1)
call pvmfrecv (inst(no_slave), type, bufidR)
call pvmfunpack (REAL8,
&
y(first_row(no_slave+1)),j,1,info)
enddo
call pvmfexit(retcode)
stop
end
230 / 396
Slave’s code:
PROGRAM slave
...
double precision a(lda,lda),x(lda),y(lda),one,zero
* Enroll this program in PVM˙3
call pvmfmytid (my_id)
* Get the tid of the master’s task id
call pvmfparent (p_id)
* receive broadcasted data
type = 0
call pvmfrecv (p_id, type, bufid)
call pvmfunpack (INTEGER4, n, 1, 1, info)
call pvmfunpack (REAL8
, x, n, 1, info)
* receive my block of rows
type = 1
call pvmfrecv (p_id, type, bufidR)
call pvmfunpack (INTEGER4, m, 1, 1, info)
do 10, i=1,n
call pvmfrecv (p_id, type, bufidR)
call pvmfunpack (REAL8, a(1,i), m, 1, info)
10
continue
231 / 396
*
perform matrix-vector on my block of rows
incx = 1
call dgemv(’N’,m,n,one,a,lda,x,incx,zero,y,incx)
*
send back results to master process
type = 2
call pvmfinitsend (PVMDATADEFAULT, bufid)
call pvmfpack (REAL8, y, m, 1, info)
call pvmfsend (p_id, type, info)
* leave PVM environment
call pvmfexit (info)
stop
end
232 / 396
Makefile for Compilation - Link
PvmArch and PvmDir correspond respectively to target computer
and to location of the PVM library.
F77
= /usr/lang/f77
FOPTS = -O -u
# Specification of the target computer
PvmArch
=
SUN4
# Location of PVM libraries
PvmDir
=
/usr/local/pvm3/lib
# PVM libraries (C, FORTRAN, Group)
PVMLIB_C =
$(PvmDir)/$(PvmArch)/libpvm3.a
PVMLIB_F =
$(PvmDir)/$(PvmArch)/libfpvm3.a
PVMLIB_G =
$(PvmDir)/$(PvmArch)/libgpvm3.a
LIBS
=
$(PVMLIB_F) $(PVMLIB_C) $(PVMLIB_G)
# Location of the executable files
IDIR
= $(HOME)/pvm3/bin/$(PvmArch)
all : dotmatvec slave
dotmatvec : master.o $(BLAS) $(TIMING)
$(F77) -o dotmatvec master.o $(LIBS) -lblas
mv dotmatvec $(IDIR)
slave : slave.o $(BLAS)
$(F77) -o slave slave.o $(LIBS) -lblas
mv slave $(IDIR)
.f.o :
$(F77) $(FOPTS) -c $*.f
clean :
/bin/rm *.o
233 / 396
Configuration of the virtual machine
I
Configuration file describe the list of computers used.
I
Used to start the pvmd3 daemon on each computer listed.
I
Parallel Virtual Machine can be controled using the pvm console.
I
Other solution use directly the pvm console to build the virtual
machine.
I
Both solutions illustrated in the following example : a parallel
virtual machine of 4 RISC workstations (HP, IBM and two SUN)
is build. The HP workstation, pie, is our host computer.
234 / 396
Example
pie> cat hostfile
# comments
pie
pinson
goeland
aigle
pie> pvmd3 hostfile &
pie> pvm
> conf
4 hosts, 1 data format
HOST
DTID
pie
40000
pinson
80000
goeland
c0000
aigle
100000
pie> pvm
pvm> conf
1 host, 1 data format
HOST
DTID
pie
40000
pvm> add pinson goeland aigle
3 successful
HOST
DTID
pinson
80000
goeland
c0000
aigle
100000
ARCH
HPPA
SUN4
RS6K
SUN4
SPEED
1000
1000
1000
1000
ARCH
HPPA
SPEED
1000
235 / 396
Performance analysis and graphical interface
I
I
I
I
I
I
I
Analysis of the efficiency of the parallel execution of a program
complex problem by itself.
Time measures and speed-up estimations often not sufficient to
understand the behaviour of a parallel application.
Automatic tracing of parallel execution → indispensable tool
both to visualize the parallel behaviour and to debug.
PVM allows to control which events are generated and where
messages will be sent → quite complex to use.
XPVM: tracing tool exploiting automatically features of PVM.
PVM’s tracing facilities generate extra traffic in the network →
will perturb program execution.
We show traces obtained during parallel execution of
matrix-vector product. Target vitual machine = heterogeneous
set of 4 RISC workstations. Master process located on computer
node rosanna.
236 / 396
Figure : XPVM trace of the static parallelisation of the matrix-vector
product
Note that the fastest computer (sharon) is idle most of the time.
237 / 396
Outline
Description des standards pour la programmation en mode message
Distributed and heterogeneous computing using PVM
MPI : le standard pour le transfert de message
238 / 396
MPI : le standard pour le transfert de message
1. Effort de définition d’un standard de transfert de message pour
les utilisateurs de développeurs
2. Juin 94 Version 1.0 issue du forum MPI Message Passing
Interface [14, 7]
3. Objectifs :
I
I
I
portabilité, simplicité
utilisation plus large du calcul distribué
implantation par les constructeurs
4. Pour multiprocesseurs, clusters et réseaux de calculateurs
Accessible sur le site netlib ou sur le Web, voir par exemple :
http://www.enseeiht.fr or http://www.netlib.org
Versions publiques disponibles: LAM (Univ. Notre Dame), MPICH
(Argonne Nat. Lab.), OpenMPI (www.open-mpi.org).
239 / 396
Notions basiques
I
Groupe de processus MPI
I
Contexte : pour définir des flots de messages indépendants.
I
Communicateur: permet de définir un contexte de
communication au sein d’un groupe de processus.
I
Message : contexte et un numéro de message/contexte
I
4 modes de communication : bloquants, non-bloquants,
synchrones, bufferisés.
I
Communication collectives et définition de sous-groupes
I
Modèle de programmation SPMD, 125 fonctions dont 6 de
base : MPI Init, MPI Finalize, MPI Comm size,
MPI Comm rank, MPI Send, MPI Recv
240 / 396
Environnement
I
enregistrement : call MPI Init( info )
I
terminaison : call MPI Finalize
I
contexte par défaut : MPI COMM WORLD : tâches numérotées
0, . . . , N-1
I
création de nouveaux contextes : définir des nouveaux groupes
de processus et un nouveau contexte
241 / 396
Example : Hello world
#i n c l u d e ” mpi . h”
#i n c l u d e < s t d i o . h>
i n t main ( a r g c , a r g v )
int argc ;
char ∗∗ a r g v ;
{ i n t rank , s i z e
M P I I n i t ( &a r g c , &a r g v ) ;
MPI Comm rank ( MPI COMM WORLD, &r a n k ) ;
MPI Comm size ( MPI COMM WORLD, & s i z e ) ;
p r i n t f ( ” H e l l o w o r l d ! I ’m %d o f %d\n” , rank , s i z e ) ;
MPI Finalize ();
return 0: }
Exécution sous MPICH avec : mpirun -np 2 hello
printf exécuté par 2 processus.
242 / 396
Envoi / réception message : opérations de base
I
Envoi/Réception de données de type datatype rangées à @ :
I
I
call MPI Send ( @, nb, datatype, dest, mess id, comm,info)
call MPI Recv ( @, nb, datatype, source, mess id, comm, status,
info )
I
Diffusion: toutes les tâches émettent la requète; les données
sont envoyées par le processus root:
call MPI Bcast ( @,nb,datatype,root,mess id,context,info)
I
Opération collective: Le processus root reçoit les résultats:
call MPI Reduce ( @, results, nb, datatype, operation, root,
context, info )
datatype peut être prédéfini (MPI real) ou défini par l’utilisateur;
context définit le groupe de tâches et le contexte
243 / 396
Les modes de communication point à point
Bloquant L’émetteur est bloqué jusqu’à ce que la donnée envoyée
puisse être réutilisée en toute sécurité.
Synchrone Le retour d’un envoi synchrone indique que la donnée
envoyée a commencé à etre reçue par le récepteur.
Bufferisé Le retour d’un envoi bufferisé indique que la donnée a été
copiée dans le buffer.
Ready L’envoi n’est possible que si le destinataire a déjà posté une
reception
244 / 396
Sémantique des communications point à point
I
MPI Send et MPI Recv: Asynchrone et Bloquant;
L’émetteur est bloqué jusqu’à ce que la donnée envoyée puisse
être réutilisée en toute sécurité.
245 / 396
Sémantique des communications point à point
I
I
MPI Send et MPI Recv: Asynchrone et Bloquant;
L’émetteur est bloqué jusqu’à ce que la donnée envoyée puisse
être réutilisée en toute sécurité.
MPI Bsend: Bufferisé, Asynchrone, et Bloquant;
L’utilisateur définit un buffer
(MPI Buffer Attach/Detach(buffer, size). L’envoyeur est
bloqué jusqu’a ce que la donnée envoyée ait été copiée dans le
buffer (erreur si buffer plein/petit).
246 / 396
Sémantique des communications point à point
I
I
I
MPI Send et MPI Recv: Asynchrone et Bloquant;
L’émetteur est bloqué jusqu’à ce que la donnée envoyée puisse
être réutilisée en toute sécurité.
MPI Bsend: Bufferisé, Asynchrone, et Bloquant;
L’utilisateur définit un buffer
(MPI Buffer Attach/Detach(buffer, size). L’envoyeur est
bloqué jusqu’a ce que la donnée envoyée ait été copiée dans le
buffer (erreur si buffer plein/petit).
MPI Isend, MPI Irecv: Asynchrone et Non bloquant;
En retour, la donnée envoyée ne doit pas être modifiée.
MPI Wait, MPI Test pour gérer les données.
247 / 396
Sémantique des communications point à point
I
I
I
I
MPI Send et MPI Recv: Asynchrone et Bloquant;
L’émetteur est bloqué jusqu’à ce que la donnée envoyée puisse
être réutilisée en toute sécurité.
MPI Bsend: Bufferisé, Asynchrone, et Bloquant;
L’utilisateur définit un buffer
(MPI Buffer Attach/Detach(buffer, size). L’envoyeur est
bloqué jusqu’a ce que la donnée envoyée ait été copiée dans le
buffer (erreur si buffer plein/petit).
MPI Isend, MPI Irecv: Asynchrone et Non bloquant;
En retour, la donnée envoyée ne doit pas être modifiée.
MPI Wait, MPI Test pour gérer les données.
MPI Ssend, MPI Srecv : Synchrone (rendez-vous);
Le retour de MPI Ssend indique que la donnée envoyée est
réutilisable ET que le recepteur a commencé à recevoir.
248 / 396
Sémantique des communications point à point
I
I
I
I
I
MPI Send et MPI Recv: Asynchrone et Bloquant;
L’émetteur est bloqué jusqu’à ce que la donnée envoyée puisse
être réutilisée en toute sécurité.
MPI Bsend: Bufferisé, Asynchrone, et Bloquant;
L’utilisateur définit un buffer
(MPI Buffer Attach/Detach(buffer, size). L’envoyeur est
bloqué jusqu’a ce que la donnée envoyée ait été copiée dans le
buffer (erreur si buffer plein/petit).
MPI Isend, MPI Irecv: Asynchrone et Non bloquant;
En retour, la donnée envoyée ne doit pas être modifiée.
MPI Wait, MPI Test pour gérer les données.
MPI Ssend, MPI Srecv : Synchrone (rendez-vous);
Le retour de MPI Ssend indique que la donnée envoyée est
réutilisable ET que le recepteur a commencé à recevoir.
MPI Rsend : Ready et bloquant;
L’envoi bloquant n’est possible que si le destinataire a déjà posté
une reception (sinon erreur).
249 / 396
Attente ou test de messages
MPI Probe (Source, label, comm, status): Attend l’arrivée d’un
message (source,label) mais ne le reçoit pas.
MPI IProbe (Source, label, comm, status): Regarde si message
disponible
MPI Any Source,MPI Any Tag : n’importe quel source ou label
Associé à une requête non bloquante
(par ex MPI ISend/MPI IRecv):
MPI Wait (Request) : Attente
MPI Test (Request) : Test
MPI Cancel (Request) : Nettoyage, utilisation parfois délicate.
250 / 396
Exercice 1: communications point à point
I
En supposant que I = non-bloquant, S=synchrone,
R=ReadyMode, déduire la sémantique des primitives MPI
suivantes:
1. MPI IRsend ( . . . , Ireq, . . . )
251 / 396
Exercice 1: communications point à point
I
En supposant que I = non-bloquant, S=synchrone,
R=ReadyMode, déduire la sémantique des primitives MPI
suivantes:
1. MPI IRsend ( . . . , Ireq, . . . )
Retour immédiat si le destinataire a déjà posté une réception
sinon erreur de retour (pour le reste idem MPI Isend).
252 / 396
Exercice 1: communications point à point
I
En supposant que I = non-bloquant, S=synchrone,
R=ReadyMode, déduire la sémantique des primitives MPI
suivantes:
1. MPI IRsend ( . . . , Ireq, . . . )
Retour immédiat si le destinataire a déjà posté une réception
sinon erreur de retour (pour le reste idem MPI Isend).
2. MPI ISsend ( . . . , Ireq, . . . )
253 / 396
Exercice 1: communications point à point
I
En supposant que I = non-bloquant, S=synchrone,
R=ReadyMode, déduire la sémantique des primitives MPI
suivantes:
1. MPI IRsend ( . . . , Ireq, . . . )
Retour immédiat si le destinataire a déjà posté une réception
sinon erreur de retour (pour le reste idem MPI Isend).
2. MPI ISsend ( . . . , Ireq, . . . )
Retour immédiat. Le S de ISsend : la fin de l’envoi (obtenue par
ex. après un MPI Wait(Ireq)) garantit que le récepteur est en
train de recevoir l’information. Ce n’est pas le cas avec un
MPI wait consécutif à un MPI ISend. Par contre rien ne garantit
que la communication soit finie.
254 / 396
Exercice 1: communications point à point
I
En supposant que I = non-bloquant, S=synchrone,
R=ReadyMode, déduire la sémantique des primitives MPI
suivantes:
1. MPI IRsend ( . . . , Ireq, . . . )
Retour immédiat si le destinataire a déjà posté une réception
sinon erreur de retour (pour le reste idem MPI Isend).
2. MPI ISsend ( . . . , Ireq, . . . )
Retour immédiat. Le S de ISsend : la fin de l’envoi (obtenue par
ex. après un MPI Wait(Ireq)) garantit que le récepteur est en
train de recevoir l’information. Ce n’est pas le cas avec un
MPI wait consécutif à un MPI ISend. Par contre rien ne garantit
que la communication soit finie.
3. MPI IBsend ( . . . , Ireq, . . . )
255 / 396
Exercice 1: communications point à point
I
En supposant que I = non-bloquant, S=synchrone,
R=ReadyMode, déduire la sémantique des primitives MPI
suivantes:
1. MPI IRsend ( . . . , Ireq, . . . )
Retour immédiat si le destinataire a déjà posté une réception
sinon erreur de retour (pour le reste idem MPI Isend).
2. MPI ISsend ( . . . , Ireq, . . . )
Retour immédiat. Le S de ISsend : la fin de l’envoi (obtenue par
ex. après un MPI Wait(Ireq)) garantit que le récepteur est en
train de recevoir l’information. Ce n’est pas le cas avec un
MPI wait consécutif à un MPI ISend. Par contre rien ne garantit
que la communication soit finie.
3. MPI IBsend ( . . . , Ireq, . . . ) Retour immédiat. Le B de IBsend
: la fin de l’envoi (obtenue par ex. après un MPI Wait(Ireq))
garantit que le message est bufferisé mais ne garantit pas qu’il ait
été envoyé. (cas d’erreur: le buffer est trop petit).
256 / 396
Exercice 2: Communications point à point
I
Commenter le comportement du programme suivant (exécuté
sur 2 processus):
CALL MPI COMM RANK(comm , rank , i e r r )
tag = 1
IF ( r a n k . EQ . 0 ) THEN
dest = 1
ELSE
dest = 0
ENDIF
CALL MPI Send ( SData , count , MPI REAL , d e s t , tag , comm , i e r r )
CALL MPI Recv ( RData , count , MPI REAL , d e s t , tag , comm , i e r r )
257 / 396
Exercice 2: Communications point à point
I
Commenter le comportement du programme suivant (exécuté
sur 2 processus):
CALL MPI COMM RANK(comm , rank , i e r r )
tag = 1
IF ( r a n k . EQ . 0 ) THEN
dest = 1
ELSE
dest = 0
ENDIF
CALL MPI Send ( SData , count , MPI REAL , d e s t , tag , comm , i e r r )
CALL MPI Recv ( RData , count , MPI REAL , d e s t , tag , comm , i e r r )
Le message envoyé doit être copié pour que l’envoi se débloque.
Le programme ne peut donc se finir que si au moins un des deux
messages est copié dans un buffer interne local
258 / 396
Exercice 2: Communications point à point
I
Commenter le comportement du programme suivant (exécuté
sur 2 processus):
CALL MPI COMM RANK(comm , rank , i e r r )
tag = 1
IF ( r a n k . EQ . 0 ) THEN
dest = 1
ELSE
dest = 0
ENDIF
CALL MPI Send ( SData , count , MPI REAL , d e s t , tag , comm , i e r r )
CALL MPI Recv ( RData , count , MPI REAL , d e s t , tag , comm , i e r r )
Le message envoyé doit être copié pour que l’envoi se débloque.
Le programme ne peut donc se finir que si au moins un des deux
messages est copié dans un buffer interne local
Pour des messages de grande taille cela peut donc entraı̂ner un
interblocage des processus
259 / 396
Communication glogales
I
Barrières MPI Barrier (communicateur) : bloque l’appelant
jusqu’à ce que tous les proc membres du communicateur aient
effectués l’appel.
I
Broadcast MPI Bcast
I
réduction disponible sur un proc ou sur tous
MPI Reduce/MPI Allreduce: max global, somme globale, . . .
I
scatter / gather, all to all
260 / 396
Communications persistantes-Illustration
Cas de communications effectuées en boucle dans un programme
1. Initialisation(s) d’envoi(s)/réception(s):
MPI xSend Init ( ..., Req ) / MPI xRecv Init ( Req )
Possibilité de faire de multiples initialisations
2. Lancement effectif dans la boucle
MPI Start ( Req )
3. Attente de requêtes (multiples) dans la boucle:
MPI Wait, MPI Wait All, MPI Wait Some
MPI Test, MPI Test All, MPI Test Some
All = attente fin de toutes les requêtes mentionnées à l’appel
Some = au moins une a fini (out: liste des requêtes finies)
Any = attendre la fin d’une requête choisie parmi toutes celles
finies (out: une requête finie)
(utilisable bien sûr aussi avec des requêtes non bloquantes
classiques)
261 / 396
Exercice: Recouvrir calcul et communications
Soit le programme suivant:
CALL MPI COMM RANK(comm , rank , i e r r )
p r e v = rank −1; n e x t = r a n k+1
IF ( r a n k . EQ . N p r o c s ) n e x t = 0
IF ( r a n k . EQ. 0
) p r e v = n p r o c s −1
IF ( r a n k . EQ . 0 ) THEN
CALL MPI Send ( SData , count , MPI REAL , n e x t , tag , comm , i e r r )
CALL C a l c u l ( r a n k ) ! Rdata and S d a t a n o t u s e d i n C a l c u l
CALL MPI Recv ( RData , count , MPI REAL , p r e c , tag , comm , i e r r )
ELSE
CALL MPI Recv ( RData , count , MPI REAL , p r e c , tag , comm , i e r r )
CALL MPI Send ( SData , count , MPI REAL , n e x t , tag , comm , i e r r )
CALL C a l c u l ( r a n k ) ! Rdata and S d a t a n o t u s e d i n C a l c u l
ENDIF
Hypothèses :
I Protocole long (synchrone) pour messages longs.
I Si l’émetteur est occupé (sans appel MPI) la communication ne
peut démarrer. Un timeout (MPI) est souvent associé à la notion
de calcul non interruptible.
262 / 396
Exercice: Recouvrir calcul et communications (suite)
IF ( r a n k . EQ . 0 ) THEN
CALL MPI Send ( SData , count , MPI REAL , d e s t
CALL C a l c u l ( r a n k ) ! Rdata n o t u s e d i n
CALL MPI Recv ( RData , count , MPI REAL , d e s t
ELSE
CALL MPI Recv ( RData , count , MPI REAL , d e s t
CALL MPI Send ( SData , count , MPI REAL , d e s t
CALL C a l c u l ( r a n k ) ! Rdata n o t u s e d i n
ENDIF
, tag , comm , i e r r )
Calcul
, tag , comm , i e r r )
, tag , comm , i e r r )
, tag , comm , i e r r )
Calcul
On suppose Nprocs=3; Sdata de grande taille (temps de comm
50sec); Temps de Calcul(rank)= (200, 150, 150)sec.
1. Calculer le temps d’exécution.
2. Pour recouvrir calcul et communications on propose de
remplacer MPI Send par un appel non-bloquant MPI ISend.
I
Calculer le temps d’exécution.
3. Comment réduire le temps d’exécution ?
263 / 396
Solution (I)
IF ( r a n k . EQ . 0 ) THEN
CALL MPI Send ( SData , count , MPI REAL , n e x t , tag , comm , i e r r )
CALL C a l c u l ( r a n k ) ! Rdata and S d a t a n o t u s e d i n c a l c u l
CALL MPI Recv ( RData , count , MPI REAL , p r e c , tag , comm , i e r r )
ELSE
CALL MPI Recv ( RData , count , MPI REAL , p r e c , tag , comm , i e r r )
CALL MPI Send ( SData , count , MPI REAL , n e x t , tag , comm , i e r r )
CALL C a l c u l ( r a n k ) ! Rdata and S d a t a n o t u s e d i n C a l c u l
ENDIF
1. MPI Send: Temps
= Max(50+200+50, 50+150+50, (100+150+50+150) = 450 sec
Le fait que la reception n’ait pas été postée plus tôt par P0 est
une catastrophe !
2. MPI ISend: Temps = 200 + 50 + 150 + 50 + 150 + 50 = 650 sec;
On a en plus perdu le recouvrement entre le calcul de PO et de P1
!!
264 / 396
Solution (II) avec modification Recv sur proc0
IF ( r a n k . EQ . 0 ) THEN
CALL MPI Send ( SData , count , MPI REAL , n e x t , tag , comm , i e r r )
CALL M P I I r e c v ( RData , count , MPI REAL , p r e c , tag , comm , I r e q , i e r r )
CALL C a l c u l ( r a n k ) ! Rdata n o t u s e d i n c a l c u l
CALL MPI Wait ( I r e q )
ELSE
CALL MPI Recv ( RData , count , MPI REAL , p r e c , tag , comm , i e r r )
CALL MPI Send ( SData , count , MPI REAL , n e x t , tag , comm , i e r r )
CALL C a l c u l ( r a n k ) ! Rdata n o t u s e d i n C a l c u l
ENDIF
Influence du type d’envoi:
MPI send: Temps= max(50 + 200, 100 + 150, 150 + 150) = 300sec
MPI Isend: Temps = 200 + 50 + 150 + 50 + 150 = 600 sec !!!
MPI Ssend Temps= 300 sec (plus robuste que MPI Send)
MPI ISsend: Idem MPI Isend
MPI ISsend(Ireq)+MPI Wait(Ireq): Idem MPI Ssend
Bricole: Ajouter des MPI Bidon dans calcul ou réduire le paramètre
MPI du timeout
265 / 396
MPI: remarques conclusives
I
Très grande richesse pour exprimer la communication (point à
point, collective)
I
La sémantique de MPI Send/Recv doit être respectée (risque
d’interblocage)
Ajouts de MPI-2 vis à vis de MPI-1
I
I
I
I
I
I
Gestion dynamique des proc (MPI Comm Spawn, idem PVM)
plus extensions pour fusionner les communicateurs
((MPI Intercomm Merge).
IO parallèle (bloquante ou non, collective ou non)
Communications mémoire à mémoire (PUT/GET)
Interaction avec threads
Disponibles dans OpenMPI et LAM mais pas encore chez tous les
constructeurs (dont IBM).
266 / 396
Outline
Analyse de performance et modélisation des algorithmes
Terminologie
Exemples d’outils pour l’analyse de performances
Modélisation de Hockney et Jesshope
Les modèles utilisés
Exemple d’analyse de performance d’algorithmes : Produit
Matrice-Vecteur
267 / 396
Analyse de performance et modélisation des algorithmes
1. Evaluation des performances d’un algorithme =⇒ l’utilisation
de modèles pour :
1.1 Caractériser la machine cible
I
I
I
I
I
Le processeur
(Unités de calcul et d’accès mémoire, fréquence d’horloge, degré
de parallélisme interne ... )
Hiérarchie mémoire
(registres, cache, mémoire locale, globale, disque ...)
Réseau d’interconnection entre modules mémoires et processeurs.
Temps d’accès aux couches mémoires
(incluant les Entrées/Sorties sur disque)
Coûts de communication/synchronisation
268 / 396
1. l’algorithme
I
I
I
I
Objectif : représenter le parallélisme intrinsèque de l’algorithme,
Graphes de dépendance des calculs,
Graphe de flot de données,
Ces graphes peuvent être valués et orientés.
2. l’exécution du programme
I
I
I
Objectif : Analyse et classification a priori d’un algorithme.
Comment : simuler l’exécution du programme (de son modèle)
sur la machine cible (un modèle simplifié).
Un modèle d’exécution est donc caractérisé par les hypothèses
effectuées:
2.1 nombre borné ou infini de processeurs.
2.2 mémoire (globale, distribuée, infinie ..)
2.3 stratégie d’allocation des tâches sur les processeurs.
269 / 396
L’analyse des performances réelles
I
I
Permet la validation des modèles précédents.
Souvent difficile pour un code parallèle :
1. Choix de l’unité de mesure ?
2. influence de la taille du problème, architecture, charge du système
sur la mesure ?
I
Utilisation d’analyseurs automatiques de traces d’exécution
souvent indispensable.
270 / 396
Outline
Analyse de performance et modélisation des algorithmes
Terminologie
Exemples d’outils pour l’analyse de performances
Modélisation de Hockney et Jesshope
Les modèles utilisés
Exemple d’analyse de performance d’algorithmes : Produit
Matrice-Vecteur
271 / 396
Terminologie
I
I
Problème: taille N exécuté sur p processeurs.
Vitesse: Nombre d’opérations par secondes
I
I
Flops: Opérations en virgule flottante par secondes
(Mflops(106 ), Gflops(109 ), Teraflops(1012 ))
Mips: Millions d’instructions élémentaires par secondes.
(1 flops −→ k instruc. de base)
I
Temps d’exécution séquentielle: T1 (N) = Ts (N) + Tpar (N)
I
Temps d’exécution parallèle: Tp (N, p)
I
Temps de surcoût parallèle Tsc (N, p) (communication,
synchronisation ...)
Tp (N, p) = Ts (N) +
Tpar (N)
+ Tsc (N, p)
p
272 / 396
I
Accélération (speed-up):
Sp (N, p) =
I
I
T1 (N)
Tp (N, p)
Sp > 1 =⇒ speed-up ; et Sp (N, p) < 1 =⇒ speed-down
Sp (N, p) > p =⇒speed-up superlinéaire.
(meilleure utilisation des hiérarchies mémoires, meilleur
comportement de l’algorithme parallèle)
273 / 396
100
Ts=Tsc=0
Ts>0, Tsc=0
10
Speedup
Ts>0, Tsc>0
1
1
10
100
1000
10000
Nb Processeurs
Figure : 3 comportements extrêmes
274 / 396
I
I
Si Tsc = 0 alors
Sp =
Ts + Tpar
Ts +
Tpar
p
donc S∞ = limp→∞ Sp = T1 /Ts ,
S∞ = 1 + Tpar /Ts
soit p 12 = Tpar (N)/Ts (N) alors:
Sp =
S∞
(1 + p 21 /p)
Remarques:
1. p 1 ∈ [0, ∞] et correspond au poids relatif de la partie //
2
(= 0 pas de //, = ∞ tout //).
2. p = p 1 =⇒ Sp = S∞
2
2
p 1 correspond au nombre de processeurs pour atteindre la moitié
2
de S∞ .
3. Si p ≥ 4p 1 alors 80% de S∞ est déjà atteint.
2
275 / 396
I
I
Si Tsc > 0 alors
Posons, par exemple: Tsc = αp alors
Sp =
1+
p1
2
p
S
∞ 2
p
1 + popt
p
où popt = Tpar /α et correspond au speed-up maximum Sopt .
Exemple: Tp = 1 + 10
p + 0.001p =⇒ Sopt = 9.17
I
Efficacité:
Ep (N, p) =
Sp (N, p)
p
1. Pour N fixé, si Tsc est une fonction croissante de p alors Ep
décroit avec p
2. Pour p fixé et Ts = 0, si Tsc croı̂t moins vite que T1 alors
Ep augmente avec N
276 / 396
I
Scalabilité:
Capacité à conserver Ep (N, p) constante lorsque p augmente.
T1 (N) doit augmenter de façon exponentielle =⇒ le sytème
est dit peu scalable.
T1 (N) doit augmenter linéairement =⇒ le sytème est
scalable.
I
Isoefficacité:
Mesure de scalabilité d’un algorithme parallèle, elle relie la taille
du problème au nombre de processeurs nécessaires pour
maintenir Ep = cte ou Sp croissant linéairement avec p.
1. On cherche le polynome d’ordre m, m ≥ 1 tel que
E (p, N) = E (kp, am N m + ... + a1 N + a0)
2. Plus m est petit plus le système est scalable.
277 / 396
I
Granularité:
Designe le volume de calcul effectué entre deux points de
synchronisation.
I
Equilibrage ou “load balancing”
Un calcul parallèle est équilibré si chaque processeur a à peu près
la même quantité de travail à effectuer.
278 / 396
Loi d’Amdahl pour le calcul parallèle (loi de Ware)
RAPPEL
I
Soit le programme P.
I
T1 : temps d’exécution de P sur 1 processeur
I
f : fraction de P pouvant être exécutée sur p processeurs
I
1 − f : zone séquentielle de P
I
Tp : temps d’exécution de P sur p processeurs
I
Tp = temps d’exéc. Séq. + temps d’exéc. Par.
I
temps d’exéc. Séq. = (1 − f )T1
I
temps d’exéc. Par. =
I
Tp = (1 − f ) × T1 +
f ×T1
p
f ×T1
et
p
Sp =
T1
Tp
279 / 396
I
Speed-up théorique avec p processeurs : Sp =
I
De façon plus réaliste :
Tp ≤
p
f +(1−f )×p
(f + (1 − f ) × p) × T1
(f + (1 − f ) × p) × T1
ou Tp =
+O
p
p
O overhead prenant en compte :
I
I
I
I
overheads de synchronisation
transferts de données (archi. mém. distribuée)
contentions mémoire
...
p
f +(1−f )p
I
MAIS quel que soit O : Sp ≤
I
Pour un nombre infini de processeurs : Speed-up maximum
S∞ ≤
1
1−f
280 / 396
Table : A very optimistic table
f
1.00
0.99
0.98
0.96
0.92
0.90
0.80
0.70
2
2
1.98
1.96
1.92
1.85
1.82
1.67
1.54
3
3
2.94
2.88
2.78
2.59
2.50
2.14
1.88
Number of processors p
4
8
16
32
4
8
16
32
3.88 7.48 13.91 24.43
3.77 7.02 12.31 19.75
3.57 6.25 10.00 14.29
3.23 5.13 7.27
9.19
3.08 4.71 6.40
7.80
2.50 3.33 4.00
4.44
2.11 2.58 2.91
3.11
64
64
39.26
28.32
18.18
10.60
8.77
4.71
3.22
∞
∞
100
50
25
12.50
10.00
5.00
3.33
281 / 396
Outline
Analyse de performance et modélisation des algorithmes
Terminologie
Exemples d’outils pour l’analyse de performances
Modélisation de Hockney et Jesshope
Les modèles utilisés
Exemple d’analyse de performance d’algorithmes : Produit
Matrice-Vecteur
282 / 396
Exemples d’outils pour l’analyse de performances
283 / 396
Profiling automatique
Objectif :
Etude du temps passé dans les unités de programme : en général
procédures/fonctions, mais aussi parfois boucles et intructions.
1. exemple : gprof sous UNIX permet d’étudier le temps passé par
procédure.
1.1 Compilation des sources avec options appropriées (habituellement
-pg ou -p)
1.2 L’exécution produit un fichier gmon.out
1.3 Postraitement, avec options multiples, du fichier gmon.out:
gprof [options] nom executable > fichier profile
284 / 396
Exemple de fichier profile obtenu :
%
cumulative
time
seconds
98.6
218.79
0.7
220.39
0.6
221.63
0.1
221.87
....
self
seconds
218.79
1.60
1.24
0.24
self
total
calls ms/call ms/call name
1 218790.00 218790.0 _matmul_ [3]
5
320.00
320.0 _matsum_ [4]
1 1240.00 221880.0 _MAIN__ [1]
1
240.00
240.0 _matvec_ [5]
285 / 396
La seconde partie du fichier profile permet d’identifier l’arbre d’appel
(parents et descendants) de chaque routine.
called/total
called+self
called/total
1.24
220.64
1/1
[1]
100.0
1.24
220.64
1
218.79
0.00
1/1
1.60
0.00
5/5
0.24
0.00
1/1
----------------------------------------------[2]
100.0
0.00
221.88
1.24
220.64
1/1
0.00
0.00
1/2
----------------------------------------------218.79
0.00
1/1
[3]
98.6 218.79
0.00
1
----------------------------------------------1.60
0.00
5/5
[4]
0.7
1.60
0.00
5
----------------------------------------------0.24
0.00
1/1
[5]
0.1
0.24
0.00
1
----------------------------------------------...
index
%time
self descendents
parents
name
index
children
_main [2]
_MAIN__ [1]
_matmul_ [3]
_matsum_ [4]
_matvec_ [5]
_main [2]
_MAIN__ [1]
_getenv [49]
_MAIN__ [1]
_matmul_ [3]
_MAIN__ [1]
_matsum_ [4]
_MAIN__ [1]
_matvec_ [5]
286 / 396
Analyse automatiques de la performance et des cache-hits sur CRAY
T3D (code de mécanique des fluides):
secs
Mflops
data caches time
PVMFRECV:11400
gradvelo: 672
7.58
82.89%
infl3dc : 602
5.03
76.71%
gradvel : 202
8.31
81.29%
grad3d : 322
5.94
76.06%
nufl3dc : 414
5.82
55.76%
PVMFSEND: 635
SQRT
: 320
vsfl3dc : 217
9.09
80.07%
ns3dc
: 256
2.50
81.91%
implrssm: 177
7.59
57.58%
edvialg : 139
3.86
49.22%
shearstr:
52
15.89
78.34%
dtvis3dc: 127
6.79
68.03%
updpct :
83.5
6.55
84.15%
heatflpg:
45.0
6.39
70.70%
EXP
:
53.7
Total code:
12100 secs
969 ( 6.07%) work
2514 (15.76%) loading instructions and data cache
12061 (75.59%) waiting on PVM communication
411 ( 2.58%) uninstrumented functions
287 / 396
Analyse de performance des boucles
I
I
Traces obtenues sur CONVEX −→ analyse beaucoup plus fine.
Première partie: analyse du temps
Optimization Times
teration Count
CPU Time
Line NL
Report
Exec
Min
Max
Avg (less inner loops)
---- --- ----------- -------- ----- ------ ----- ---------------129
0 SM
200
3078
3078
3078
0.916022
164
0 SM
201
3078
3078
3078
0.917755
200
0 SM
401
1977
1977
1977
0.369021
288 / 396
Deuxième partie: analyse du comportement. On peut par exemple
calculer le rapport Nb flops sur Nb ref mémoire (i.e. Vector flops /
Chime count).
Static Profile
Estimated Mflops
Vector Vector Chime (less inner loops) (plus inner loops)
Line NL Spills Flops
Count
Avg
Peak
Avg
Peak
---- --- ------ ------- ------- --------- --------- ------- -----129
0
0
28
36
18.817
19.444
18.817
19.444
164
0
0
28
36
18.875
19.444
18.875
19.444
200
0
0
6
8
12.890
18.750
12.890
18.750
289 / 396
Outline
Analyse de performance et modélisation des algorithmes
Terminologie
Exemples d’outils pour l’analyse de performances
Modélisation de Hockney et Jesshope
Les modèles utilisés
Exemple d’analyse de performance d’algorithmes : Produit
Matrice-Vecteur
290 / 396
Modélisation de Hockney et Jesshope
Mesurer l’efficacité d’un algorithme dans l’utilisation d’un processeur
possédant des unités pipelinées (unités de calcul ou accès mémoire).
Nombres r∞ et n 1 .
2
I
rn : performance (en Mflops) sur des vecteurs de taille n
I
r∞ : performance (en Mflops) obtenue sur de vecteurs de taille
infinie.
but : étudier la différence entre performance réelle et théorique
I
n 1 : taille minimum de vecteur pour atteindre r∞ /2
2
but : étudier les surcoûts venant des temps d’amorçage des
pipelines (de calculs ou d’accès mémoire)
291 / 396
I
Exemple du produit scalaire:
1. Sur calculateur vectoriel Cray T90, Performance de crête (1 proc)
=1800 Mflops
r∞ = 872 Mflops et n 12 = 304
2. Sur calculateur scalaire SGI Origin 2000, Performance de crête (1
proc) =360 Mflops
r∞ = 194 Mflops et n 12 = 7
c’est l’effet du cache primaire qui est ici mesuré par n 12
3. Sur machines scalaires sans cache et sans pipeline n 12 = 0 car
temps ”startup” est nul.
292 / 396
I
Approximation de la performance d’une boucle de taille n :
rn =
r∞
n1
2
n
+1
alors limn→∞ rn = r∞ et rn 1 = r∞ /2
2
I
Comment calculer r∞ et n 1 ?
2
(pour une boucle et un calculateur donnné)
1. Mesure de la performance pour différentes longueurs de vecteur.
2. Approximation aux moindres carrés
293 / 396
Traces d’exécution d’un code parallèle
I
Outils de mise au point et d’analyse de codes parallèles
Figure : Trace d’exécution VAMPIR d’un code de factorisation de matrices
creuses
I
L’instrumentation (par exemple avec l’outil VAMPIR) permet
une analyse fine sur une partie de la trace d’exécution.
Figure : Trace d’exécution VAMPIR d’un code de factorisation de matrices
creuses
I
Camemberts pour visualiser le poids relatif d’une activité
Figure : Trace d’exécution VAMPIR d’un code de factorisation de matrices
creuses
Outline
Analyse de performance et modélisation des algorithmes
Terminologie
Exemples d’outils pour l’analyse de performances
Modélisation de Hockney et Jesshope
Les modèles utilisés
Exemple d’analyse de performance d’algorithmes : Produit
Matrice-Vecteur
297 / 396
Les modèles utilisés
Présentation des modèles utilisés pour représenter
1. l’architecture de la machine cible
2. l’algorithme
3. l’exécution
La simulation de l’exécution du modèle de programme sur le modèle
de machine cible permet d’estimer la performance réelle et de faire
une analyse de complexité de l’agorithme.
298 / 396
Modélisation de l’architecture
1. Le temps d’exécution d’une opération dépend
I
I
de la vitesse théorique du processeur et
de la localisation des données dans la hiérarchie mémoire
2. Une modélisation fine de l’architecture doit prendre en compte:
I
I
I
I
le nombre (et la taille) des registres,
la taille et la stratégie de gestion de la mémoire cache
le coût d’un accès au cache et d’un défaut de cache.
la taille et le temps d’accés à la mémoire locale.
299 / 396
1. Sur architectures parallèles à mémoire physiquement distribuée,
le temps d’accès aux données distantes est critique et il dépend:
I
I
du réseau (topologie, vitesse, nb liens/nœud)
et des stratégies de routages de messages
2. Le rapport (Vitesse processeur/Bande passante mémoire) est
une mesure de l’équilibrage globale d’une machine.
300 / 396
Calculateur
Intel iPSC/2
BBN TC2000
Intel iPSC/860
CM5
Meiko CS2
Calculateur
CONVEX C210
FUJITSU VP400
NEC-SX2
CRAY C-90
Mémoire physiquement distribuée
Vitesse/proc.
Débit lien
Nb liens
(Mflops)
(Mmots/s)
0.3
0.3
7
10.0
4.7
1
40.0
0.3
7
128.0
2.5
2
200.0
6.2
1
Mémoire partagée
Perf. crête
Débit mémoire
(Mflops) (MMots/s) MMots/Mflops
50
25
1066
1066
1300
2000
16000
24000
α
0.1
2.1
16.3
25.6
32.0
Rapport
0.5
1
1.5
1.5
Table : D’après L. Giraud (ENSEEIHT) et J. Dongarra (U. Tennessee), Mot
= 8 Octets, α=vitesse/(débit X Nb liens)
Rapport plus petit =⇒ Machine plus équilibrée (flop =⇒ 3
opérandes)
301 / 396
Modes du routage et modèles associés
Définitions/rappels
I
Les machines parallèles disposent de composants matériels
dédiés au routage (les routeurs).
I
message: entité que l’application souhaite transmettre
I
mode de commutation : façon dont sont acheminés les
messages de la source vers la destination.
I
fonction de routage : manière dont est calculée la route des
messages (indépendant du mode de commutation).
On parle de routage statique si la fonction est injective (un
seul choix possible) sinon de routage dynamique ou adaptatif.
I
congestion : d’un lien (ou nœud) est le nombre de routes
passant par ce lien (ou nœud).
302 / 396
I
paquet : l’interface réseau peut éventuellement découper le
message en paquets.
I
conséquences des paquets :
++ les ressources disponibles sur la route sont de taille bornée.
– l’interface réseau doit être capable de reconstruire le message
complet à partir de plusieurs paquets.
Hypothèses
I
le temps de propagation d’un octet entre deux nœuds est
constant.
I
deux processeurs x et y , non voisins, souhaitent échanger un
message M de taille L.
I
Soit d(x, y ) la distance entre x et y . (on ne modélisera pas la
congestion).
303 / 396
1. Commutation de messages
I
I
I
I
Chaque processeur intermédiaire sur le chemin de communication
reçoit le message M complètement avant de le réémettre en
direction du processus destinataire.
Lorsqu’un routeur reçoit un message il le stocke dans un de ses
tampons avant de le retransmettre. Il le retransmet lorsqu’un
tampon est libre sur le routeur suivant
L’entête du message permet aux routeurs intermédiaires de
calculer la route.
Modélisation :
Tcm = d(x, y )(α + Lβ),
où α est le temps d’initialisation, et β le temps de propagation
d’un octet.
304 / 396
I
Commutation de paquets par macro-pipeline : pour réduire
le coût total on divise le message en paquets de taille fixe µ :
L
Tcm = d(x, y ) + − 1 (α + µβ).
µ
s
p
2
p
Lα
opt
=
Lβ + (d(x, y ) − 1)α
µopt =
=⇒ Tcm
(d(x, y ) − 1)β
305 / 396
I
Cut-through
I
I
I
I
le message n’a pas besoin d’arriver entièrement sur un nœud pour
être renvoyé vers une autre destination.
Commutation de circuits(CC) : établissement d’une connexion
statique puis envoi des données (idem communication
télephonique). Une fois la communication établie le coût de
communication est indépendant de la distance.
Wormhole : Le message est découpé en flits (flow control
digits). Le premier flit entête établie le chemin, les flits
intermédiaires contiennent les données et le dernier flit libère les
connexions établies.
Modélisation (CC et Wormhole) : Tct = α(d(x, y )) + Lβ
306 / 396
Comparaison des modèles
I
Illustration pour x = 0, y = 3 et d(x, y ) = 3
3
2
1
0
Commutation de messages
3
2
1
0
Commutation de paquets
(macro-pipeline)
3
2
1
0
Commutation de circuits
3
2
1
0
Wormhole
Temps
En-tête
Données
307 / 396
I
Le mode par commutation de messages a été le premier utilisé
I
le mode Cut-through est maintenant classiquement utilisé sur
architectures parallèles.
I
Les modèles Cut-Through sont les plus efficaces car ils masquent
la distance entre les processeurs.
308 / 396
Conclusions pratiques
1. On se limite au modéle associé au mode Cut-Through .
2. Soit Tcom le temps de communication d’un message de L octets
entre deux processeurs.
Tcom = α + Lβ ,
et en pratique α est considéré indépendant de la distance entre
les processeurs.
3. Diffusion et diffusion personnnalisée (distribution) (message de
type OneToAll) sur un réseau de p processeurs.
3.1 sur un anneau :
Tcom = (p − 1) × (α + Lβ)
3.2 sur un réseau complet ou multi-étages :
Tcom = α + Lβ
309 / 396
Modèles de programme
I
I
Soit un programme P composé de tâches élémentaires
séquentielles Ti .
le graphe de tâches : G = (V, A)
I
I
les nœuds : Un nœud i du graphe (Ti ∈ V ) correspond à une
tâche de calcul (sans synchro).
les arcs :
un arc aij (aij ∈ A) indique une dépendance entre les tâches Ti et
Tj .
I
I
I
I
I
I
arcs orientés =⇒ graphe de précédence
arc valué =⇒ |aij | correspond généralement au coût ou volume
des communications.
notation : Ti ≺ Tj indique que Ti doit précéder Tj
le chemin critique est le chemin le plus long dans le graphe
valué
la valuation du graphe peut dépendre du modèle d’exécution
Pour un modèle d’exécution donné, le chemin critique donne une
approximation du temps d’exécution parallèle.
310 / 396
I
le graphe de flots de données : la précédence entre tâches est
induite par la circulation des données. Typiquement la tâche
correspond à l’évaluation d’une instruction et les précédences
aux accès en lecture ou en écriture.
I
Le graphe de tâches peut être dynamique et connu totalement
uniquement après exécution.
311 / 396
Modèles d’exécution
I
Définition: Le modèle d’exécution définit les règles à suivre pour
simuler l’exécution d’un programme sur une classe de machines.
I
Pour le calcul parallèle synchrone sur architectures à mémoire
partagée :
le modèle PRAM (Parallel Random Acces Memory) est
introduit.
I
Pour architectures parallèles à mémoire distribuée :
Prise en compte du placement statique/dynamique des
tâches/données sur le graphe des processeurs.
312 / 396
Modèle théorique PRAM
I
I
-Un ensemble illimité de processeurs,
-Une mémoire globale partagée infinie,
-Le programme: séquence finie d’instructions (lecture, écriture,
branchement, calcul ...)
On distingue 3 sous-modèles:
1. EREW (Exclusive Read Exclusive Write)
2. CREW (Concurent Read Exclusive Write)
3. CRCW (Concurent Read Concurent Write)
I
Exécution d’un programme sur une PRAM:
-Au premier pas toutes les opérations qui n’ont pas d’arc de
précédence entrant.
-Au second pas toutes les opérations suivantes et ainsi de suite.
313 / 396
PRAM (suite)
I
Notion de travail d’un algorithme parallèle :
Travail = Temps maximum × Pmax où
Pmax est le nombre maximum de processeurs utilisés
Nb processeurs
Travail= Pmax*T
Pmax
T
Temps
I
Idée génerale pour la recherche d’un bon algorithme:
réduire la surface du rectangle en occupant mieux les
processeurs.
314 / 396
Placement statique et/ou dynamique
I
Objectif: Trouver le “meilleur” placement du graphe des tâches
sur le graphe des processeurs
1. répartir la charge de calcul ou la charge mémoire.
2. réduire les communications et/ou synchronisations
3. minimiser le temps de calcul
I
Placement statique:
1. Hypothèses :
1.1 le graphe de tâches (temps de calcul et communication) est en
grande partie connu.
1.2 la charge du réseau et la disponibilité des processeurs est assez
stable
2. Le problème à résoudre est la plupart du temps un problème
d’optimisation combinatoire.
3. La fonction objectif est souvent le temps total (i.e. le temps de la
dernière tâche).
315 / 396
1. Exemple de fontion objectif:
1.1 soit T l’ensemble des tâches et P l’ensemble de processeurs
1.2 fonction de placement: ∀t ∈ T , ∃p ∈ P/ placer (t) = p
1.3 l’ensemble des placements réalisables (en général |P| |T |) est
|P||T |
1.4 par abus de notation on désignera, aussi par ti le temps de calcul
de la tâche
ti et par aij le temps de communication de la tâche ti à la tâche
tj .
1.5 soit t(pk ) le temps cumulé sur le processeur k alors


X
X
ti +
t(pk ) =
aij 
ti /placer (ti )=pk
tj /placer (ti )6=placer (tj )
1.6 fonction objectif Tplacer à minimiser est donc
Tplacer = max (t(pk ))
pk ∈P
316 / 396
1. on peut aussi vouloir prendre en compte un critère d’équilibrage
de charge
entre les processeurs et minimiser l’écart de temps entre les
processeurs
par rapport au temps moyen. Une fonction objectif possible est
alors:
P
X t(pl ) p
∈P
l
t(pk ) −
Tplacer =
|P|
pk ∈P
.
317 / 396
Illustration du placement statique
Figure : Parallélisation statique du produit matrice-vecteur sur réseau
hétérogène
318 / 396
Placement et régulation dynamique
1. Hypothèses
I
I
Graphe des tâches semi-prévisibles ou imprévisible (création
dynamique).
Graphe des processeurs (charge variable).
2. Composantes d’un algorithme de placement dynamique
I
I
Estimation de la charge locale et globale
Algorithme de décision
2.1 aléatoire/cyclique parmi tous les processeurs ou limité aux voisins
2.2 liste centralisée [ordonnancée] de tâches prêtes
319 / 396
Illustration du placement dynamique
Figure : Exemple de parallélisation dynamique du produit matrice-vecteur
par liste centralisée
320 / 396
I
Algorithme de décision (suite)
1. liste distribuée de tâches prêtes. Plus de travail → tirage
aléatoire d’une victime et vol de travail .
2. Gang Scheduling (regroupement logique de processus)
I
Attention au coût de la migration des données
I
I
I
Prefetch ou anticipation du chargement mémoire −→ recouvrir
communication par calcul
Redondance partielle ou totale de certaines données.
En général l’allocation statique initiale est souvent associée à
une régulation dynamique pour prendre en compte les
“imprévus” et les “imprévisibles”
321 / 396
Outline
Analyse de performance et modélisation des algorithmes
Terminologie
Exemples d’outils pour l’analyse de performances
Modélisation de Hockney et Jesshope
Les modèles utilisés
Exemple d’analyse de performance d’algorithmes : Produit
Matrice-Vecteur
322 / 396
Exemple d’analyse de performance d’algorithmes : Produit
Matrice-Vecteur
On étudie la parallélisation statique, sur calculateur à mémoire
distribuée, du produit matrice-vecteur, y = A × x , où A est une
matrice carrée d’ordre N.
I
soit τ le temps pour effectuer une opération flottante
I
temps séquentiel: T1 (N) = Ts + Tpar , avec ici Ts = 0, et donc
T1 (N) = Tpar = (2N 2 − N) × τ
I
Modélisation de l’architecture
1. p : nombre de processeurs
2. réseau de type anneau et mode de routage cut-through
3. charge du processeur/réseau constante.
323 / 396
I
Modélisation de l’algorithme parallèle
:
master
x
A
x
slave 1
x
first_row(1)
first_row(2)
first_row(3)
slave 2
x
slave 3
x
I
Placement statique des données: on suppose les processus déjà créés
et la matrice déjà distribuée statiquement:
I
le processus maı̂tre (numéro 0) diffuse x à (p − 1) processus (tâches
(0,i)
tcom ) ).
I
chaque processus (incluant le maı̂tre) calcule un bout de y (tâches
i
tcal
).
I
chaque processus (sauf le maı̂tre) renvoie un bout de y maı̂tre (tâches
(i,0)
tcom )
I
le processus maı̂tre assemble la solution finale (tâche tass )
324 / 396
Le graphe des tâches (p = 4)
1
tcal
(1,0)
(0,1)
tcom
tcom
2
(0,2)
tcom
t
cal
(2,0)
tcom
3
(0,3)
tcom
tcal
(3,0)
tcom
0
tcal
t
ass
325 / 396
Modélisation de l’exécution parallèle
Tp =
Tpar
+ Tsc
p
1. On suppose un processus par processeur
2. Estimation des temps de communication (anneau, Cut-through)
diffusion de x : (p − 1) × (α + βN)
envoi du bout de y d’un esclave au maı̂tre : α + β Np
326 / 396
Diagramme d’exécution du graphe des tâches (p = 4)
P3
P2
P1
t
P0
ass
tcom
Temps
tcal
la détermination du chemin critique donne:
Tp = (p − 1) × (α + βN) +
Tp =
(2N 2 − N) × τ
N
+ (α + β )
p
p
(2N 2 − N) × τ
1
+ pα + βN(p − 1 + )
p
p
327 / 396
Analyse des résultats (I)
1. si p constant et N % alors coût dominant est
2N 2 /p
2. si N constant et p % alors Tp → (p α + β N p)
3. Speed-up : Sp (N, p) = T1 /Tp , comme
T1 = Tpar et Tsc = pα + βN(p − 1 + p1 ) on a
Sp =
Tpar
Tpar /p + Tsc
Sp =
Sp =
p
1+
pTsc
T par
p
1+
αp 2 +βN(p 2 −p+1)
(2N 2 −N)×τ
328 / 396
Analyse des résultats (II)
pour N assez grand ( 2N 1) alors
Sp =
p
1+
αp 2 +βN(p 2 −p+1)
2N 2 ×τ
et pour p assez grand ( p 2 (1 − p) )
Sp =
p
1+
p 2 (α+βN)
2N 2 ×τ
329 / 396
Analyse des résultats (III)
Soit N = 1000
1. exemple de référence : α = 4 × 10−5 , β = 2 × 10−7 , et
τ = 2 × 10−8
2. processeur 2 fois plus lent (τ = 10−8 )
3. réseau 4 fois plus rapide (α = 105 , β = 5 × 10−6 )
Etude du speed−up
15
Reference
Proc 2 fois + lent
Reseau 4 fois + rapide
Speed−up
10
5
0
0
10
20
30
40
Nombre de processeurs
50
60
70
330 / 396
I
Etude d’isoefficacité
1. Si p % alors Sp &
2. Ep = Sp /p et donc
Ep =
1
1+
p 2 (α+βN)
2N 2 ×τ
3. N constant =⇒ limp→∞ Ep (N, p) = 0
4. Par contre limn→∞ Ep (N, p) = 1
5. Comment doit on augmenter N quand p augmente de façon à
maintenir l’efficacité constante ? Ep = Ekp
1
1+
p 2 (α+βN)
2N 2 ×τ
1
=
1+
(kp)2 (α+β Ñ)
2Ñ 2 ×τ
Sous les bonnes conditions on peut montrer que Ñ doit croı̂tre
linéairement par rapport à N (Ñ = a × N + b).
331 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
332 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
333 / 396
Informatique distribuée et système
point d’accés
interface
application
système de communication
OS
OS
OS
ordinateur
ordinateur
ordinateur
Réseau de communication
Figure : Composants d’un système informatique.
334 / 396
Notion d’interface
I
I
Ensemble des fonctions accessibles aux utilisateurs d’un service
Chaque fonction est définie par :
I
I
I
son format et sa syntaxe : mode d’emploi
sa spécification : son effet
Principe de base dans le développement d’un service : séparation
entre sa réalisation et son interface
I
I
Description de l’interface indépendante de sa réalisation
Avantages : facilite la portabilité (passage à une autre
implantation du service)
335 / 396
Rôle d’un système d’exploitation
Système fournit une interface avec la matériel :
I
Dissimule détails de mise en œuvre
I
Dissimule limitations physiques (taille mémoire, #processeurs)
et partage des ressources
→ machine virtuelle
I
Gestion des processus
I
Gestion de la mémoire
I
Gestion des communications
I
Gestion des accés (protection, droits d’accés)
336 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
337 / 396
Terminologie
On distingue :
I
Données ou traitements répartis ou distribués : la mise en œuvre
d’une opération nécessite d’utiliser plusieurs machines
I
Traitement coopératif : dialogue entre deux applications pour
réaliser une tâche
I
Interopérabilité : capacité des systèmes à partager des données
ou des traitements via des interfaces standards (systèmes ouverts
aptes à communiquer dans un environnement hétérogène).
338 / 396
Classes d’applications réparties
I
Coordination d’activités
I
Communication et partage d’information : bibliothèques
virtuelles
Travail coopératif :
I
I
I
I
I
Applications Temps Réel :
I
I
I
I
Calcul réparti et Grid-Computing
Edition coopérative
Téléconférence
Contrôle de procédés
Systèmes embarqués (avionique, . . . )
Localisation de mobiles
Services grand publics :
Presse électronique, Commerce électronique, . . .
339 / 396
Répartition vs parallélisme
Répartir les traitements (ou les distribuer) sur les machines les plus
adaptées n’implique pas que les traitements seront effectués en
parallèle.
Mais répartir les traitements est aussi une façon de les paralléliser.
340 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
341 / 396
La répartition [13]
Définition :
La répartition est la mise à disposition d’un ensemble de ressources et
de services connectés via un réseau pour tous les usagers possédant
un droit d’accès en un point quelconque.
342 / 396
Problème de la répartition
I
Problématique née avec l’idée de faire communiquer des
machines via un réseau, par exemple avec des échanges de
message
I
Développement et programmation d’applications réparties →
langages, systèmes d’exploitation, environnements
Difficultés à développer une application répartie :
I
I
I
I
I
I
Pas d’état global (état d’une autre machine ?)
Pas d’horloge globale (horloge propre à chaque machine)
Fiabibilité toute relative (certaine tolérance aux défaillances)
Sécurité relative (plus diffcile à protéger qu’une architecture
centralisée)
Non-déterminisme dans l’exécution des appplications
343 / 396
Avantages de la répartition
I
Partage de ressources et de services
Exemple : gestion de fichiers répartis service de base des
systèmes d’exploitation répartis
I
Répartition géographique : répartition essentielle pour accéder
aux moyens locaux nécessaires tout en gardant accès aux
ressources et services distants
I
Puissance de calcul cumulée, disponibilité, flexibilité
344 / 396
Algorithmique répartie
I
Problèmes bien spécifiques posés par les architectures réparties
I
Définition de protocoles de communication point-à-point et de
diffusion → formalismes de description (automates
communicants, réseaux de Pétri, . . . ) et outils d’aide à la
validation. Quelques standards existent (appels de procédure à
distante) mais protocoles souvent adaptés à une classe
d’applications.
I
Problèmes généraux (exclusion mutuelle, interblocage, atomicité,
réplication, . . . ) ou issus de la répartition des traitements et des
données (terminaison d’une application, réalisation d’un
consensus, . . . )
345 / 396
Langages de programmation
I
I
A priori une interface de programmation (API ) permettant
échange de message devrait suffire (e.g. sockets)
Introduction de structures de contrôle pour faciliter la
programmation :
I
I
non-déterminisme en réception avec possibilités d’associer à
chaque type de message attendu une action spécifique
Appel de procédure à distance (modèle client-serveur) : problème
il faut introduire un langage de définition de l’interface (IDL)
pour appeler les procédures distantes → génération automatique
du traitement des appels côté client et serveur.
346 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
347 / 396
Représentation d’un calcul réparti
I
Application structurée en un ensemble fixe de processus
I
Processus communicant : unité de répartition
Communication par messages :
I
I
I
Echanges de messages via canaux logiques point à point
(asynchrones, uni/bidirectionels, FIFO i.e. respectant la
chronologie d’envoi en réception, . . . )
Peut être représenté sous forme de graphe (sommets = processus,
arêtes = canaux)
348 / 396
p2
c1
p1
c6
c4
c2
p4
p3
c5
Figure : Exemple de représentation graphique d’un calcul réparti.
349 / 396
r2
e1
p1
e4
e5
p2
p3
r1
e2
P4
e3
0
t
Figure : Exemple de chronogramme.
I
I
I
I
(e1,r1) message point à point
diffusion avec émission e2
perte de message e3
...
350 / 396
I
Calcul réparti représenté sous forme d’un ensemble d’évènements
produits par chaque processus (évènements internes ou envois ou
réceptions de messages).
I
Les évènements issus de processus différents ne sont pas
forcément ordonnés mais ordre partiel induit par les messages
échangés.
I
Ordre partiel fondé sur une relation de causalité.
Relation notée ≺ satisfaisant :
I
1. Pour tout couple d’évènements (e,e’) issu d’un même processus
telque e précède e’ dans la suite associée au processus e ≺ e’.
2. Pour un échange de message entre 2 processus (envoi = e et
réception r), on a e ≺ r.
351 / 396
Protocoles ordonnés: exemple de liaison causale en
émission
p1
p2
p3
e1
e
m
r
e2
m1
m2
r2
r1
t
0
Message m1 reçu après m2 par le processeur p3, alors que un lien
causal existe en émission : e1 ( ≺ r ≺ ) e2 .
on risque de devoir forcer l’attente du message m1 pour traiter le
message m2.
352 / 396
Protocoles ordonnés évitant ce type de problème
I
Protocole ordonné d’ordre causal assure la propriété suivante
pour toute destination S :
∀m, m0
I
vers
S
:
em ≺ em0 ⇒ rm ≺ rm0
Diverses implantations de ces protocoles sont possibles.
353 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
354 / 396
Abstractions de niveau plus élevé
I
I
Communication en mode message = niveau d’abstraction peu
élevé
D’où la proposition de mécanismes de communication plus
élaborés :
I
I
I
Appel de procédure à distance pour les traitements
Pour les données : communication par mémoire partagée ou par
fichiers partagés.
Notion de mémoire partagée répartie ou mémoire partagée
virtuelle ou mémoire partagée distribuée :
I
I
I
I
Objectif fournir un espace d’adressage global (modèle de
programmation centralisé) : LINDA, BBN, KSR, . . .
Difficulté de réalisation sur une architecture distribuée : éviter
une trop forte synchronisation des accès à cette mémoire
partagée répartie
Utilisation de la réplication → augmentation du parallélisme
d’accès à la mémoire
cohérence des copies !!!
Souvent implantation au dessus de transferts de messages
(hard/soft)
355 / 396
Mémoire partagée virtuelle
site A
site B
site C
objets partagés
Figure : Mémoire partagée virtuelle.
356 / 396
Approches
I
Modèles à cohérence faible : BBN
I
Modèles basés sur un mécanisme de cache ou de pagination
mémoire avec répertoires distribués : KSR, Convex SPP, . . .
Modèles à espace de tuples :
I
I
I
I
Base de données (tuples) partagée
Modèle de programmation à la Linda (dépôt, retrait et
consultation d’objets)
Exemple : JavaSpaces
357 / 396
Approches
I
Modèles à objets répartis partagés
I
I
I
I
I
Espace d’objets répartis partagés
Langage à objets extension d’un lange existant : expression de la
distribution, parallélisme, synchronisation, . . .
Désignation universelle d’objets
Gestion du partage des objets : synchronisation, cohérence
(image unique d’un objet ↔ copies cohérentes)
Divers modes de réalisation
I
I
Objets répliqués (Javanaise)
Objets à image unique (Guide)
358 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
359 / 396
Grid computing - Internet Computing
Internet peut servir de support à l’exécution d’applications réparties
en plus de sa fonction d’accès à l’information.
Intérêt
I
I
Interface familière
Disponibilité d’outils de base :
I
I
I
I
Espace universel de désignation (URL)
Protocole de transfert de l’information (HTTP)
Gestion d’information sous format standard (HTML)
Web = système d’exploitation primitif pour application réparties
?
360 / 396
Grid computing - Internet Computing
Internet peut servir de support à l’exécution d’applications réparties
en plus de sa fonction d’accès à l’information.
Problèmes
I
Où et comment sont exécutés les services ?
I
Comment trouver les services ?
Comment assurer la sécurité ?
I
I
Problème majeur non résolu
I
I
I
I
Protection des sites
Encryptage de l’information
Restrictions sur les conditions d’exécution
Traçabilité:
mais finalement qui bénéficie du résultat l’exécution du service?
361 / 396
Caractéristiques d’une Grille
I
Coordination de ressources non assujetties à un contrôle
centralisé
I
I
I
I
Répartition à grande échelle
Utilisateurs dans des domaines administratifs distincts
D’où problèmes de sécurité, authentification, délégation,
facturation, . . .
Utilisation de protocoles et d’interfaces génériques, ouverts,
standardisés (inter-opérabilité)
I
Grille = ensemble d’interfaces et de protocoles portant sur
authentification, découverte, autorisation et exploitation des
ressources
I
Divers niveaux de qualité de service (temps de réponse, débit,
disponibilité, sécurité, co-allocation de ressources, . . . )
I
Forte variation de la qualité de service
362 / 396
Qu’est-ce qui n’est pas une grille ?
I
Grilles = partage de ressources dynamiques entre organisations
virtuelles
I
Les approches utilisées pour les applications distribuées n’offrent
pas un environnement de partage de ressources général (e.g.
autentification, délégation, monitoring, ordonnacement,
inter-opérabilité, . . . )
I
Par exemple CORBA : partage de ressource relativement statique
et interne à une organisation. Plutôt orienté client-serveur
Avec CORBA + technologie grille :
I
I
I
I
Object Request Broker permettant de gérer les requêtes entre
organisations différentes,
Portable Object Adaptator accédant aux ressources d’un
organisation virtuelle.
Services nommage et de courtage niveau grille et inter-opérabilité
avec des clients non CORBA.
363 / 396
Divers types de grille
I
Grilles de partage et/ou de traitement de l’information
I
Exemples :
I
I
I
I
Partage de la connaissance sur le Web
Grilles bio-médicales : télé-médecine, analyse médicale
Formation à distance
Grilles de stockage
I
I
I
I
I
I
Exploitation de l’espace libre disponible sur une grille
Stockage à grande échelle
Stockage de gros volume
Stockage fiable
Stockage anonyme
Exemples : DataGrid, Kazaa, Gnutella, Us
364 / 396
Grilles de calcul :
I Agréger de la puissance de calcul ou permettre le couplage de
codes ou de modules de traitement (BD, calcul, visualisation)
I
Intergiciels construits sur les concepts de:
I
I
I
I
I
I
I
GRID-RPC : Remote Procedure Call pour la grille
ASP: Application Service Providers - Client-Serveur
DOA : Distributed object Oriented Architectures
Composants logiciels
Plateformes générales,
orientées soumission de BATCH (ex: UNICORE) ou interactif
ciblant des domaines : astronomie, nucléaire, simulation
moléculaire, grilles bio-médicales . . .
365 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
366 / 396
Grilles de calcul : tentative de classification (Th. Priol,
INRIA)
I
Multiplicité de termes : P2P Computing, Metacomputing,
Virtual Supercomputing, Desktop Grid, Pervasive Computing,
Utility Computing, Mobile Computing, Internet Computing, PC
Grid Computing, On Demand Computing, . . .
I
Virtual Supercomputing : grilles de supercalculateurs ;
I
Desktop Grid, Internet Computing : grille composée d’un très
grand nombre de PC (10,000 - 1,000,000);
I
Metacomputing: association de serveurs applicatifs;
I
P2P Computing : infrastructure de calcul Pair-à-Pair:
chaque entité peut être alternativement client ou serveur.
367 / 396
Vision de la “grille aux USA”.
368 / 396
Peer-to-Peer : SETI@home
I
I
I
I
I
I
I
500,000 PCs à la recherche d’intelligence extra-terrestre
Analyse du signal
Pair récupère un jeu de données depuis le radio-téléscope
d’Arecibo
Pair analyse les données (300 kB, 3TFlops, 10 hours) quand ils
sont inactifs
Les résultats sont transmis à l’équipe SETI
35 TFlop/s en moyenne
Source d’inspiration pour de nombreuses entreprises
369 / 396
Peer-to-Peer : SETI@home
Users
Results received
Total CPU time
Flops
I
I
I
I
I
I
I
Total
5436301
2005637370
2378563.061 years
7.406171e+21
Last 24 Hours
0 new users
780175
539.796 years
3.042682e+18
500,000 PCs à la recherche d’intelligence extra-terrestre
Analyse du signal
Pair récupère un jeu de données depuis le radio-téléscope
d’Arecibo
Pair analyse les données (300 kB, 3TFlops, 10 hours) quand ils
sont inactifs
Les résultats sont transmis à l’équipe SETI
35 TFlop/s en moyenne
Source d’inspiration pour de nombreuses entreprises
370 / 396
Google (d’après J. Dongarra)
I
2600 requêtes par seconde (200 × 106 par jour)
I
100 pays
I
8 × 109 documents indexés
I
450,000 systèmes Linux dans plusieurs centres de données
I
Consommation électrique 20 MW (2 millions de $ par mois)
I
Ordre d’apparence des pages ⇔ valeurs propres d’une matrice de
probabilité de transition (1 entre page i et j signifie l’existence
d’un lien de i vers j)
371 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
372 / 396
RPC et Grid Computing : Grid RPC (F. Desprez, INRIA)
I
Idée simple:
I
I
I
I
Construire le modèle de programmation RPC sur la grille
utiliser les ressources (données+services) disponibles sur le réseau
Parallélisme mixte : guidé par les données au niveau du serveur et
par les tâches entre les serveurs.
Fonctionnalités requises:
1. Equilibrage de charge (localisation services, évaluation de
performance, séquencement)
2. IDL (Interface Definition Language)
3. Mécanismes pour gérer la persistence et la dupplication des
données.
4. Sécurité, Tolérance aux pannes, Interopérabilité entre intergiciels
373 / 396
RPC et Grid Computing : Grid RPC (suite)
I
Exemples:
I
I
Netsolve (Univ. Tennessee) (le plus ancien, basé sur des sockets)
DIET: Projet Graal, INRIA.
Outil récent largement utilisé
Travaux importants sur l’équilibrage/gestion données.
374 / 396
NetSolve (1) : H. Casanova, J. Dongarra, . . .
I
I
Objectif : donner un accès uniforme et efficace à des ressources
(softs scientifiques) sur une large gamme de plateformes (UNIX
et Windows)
Mécanismes de base :
I
I
I
I
I
I
Modèle Client-Serveur
Organisation non-hiérarchique
Equilibrage des tâches et tolérance aux fautes
Environnement hétérogène
Plusieurs interfaces client disponibles : Fortran, C, Matlab, Java,
Mathematica, . . .
Mécanismes de base standards (RPC, . . . )
375 / 396
NetSolve (2)
Organisation de NetSolve [4].
376 / 396
NetSolve (3)
I
Accés à des ressources sur Intranet, Internet, . . .
I
Utilisation : “méta-calculateur”
I
Serveurs locaux configurés à la demande (ajout / sélection des
ressources)
I
Environnement d’exécution répartie ?
Quelques caractéristiques :
I
I
I
I
I
Accés aux ressources sur le Net transparent
Localisation des traitements tranparente
Facilite la maintenance des logiciels
Requètes (appels de procédures) synchrones ou asynchrones et
“farming” → exploitation d’un niveau de parallélisme
377 / 396
NetSolve (4) : Interface Matlab
I
Appel bloquant :
>>
>>
I
load a
[x y] = netsolve(’eig’,a)
....
Appel non bloquant :
>> load a
>> [r] = netsolve_nb(’send’,’eig’,a)
Contacting server xxxxx
r = 0
...
>> [status] = netsolve_nb(’probe’,r)
Not ready yet
status = -1
...
>> [status] = netsolve_nb(’probe’,r)
Result available
status = 0
>> [x y] = netsolve_nb(’wait’,r)
...
378 / 396
Agent - Serveur NetSolve
I
Agent :
I
I
I
Localise les serveurs de calcul
En charge de l’équilibrage des traitements
Serveur :
I
I
Ensemble de logiciles sur des plateformes différentes (stations,
clusters, MPP, . . . )
Configurable et extensible :
I
I
Possibilité d’ajouter des services
BLAS, LAPACK, ScaLAPACK, . . . pré-installés
379 / 396
Quelques difficultés qui émergent au passage . . .
I
Logiciels qui nécessitent une fonction codée par l’utilisateur :
I
I
Traitements parallèles : requête à une procédure de calcul MPI
sur un cluster de PC
I
I
Softs d’optimisation par exemple (ex: NEOS)
NetSolve s’occupe de lancer l’environnement MPI, de la
distribution des données, et du retour des résultats
Transferts des données :
I
I
Utilisation d’un codage type RPC : transfert systématique des
paramètres d’entrée et de sortie → inutilement couteux lors de
requètes successives incluant la même matrivce par exemple
Analyse data-flow : mécanisme de cache des données sur les
serveurs de calcul, évaluation paresseuse (Legion) ?
380 / 396
Remarques
Il y a une différence entre
(1) répartir un ensemble d’applications sur une grille et
(2) distribuer une application sur une grille
(1) devrait impliquer que chaque application est capable d’exploiter
les ressources (parallélisme) de chacun des noeuds de la grille.
381 / 396
Pe
er
to
(SE peer
TI@
ho
me
)
Gr
id−
bas
ed
com
Ne
pu
tw
tin
ork
g
of
ws
Be
ow
ul
Clu f clus
ter
spe sters
cia w/
l in
ter
con
Pa
nec
ral
t
lel
dis
tm
e
TF
m
lop
ma
chi
nes
HPC Spectrum
Distributed Systems
- Gather (unused) resources
- Steal cycles
- System SW manages resources
- 10% - 20% overhead is OK
- Resources drive applications
- Time to completion is not
critical
- Time-shared
- Heterogeneous
382 / 396
Outline
Informatique distribuée et Grid Computing
Informatique distribuée et système
Applications distribuées
Répartition des calculs
Représentation d’un calcul réparti
Abstractions de niveau plus élevé
Grid computing - Internet Computing
Classification et exemples de grilles de calcul
GridRPC - les projets DIET et Netsolve
Exemple d’utilisation de la grille : projet Grid-TLSE
383 / 396
Un site Web pour l’expertise en Algèbre linéaire :
gridtlse.org
I
3-year project funded by ACI GRID program
from the French Ministry of Research
(January 2003 −− > January 2006)
(http://www.enseeiht.fr/lima/tlse)
I
Research Labs : CERFACS and IRIT (Toulouse), LaBRI
(Bordeaux), LIP-ENS (Lyon)
I
Industrial partners :
CNES, CEA, EADS, EDF, IFP
I
International links : Berkeley, RAL, Parallab, Univ. Florida,
Univ. Minneapolis, Univ. Minnesota, Univ. Tennessee, Univ.
San Diego, Univ. Indiana, . . .
384 / 396
Goals
I
Design a Web expert site for sparse matrices
I
Limit the study to sparse direct solvers
I
Disseminate the expertise
I
Provide an interface to experiment software
- public . . . as well as commercial
- sequential . . . as well as parallel
I
Submit a matrix or use matrix collections
I
Provide tools to help incorporating new services
385 / 396
Example of expertise request
I
Assumption : The performance (time and memory used) of our
solvers depends mostly on the choice of the ordering used.
I
Examples of request:
I
I
I
Memory required to factor a matrix
Error analysis as a function of the threshold pivoting value
Minimum time on a given computer to factor a given
unsymmetric matrix ?
386 / 396
GRID computing ?
I
Each request involves a large number of elementary requests
(e.g. as many simultaneous executions of a sparse package as
available orderings or more generally appropriate values of input
parameters)
I
Choice of target computers depends on type of request: (Matrix
availability, Memory requirement, CPU requirement, software
availability, cost of computing time . . .)
I
Grid of moderate size where each elementary request will run on
one node (mono or multiprocessor) of the Grid.
387 / 396
Is it realistic ?
I
Independency of elementary requests
I
Results from experiments : synthetic data
(the expert site is not a computing engine)
I
Time to answer is not so critical
I
Data persistency between elementary requests easier to express
388 / 396
Main components of the site
I
Sparse matrix software: direct solvers
I
I
I
I
I
I
MUMPS (CERFACS, IRIT, LIP-ENS)
PaStiX, SCOTCH (LaBRI)
HSL (RAL) Library
SuperLU (Berkeley), UMFPACK (Univ Florida)
Others . . .
Database:
I
I
I
Bibliography
Sparse matrix collections (RAL-BOEING, PARASOL,
user-provided)
Experimental results
389 / 396
Grid Infrastructure
I
Use of middleware developed within the GRID ASP project
(LIP-Graal, LORIA-Résédas, LIFC-SDRP) : DIET
I
High-level administrator interface for the definition, the
deployment, and the exploitation of services over a grid : Weaver
I
Interactive Web interface with the Grid: WebSolve
I
We do not provide computational resources, we just perform
expertise (i.e. we may only report statistics on using various
software on a matrix)
390 / 396
Software components
External User
Expert Site :
Internal User
Expert
Grid−TLSE
/ ...
WebSolve
Database
Weaver
History
Logfiles
MIDDLEWARE
(DIET/FAST)
Stats
Collect.
Matrices
Static
Bibliography
Dynamic
( RAL−BOEING / Parasol )
User−supplied matrices
Solvers
Grid
391 / 396
Patrick R. Amestoy, Iain S. Duff, Jean-Yves L’Excellent, and
Xiaoye S. Li.
Impact of the implementation of MPI point-to-point
communications on the performance of two general sparse
solvers.
Parallel Computing, 29(7):833–847, 2003.
A. Beguelin, J. Dongarra, A. Geist, R. Manchek, and
V. Sunderam.
A users’ guide to PVM parallel virtual machine.
Technical Report ORNL/TM-11826, Oak Ridge National
Laboratory, Oak Ridge, Tennessee, 1991.
A. Beguelin, J. Dongarra, A. Geist, R. Manchek, and
V. Sunderam.
Recent enhancements to PVM.
Int. Journal of Supercomputer Applications, 9:108–127, 1995.
H. Casanova, J. J. Dongarra, A. Karaino, and J. Wasniewski.
User’s guide to netsolve version 1.2.beta.
392 / 396
Technical Report TN 37996, University of Tennessee, USA, 1998.
J. J. Dongarra, J. J. Du Croz, S. Hammarling, and R. J. Hanson.
An extented set of Fortran Basic Linear Algebra Subprograms.
ACM Transactions on Mathematical Software, 14:17 and 18–32,
1988.
J. J. Dongarra, Iain S. Duff, D. C. Sorensen, and H. A. van der
Vorst.
Solving Linear Systems on Vector and Shared Memory
Computers.
SIAM, Philadelphia, 1991.
Message Passing Interface Forum.
http://www-unix.mcs.anl.gov/mpi/index.html.
A. Geist, A. Beguelin, J. Dongarra, W. Jiang, R. Manchek, and
V. Sunderam.
PVM 3 User’s Guide and Reference Manual.
393 / 396
Technical Report ORNL/TM-12187, Engineering Physics and
Mathematics Division, Oak Ridge National Laboratory,
Tennessee, 1993.
A. Gupta, G. Karypis, and V. Kumar.
Highly scalable parallel algorithms for sparse matrix factorization.
IEEE Trans. Parallel and Distributed Systems, 8(5):502–520,
1997.
J. H. Hennessy and D. A. Patterson.
Computer Architecture: a Quantitative Approach.
Morgan Kaufmann Publishers, Inc, San Francisco, California,
1996.
Second Edition.
G. Karypis and V. Kumar.
MeTiS – Unstructured Graph Partitioning and Sparse Matrix
Ordering System – Version 2.0.
University of Minnesota, June 1995.
Julie Langou, Julien Langou, Piotr Luszczek, Jakub Kurzak,
Alfredo Buttari, and Jack Dongarra.
394 / 396
Exploiting the performance of 32 bit floating point arithmetic in
obtaining 64 bit accuracy (revisiting iterative refinement for
linear systems).
LAPACK Working Note 175, Department of Computer Science,
University of Tennessee, Knoxville, Knoxville, TN 37996, USA,
June 2006.
G. Padiou.
Systèmes opératoires, cours et notes de cours, 2ième et 3ième
année informatique et mathématiques apppliquées, 2007.
M. Snir, S. W. Otto, S. Huss-Lederman, D. W. Walker, and
J. Dongarra.
MPI: The Complete Reference.
The MIT Press, Cambridge, Massachusetts, 1996.
R. Clint Whaley, Antoine Petitet, and Jack J. Dongarra.
Automated empirical optimization of software and the ATLAS
project.
Parallel Computing, 27(1–2):3–35, 2001.
395 / 396
Also available as University of Tennessee LAPACK Working Note
#147, UT-CS-00-448, 2000
(www.netlib.org/lapack/lawns/lawn147.ps).
396 / 396

Documents pareils

Environnement Logiciel pour le calcul scientifique

Environnement Logiciel pour le calcul scientifique Pas parce que c’est le plus simple mais parce que c’est nécessaire Puissance actuelle (cf http://www.top500.org): Juin 2010, Cray XT5, Oak Ridge Natl Lab, 1.7Pflops, 300Tbytes, 224K coeurs Juin 20...

Plus en détail