Une architecture unifiée pour la divergence de contrôle et la

publicité
Une architecture unifiée pour la
divergence de contrôle et la
divergence mémoire en SIMT
Sylvain Collange
Arénaire, LIP, ENS de Lyon
SympA'14
11 mai 2011
Des GPU aux multi-cœurs hétérogènes
Hier (2000-2010)
Multi-cœurs homogènes
GPU
Aujourd'hui (2011-...)
Intégration CPU+GPU sur puce
CPU
multi-cœur
GPU
?
Intel Sandy Bridge
AMD Fusion
Projet NVIDIA Denver/Maxwell
Demain
multi-cœurs hétérogènes
Différence entre GPU et cœurs
optimisés débit?
Comment franchir ce pas?
Cœurs
optimisés
latence
Cœurs
optimisés
débit
Multi-cœur hétérogène
2
Plan
Architecture SIMT
Modèle de GPU
Gestion de la divergence : solutions existantes
Gérer la divergence par PC multiples
Motivation
Politique d'ordonnancement
Proposition d'architecture
Unité d'arbitrage
Fusion avec l'unité mémoire
Résultats
3
Micro-architecture d'un GPU
Logiciel
Architecture : modèle de programmation multi-thread (SPMD)
Microarchitecture SIMT
Single Instruction, Multiple Threads
Chemins de données en matériel : unités d'exécution SIMD
Matériel
4
Architecture SIMT primitive. Musée GalloRomain de St-Romain-en-Gal, Vienne
Notre modèle d'architecture SIMT
Simplification,
sans perte de généralité
1 séquenceur d'instructions
n Processing Elements (PE)
PE débrayables individuellement
Pas de pipeline
1 PE = 1 thread
Thread 0
1 instruction
PE 0
Thread 1
PE 1
Thread 2
PE 2
Thread 3
PE 3
5
Gestion du contrôle : pile de masques
Code
Masques
1 bit d'activité / PE
x = 0;
// Condition uniforme
1111
if(tid > 17) {
skip
tid=2
tid=0
x = 1;
1111
}
// Conditions divergentes
if(tid < 2) {
push
if(tid == 0) {
push
x = 2;
} pop
else {
push
} pop
} pop
x = 3;
tid=1
tid=3
1111
1100
1111
1100
1111
1100
1111
1100
1111
1100
1111
Variante : avec des compteurs d'(in)activité [Keryell-Paris 93]
1000
0100
6
Reconnaître la structure du contrôle?
Il suffit de rajouter des instructions…
MIPS
j
jal
jr
syscall
NVIDIA
Tesla
(2007)
NVIDIA
Fermi
(2010)
Intel GMA Intel GMA
Gen4
SB
(2006)
(2011)
bar
bra
brk
brkpt
cal
cont
kil
pbk
pret
ret
ssy
trap
.s
bar
bpt
bra
brk
brx
cal
cont
exit
jcal
jmx
kil
pbk
pret
ret
ssy
.s
jmpi
if
iff
else
endif
do
while
break
cont
halt
msave
mrest
push
pop
jmpi
if
else
endif
case
while
break
cont
halt
call
return
fork
AMD
R500
(2005)
jump
loop
endloop
rep
endrep
breakloop
breakrep
continue
AMD
R600
(2007)
push
push_else
pop
loop_start
loop_start_no_al
loop_start_dx10
loop_end
loop_continue
loop_break
jump
else
call
call_fs
return
return_fs
alu
alu_push_before
alu_pop_after
alu_pop2_after
alu_continue
alu_break
alu_else_after
…ou de l'inférer dynamiquement [SympA'13]
Complexe dans les deux cas
AMD Cayman
(2011)
push
push_else
pop
push_wqm
pop_wqm
else_wqm
jump_any
reactivate
reactivate_wqm
loop_start
loop_start_no_al
loop_start_dx10
loop_end
loop_continue
loop_break
jump
else
call
call_fs
return
return_fs
alu
alu_push_before
alu_pop_after
alu_pop2_after
alu_continue
alu_break
alu_else_after
7
Plan
Architecture SIMT
Modèle de GPU
Gestion de la divergence : solutions existantes
Gérer la divergence par PC multiples
Motivation
Politique d'ordonnancement
Proposition d'architecture
Unité d'arbitrage
Fusion avec l'unité mémoire
Résultats
8
Qu'est-ce qui a changé en 20 ans ?
Maspar MP-1 (1990)
1 instruction pour
16 384 PE
PE : ~1 mm²
en 1,6 µm
/1000
NVIDIA Fermi (2010)
×50
1 instruction pour
16 PE
PE : ~0,03 mm²
en 40 nm
Moins de PE mais PE plus gros
Contrôle centralisé → contrôle distribué
9
Un compteur de programme / PE
Compteurs de programme (PC)
Code
x = 0;
tid=
0
1
2
3
0
0
0
if(tid > 17) {
x = 1;
}
if(tid < 2) {
if(tid == 0) {
x = 2;
PC
1
}
else {
x = 3;
}
}
Employé dans les GPU Intel (Sandy Bridge, 2011)
Structure du contrôle toujours explicite
10
Et du côté des architectures SMT?
Fetch-combining
R. Kumar, N. Jouppi, D. Tullsen. Conjoined-core Chip Multiprocessing. ISCA04.
Partage du fetch entre plusieurs threads
Comparaison des PC à chaque cycle
T0
PC=4913
(0) mul
T1
PC=4720
T2
PC=4913
(0-3) add
IF
(0-3) store
ID
(1)
(2) mul
T3
PC=4913
Fetch à l'adresse 4913
pour les
threads 0, 2, 3
(3) mul EX
Politique d'ordonnancement des threads inchangée
11
Politique min(SP:PC)
Quel thread choisir comme
« guide » ?
Ordre de parcours du code
Structures conditionnelles,
boucles
Parcours dans l'ordre des
adresses
min(PC)
Fonctions
Privilégier le niveau d'imbrication
max
min(SP)
Source
if(…)
{
}
else
{
}
Assembleur
…
p? br else
…
br endif
else:
…
endif:
while(…) start:
{
…
}
p? br start
…
…
f();
…
call f
…
void f() f:
{
…
…
ret
}
Ordre
1
2
3
1 2 3
4
1
3
2
12
Plan
Architecture SIMT
Modèle de GPU
Gestion de la divergence : solutions existantes
Gérer la divergence par PC multiples
Motivation
Politique d'ordonnancement
Proposition d'architecture
Unité d'arbitrage
Fusion avec l'unité mémoire
Résultats
13
Lecture et distribution des instructions
Décodeur
PC
commun
Cache
L1
instructions
Saut?
1 ligne / cycle
PC++
PC, SP
individuels
Arbitre
Instruction
PE0
PE1
PE2
PE3
Arbitre : réduction parallèle
Actif uniquement lors des instructions de saut
Synchronisation conservée le reste du temps
14
Chemin d'accès aux données
dans une architecture SIMT typique
Décodeur
Cache
L1
données
1 ligne / cycle
Arbitre
Données
Adresse:
ligne de
cache
PE0
PE1
PE2
PE3
Partage entre PE d'un port dans le cache de données
Arbitre : préfixe parallèle
Actif uniquement lors des lectures et écritures
15
La revanche de Von Neumann
PC++
Cache
L1
instructions
Cache
L1
données
Saut?
Arbitre
Données
Instruction
PE0
PE1
PE2
PE3
Adresses (code ou données)
Unification du parcours des adresses
La même unité traite les branchements et les accès mémoire
16
Avant/après : occupation des unités
Simulation sous Barra
Simulateur d'architecture NVIDIA
CUDA
Comparaison
À pile, explicite (NVIDIA)
À pile, implicite (SympA'13)
PC multiples (Proposée)
Effet secondaire : gain de 2% en efficacité
(moyenne géo.)
17
Avant/après : conséquences
Piles, compteurs
Mémoire O(n), O(log n)
n = profondeur d'imbrication
1 port L/E vers la mémoire
Exceptions : débordement
Sémantique SIMD
(Bougé-Levaire)
Langages spécifiques
PC multiples
Mémoire O(1)
Pas d'état en dehors des
PC/SP
Possibilité de suspendre,
redémarrer, migrer des
threads
Sémantique SPMD
(multi-thread)
Compilateurs adaptés
Environnement logiciel
classique
Jeux d'instructions
spécifiques
Jeux d'instructions
séquentiels
18
Conclusion et perspectives
Convergence entre architectures SIMT et Chip MultiThreading
CMP
SIMD
SIMT
pile
SIMT
PC multiples
CMT
SMT
Autres politiques d'ordonnancement
Entrelacer / superposer l'exécution de branches
Éviter les situations de famines
L'ordonnancement choisi n'affecte pas la correction
Politique heuristique possible : spéculation
Ordonnanceur spéculatif = prédicteur de saut
En cas de divergence, le prédicteur a toujours raison
19
Une architecture unifiée pour la
divergence de contrôle et la
divergence mémoire en SIMT
Sylvain Collange
Arénaire, LIP, ENS de Lyon
SympA'14
11 mai 2011
Exemple: NVIDIA GeForce GTX 580
Niveau physique
Niveau logique
16 SM / puce
48 warps / SM
2×16 cores (PE) / SM
32 threads / warp
Warp 0
Warp 1
Warp 2
Warp 3
…
PE 31
PE 17
Temps
PE 16
Warp 46
PE 15
PE 1
PE 0
…
…
Warp 47
SM 0
SM 15
21
Pourquoi des unités SIMD?
Régularité : similarité de comportement entre threads
Irrégulier
Régulier
Régularité
de contrôle
1
i=17
Thread
2
3
i=17 i=17
4
i=17
1
i=21
2
i=4
3
i=17
4
i=2
load
A[8]
load
A[0]
load
A[11]
load
A[3]
Time
switch(i) {
case 2:...
case 17:...
case 21:...
}
Régularité
mémoire
load
A[8]
load
A[9]
load load
A[10] A[11]
r=A[i]
A
Memory
Rapide
Correct
« In making a design trade-off, favor the frequent case over the infrequent case. » [HP06]
22
Un pipeline SIMT
Partage coopératif
Lecture, décodage des instructions
Accès mémoire
(0-3) load
IF
T1
(0-3) store
ID
T2
T3
(0) mul
(0)
(1) mul
(2) mul
(1)
(2)
(3) mul EX
(3)
Memory
T0
LSU
Optimisé pour la régularité de contrôle et la régularité
mémoire
23
Résumé
Choix ordre de
Statique
parcours /
Détection de la
reconvergence
Pile / compteurs SIMD classique
PC multiples
Dynamique
SympA'13
GPU Intel Sandy Ce travail
Bridge
24
Téléchargement