Fonctionnalités exotiques des GPU

publicité
Fonctionnalités exotiques des GPU
Sylvain Collange, Marc Daumas et David Defour
Paris, 4 décembre 2008
Objectifs
Simulateur many­cores type GPU
Pour exploration micro­architecturale
Existant
Simulateurs GPU pour le rendu graphique
Attila, UPC Barcelone
Simulateurs pour multi­cœurs
MPTLSim, Binghamton, NY
CellSim, UPC Barcelone
2
Une architecture optimisée débit
200
Débit (Go/s)
Intel Core i7 965
50
1,25 3 10
40
Nvidia GTX 280
160
100
Latence (ns)
×8
Bus texture
+calcul d'adresse
+filtrage
+ordonnancement?
×64
L1
Crossbar
+TLB
280
L2
380
DRAM
×6
500 ns
3
Conséquences
GTX280 / Core i7 965
Puissance de calcul ×5
Débit mémoire×6
Latence ×8
Données en vol = parallélisme ×64
Nombre de registres en proportion
Nvidia GT200 30 Kthreads
AMD RV770
1,88 Mo
40 Kthreads? 2,50 Mo
Défi important dans la conception d'un GPU
4
Composition d'un GPU
Nvidia GT200, 576mm2
Coeurs
147mm2 25%
Unités de calcul
50mm2 9%
Contrôle
>34mm2 >6%
Registres
23mm2 4%
Mémoires locales ~20mm2 ~3%
Caches texture
~8mm
2
~1%
ROP
RF
TP
L1C
L1I
SM
TS
?
FMA
FP64?
8x
MAD
SP+AI
+4MUL
5
Passage à l'échelle
Vers le bas : dériver un GPU milieu de gamme à partir d'un GPU haut de gamme
Diminuer le nombre de coeurs
Nvidia, AMD
Diminuer la largeur SIMD
AMD, Intel
Permet de faire varier le ratio ALU/Tex
Nécessité d'une architecture “scalable”
6
Plan
Enjeux, contraintes
Ordonnancement des threads
Registres
7
Masquer les latences : GT200
Assignation des blocs (setup)
32 contextes
Ordonnanceur
Cache
instru­
ctions
× 30 cœurs
Exécution
Cœur 1
Cœur 2
Ordonnanceur SMT distribué 32 voies (warps) / cœur
Scalabilité
Indépendance par rapport au compilateur
Coût
8
Assembleur AMD RV770
ALU
0 x:MUL R1.x, R0.x, C0.x
y:MAD T0.x, R0.y, R0.x, C0.z
z:MAD ...
w:MAD ...
t:RCP T0.y, R0.x;
1 z:MAD R0.w, T0.y, T0.x, C0.y
t:PREDGT ...;
ALU
4 z:MAD ...
t:MAD ...;
5 x:ADD ...;
ALU
6 w:MAD ...;
TEX
2 SAMPLE ...
3 SAMPLE ...
JUMP ...
ELSE ...
LOOP_DX10 ...
ENDLOOP ...
POP ...
Instruction
VLIW
Clause
Programmes distincts ALU, Texture et Contrôle
Découpage du code en clauses
Langage très dépendant du matériel
Évolution naturelle depuis les premiers shaders
9
Masquer les latences : RV770
Ordonnancement
des clauses
Caches instructions
Séquenceur x2
Exécution
...
Séquenceur x2
Texture 1
× 10 cœurs
...
...
...
Cœur 1
Séq
Setup
Ordonnanceur centralisé : X clauses = groupes d'instructions
Partage de matériel
Scalabilité en nombre de cœurs limitée
Ordonnanceur SMT x2 wavefronts/SIMD?
10
Plan
Enjeux, contraintes
Ordonnancement des threads
Registres
11
AMD : registres temporaires
Une clause ALU est ininterruptible
Permet d'utiliser des registres internes aux clauses
Partagés entre plusieurs threads
Partitionnement statique entre registres extra­clauses et intra­
clauses
ALU
0 x:MUL R1.x, R0.x, C0.x
y:MAD T0.x, R0.y, R0.x, C0.z
z:MAD ...
w:MAD ...
t:RCP T0.y, R0.x;
1 z:MAD R0.w, T0.y, T0.x, C0.y
t:PREDGT ...;
ALU
4 z:MUL T0.x, R0.z, r1.x
t:MAD ...;
5 x:ADD R1.z, R0.w, T0.x;
Réduction du nombre de registres matériels nécessaires
12
Bancs de registres : GT200
8 bancs de registres / coeur
1 banc / unité ?
RF
8x8K
Horloge / 2 : il faudrait 16 bancs, ou ports de 64 bits
SIMD, même adresse pour chaque banc :
équivalent à 1 banc avec port de 512 bits
1 banc 512 bits / ensemble de registres ?
Test : ordonnancement et aléas indépendants des numéros de registres
1 banc 512 bits / ensemble de warps ?
0 conflit sur ordonnancement round­robin
Test : opérandes lus séquentiellement
Séparé en 2 x 4 ?
Unités
de
calcul
13
AMD : banc de registres indexable
Accès indirect : R[i]
ALU
0 x:MOV AR.x, R0.x
1 x:MUL R1.x, R4[AR.x].x, C0.x
y:MAD T0.x, R0.y, R0.x, C0.z
2 z:MAD R2[AR.x].w, T0.y, T0.x, C0.y
t:PREDGT ...;
Implémentation « naturelle » de l'indexage relatif des registres d'entrée/sortie des vertex shaders
Le registre d'adresse AR est un vecteur
Adresse potentiellement différente pour chaque voie SIMD
Solution Nvidia non applicable
14
RV770
4 bancs de registres pour 4 SP
Partagés en sous­bancs
Un banc par composante X, Y, Z, W
3 opérandes lisibles dans chaque banc, séquentiellement
RF
16x16
x1K
SP
1 instruction / 4 cycles : 4 sous­bancs par composante
1 cycle pour l'écriture des résultats ?
Et l'unité de texture?
Calcul
16x5
AMD et Nvidia : exploiter la régularité SIMD pour se ramener à des mémoires multi­bancs, mono­
port
15
AMD : bypass explicite
Alternance entre 2 warps
Ne suffit pas à masquer la latence
d'un aller­retour vers les registres
AMD : bypass logiciel
2 registres spéciaux PV et PS :
résultats de l'instruction précédente
ALU
0 x:MUL R1.x,
y:MAD _
,
z:MAD ...
w:MAD ...
t:RCP _
,
1 z:MAD R0.w,
t:PREDGT _,
R0.x, C0.x
R0.y, R0.x, C0.z
R0.x;
PV.y, PS , C0.y
PV.x, R0.z;
ALU
4 z:MUL T0.x, R0.z, r1.x
t:MAD ...;
5 x:ADD R1.z, R0.w, PV.z;
Évite la latence d'une écriture­lecture dans les registres
Diminue la charge sur le banc de registres
Et matériel
Prédication
Accès indirect / compteur de boucle
Ne gère pas les accès indirects / registres
16
Conclusion
Problématiques spécifiques au GPU
Hiérarchie mémoire particulière
Multithreading massif
Espace microarchitural complexe
Quantifier l'apport des différentes solutions
Encore beaucoup d'inconnues
Réponses apportées par le simulateur lui­même
17
Récapitulatif
Nvidia GT200
SIMD x32
8 unités / core
Superscalaire in­order 2 voies
SMT x32
AMD RV770
SIMD x64
16 unités par core
VLIW 5 voies
Multithreading x64, SMT x2?
18
Langage assembleur GT200
Jeu d'instruction RISC
Instructions sur 64 bits ou 32 bits
Abstraction des branchements, dépendances
Non documenté
19
Unités de calcul
Calcul entier introduit tardivement
Réutilisation du pipeline FPU
Latences ALU élevées
Réutilisation du contrôle FPU
Latences ALU = latences FPU
20
Téléchargement