<<

École thématique ARCHI 07 Plan 19-23 mars 2007

 Partie 1 : Introduction

Processeurs Graphiques  Partie 2 : Fonctionnement interne du GPU

 Partie 3 : Utilisation du GPU David Defour DALI, Université de Perpignan École thématique ARCHI07

mars 2007

2/105

Partie 1 : Introduction Puissance de calcul flottant 32 bits

 Le calcul ne coûte pas chère

 Type d’application

 Place du GPU dans le système

 Présentation du pipeline graphique

École École thématique thématique ARCHI07 ARCHI07

mars 2007 mars 2007 Source : “A Survey of General-Purpose Computation on Graphics Hardware”, J. D. Owens, D. Luebke, N. Govindaraju, M. Harris, J. Krüger, A. E. Lefohn, and T. J. Purcell 3/105 4/105 Pentium III, 256Ko , 0.18 µµµm, 28.1 M Aujourd’hui le calcul ne coûte pas cher… , 90 mm²

2.5 MM²

 Utilisation du silicium :  Communication ( )

 Contrôle ( Exécution d’instruction, ooo )

 Mémoire ( Cache, registres )

 Calcul ( Unités de calcul )

École École thématique Si l’on ramène tout ça à la taille d’une puce … thématique ARCHI07 ARCHI07

mars 2007 mars 2007 Source : www.sandpile.org

5/105 6/105

Pentium M, 2Mo cache, 65nm, 151.6 M transitors, Concrètement … 91 mm²

 Le calcul ne coûte pas cher 0.9mm  FPU du Pentium III : ~2% Puce en 65nm  FPU de l’ Core 2 : 64-bit FPU <1%  La mémoire augmente mais la latence aussi  Pentium III, cache L2 : 256Ko / 4 cycles  Intel Core 2, cache L2 : 2Mo / 14 cycles  Le transfert de donnée devient très coûteux École École  0.18 µm : 12.1 ps/mm thématique thématique  65 nm : ~30-60 ps/mm ARCHI07 ARCHI07 Source : www.sandpile.org mars 2007 mars 2007 10mm

7/105 8/105 Introduction Comment calculer plus ?

 Utiliser les transistors disponibles pour calculer plus et plus vite  2 approches : 1. Mécanismes pour exploiter le parallélisme de données  Pourquoi plus de calcul ? • Jeux d’instructions SIMD (MMX, SEE, SEE2)  Cryptographie • Opérations entières (XOR, <<, …) • Opérations sur les grands entiers 2. Architectures dédiées • Physics Processing Unit ()  Calcul scientifique • Processeurs réseaux (AMD, Infineon, Motorola, …) • Multiplication matricielle • Simulation • (IBM, Sony, Toshiba) • Processeurs graphiques (ATI/AMD, )  Multimédia École • Traitement de l’image École thématique • Traitement du son thématique ARCHI07 • Traitement de l’information ARCHI07 mars 2007 mars 2007

9/105 10/105

Utilisation de la puissance de calcul : Films Applications des GPU: Jeux

École École thématique thématique ARCHI07 ARCHI07

mars 2007 mars 2007

11/105 12/105 Applications des GPU : Visualisation, CAD Applications des GPU : Réalité virtuelle

École École thématique thématique ARCHI07 ARCHI07

mars 2007 mars 2007

13/105 14/105

Applications des GPU : Calcul scientifique GPU comme coprocesseur

 Exemples de speed-up par rapport au CPU :  FFT : x 4 « High Performance GPU-based FFT Library », Govindaraiu et al.  Décomposition LU : x3 - 5 « LU-GPU: Algorithms for dense Linear Systems on Graphics Hardware », Galoppo et al.  Finite Difference Time Domain(FDTD, maxwell) : x30 - 50 http://www.emphotonics.com/fastfdtd.html  Recherche, tri dans base de données : x4 « GPUTeraSort: High Performance Graphics Sorting for Large Database Management », Govindaraiu et al. École École  Pliage de protéine : x 40 thématique thématique ARCHI07 ARCHI07 http://folding.stanford.edu/

mars 2007 mars 2007

15/105 16/105 GPU dans le système Bus : les autoroutes de la carte mère

 PCI Carte Vidéo  PCI cadencé à 33 MHz en 32 bit : 125 Mo/s maximum Mémoire  PCI cadencé à 33 MHz en 64 bit : 250 Mo/s maximum vidéo  PCI cadencé à 66 MHz en 32 bit : 250 Mo/s maximum  PCI cadencé à 66 MHz en 64 bit : 500 Mo/s maximum GPU  AGP  AGP 1x (250 Mo par seconde),  AGP 2x (500 Mo par seconde, deux transferts par cycle au lieu d'un) Northbridge  AGP 4x (1 Go par seconde), + Bus Système  AGP 8x (2 Go/s maximum) (PCI,AGP,PCIe…)  PCI Express  PCI Express 1X (250 Mo/s) Carte Mère  PCI Express 32X (8 Go/s ) École CPU École thématique thématique  HyperTransport ARCHI07 ARCHI07  HyperTransport 2.0 (22,4 Go/s, 1,6 GHz) Mémoire système  HyperTransport 3.0 (41,6 Go/s, 2,6 Ghz) mars 2007 mars 2007

17/105 18/105

Communications entre CPU et GPU Le pipeline graphique

 Comment passer d’ici à là ?

Application

Commandes

Géométrie

Rasterization

École École Pixel thématique thématique ARCHI07 ARCHI07

mars 2007 mars 2007 Écran

19/105 20/105 Le pipeline graphique Le pipeline graphique

Application Application Gears of war : Définition du jeu Commandes Commandes Bus CPU Réseaux Système GPU Interface avec l’utilisateur Géométrie Géométrie Physiques IA Rasterization Rasterization

École Pixel École Pixel thématique thématique ARCHI07 ARCHI07 mars 2007 Écran mars 2007 Écran

21/105 22/105

Le pipeline graphique Le pipeline graphique

Application Application

Gears Of War : Commandes Commandes Envoi des commandes DirectX

Géométrie Géométrie  Drivers DirectX : GPU :  Traitement des commandes Transformation des Sommets Rasterization DirectX Rasterization Calcul de la lumière Envoi des instructions au GPU Elimination des objets en dehors de École Pixel École Pixel la scène thématique thématique Assemblage des primitives ARCHI07 ARCHI07 mars 2007 Écran mars 2007 Écran

23/105 24/105 Le pipeline graphique Le pipeline graphique

Application Application

Commandes Commandes

Géométrie Géométrie

Rasterization GPU : Rasterization Conversion des triangles en Pixel GPU : École Pixel Interpolation des coordonnées de École Pixel Application de la texture thématique texture thématique ARCHI07 ARCHI07 Test de profondeur Interpolation de couleur mars 2007 Écran mars 2007 Écran Mélange des couleurs 25/105 26/105

Le pipeline graphique Pipeline graphique traditionnel

Application Application  Fonctions pré-définies  Configurable en utilisant les états OpenGL / DirectX Commandes Vertex  Fonctionnalités limitées

Géométrie Rasterization Rasterization

Pixel École Pixel École Processor thématique thématique ARCHI07 ARCHI07 mars 2007 Écran mars 2007 Écran

27/105 28/105 Nouveau Pipeline graphique Vertex Shaders

Application Application

Vertex Vertex Processor Processor Programmable  Les vertex shaders permettent d’animer/modifier les caractéristiques des sommets Rasterization Rasterization

 Calcul de la lumière Pixel Pixel Processor Processor École Programmable École thématique thématique  Ils sont flexibles et rapides ARCHI07 ARCHI07 mars 2007 Écran Écran mars 2007

29/105 30/105

Pixel Shaders

Chaque pixel est calculé individuellement

PARTIE 2 : Fonctionnement interne du GPU

École  Les pixels shaders ont une vue partielle des pixels voisins. École thématique thématique ARCHI07 ARCHI07 mars 2007 mars 2007

31/105 32/105 Partie 2 : Fonctionnement interne du GPU Bloc diagramme d’un GPU

Commandes Command & data fetch

1. Données Vertex Shader Géométrie 2. Tesselation Cull/Clip/Setup 3. Géométrie, lumière et vertex shader Rasterization Z-Cull Rasterization 4. Clipping, culling Shared 5. Tramage L2 Pixel Pixel Shader texture 6. Pixel Shader Cache Fragment pixel crossbar 7. Test alpha

8. Brouillard Z-compare & Blend

École École thématique thématique Memory Memory Memory Memory ARCHI07 ARCHI07 partition partition partition partition

mars 2007 mars 2007 Écran 128 Mo 128 Mo 128 Mo 128 Mo GDDR 3 GDDR GDDR 3 GDDR 3 GDDR 33/105 3 GDDR 34/105

Vertex / Vertices Données primitives

  Permettent de créer des formes géométriques Formes géométriques simples   Vertex {x, y, z, w} Point (effet de particule)  Coordonnées finales : {x/w, y/w, z/w}  W est le caractère homogène généralement = 1  Ligne  + d’autres informations  Couleur diffuse : {r,g,b,a}  Triangle Couleur du vertex lorsque celui-ci est éclairé par une lumière blanche  Couleur spéculaire :  Couleur réfléchie par le vertex Triangle fan  Normale à la surface : Permet le calcul d’éclairage  Triangle strip École  Coordonnées de textures (u, v) École thématique thématique ARCHI07  Taille mémoire croissante ~ jusqu’à 256 octets ARCHI07  Tampons d’indexation mars 2007  {x,y,z,w} : 16, {r,g,b,a} : 4, normale : 12 … mars 2007 Réutilisation des vertex en utilisant des indices

35/105 36/105 Format de représentation des données 2. Tesselation

 Virgule fixe 123.45678  Principe : Augmenter le nombre de vertices pour augmenter la finesse de  8, 16, 32 la surface.  Signé, non signé  Compression de plusieurs données dans un seul nombre  Interpolation pour arriver à une résolution donnée (combinaison de 5,6,5 ; 1,5,5,5 ; …)  Dépend de la position de l’objet (près, distant)  Virgule flottante 1.12345678 e 2  Calcul à partir de la Position du vertex + normale  fp16, fp24, fp32  Support partiel de la norme IEEE-754 École École thématique thématique ARCHI07 ARCHI07 mars 2007 mars 2007 Tesselation point-normal d’ATI Tesselation d’un modèle complexe

37/105 38/105

3. Géométrie, lumière et vertex shader Translation

 Objectif : Transformations géométriques + Lumière  Rotation, translation  Transformation de système de coordonnées  Changer la forme d’un objet  Changer la position d’un objet dans une scène  Dupliquer des objets  Calcul de projection pour les caméras virtuelles  Animations  Solutions :  Vertex processor fixe École  Vertex processor programmable École thématique thématique ARCHI07 ARCHI07 mars 2007 mars 2007

39/105 40/105 Rotation Mise à l’échelle

 Uniforme

 Déformante

École École thématique thématique ARCHI07 ARCHI07 mars 2007 mars 2007

41/105 42/105

Lumière : Diffusion Lumière : Réflexion (miroir)

 Loi de Lambert : L’intensité lumineuse réfléchie est proportionnelle au cosinus de  Miroir parfait : l’angle d’incidence de la lumière  θθθl = θθθr

 Calcul :  Model d’illumination de Phong  I : intensité du rayon lumineux light  nshiny : scalaire entre 0 et 1 qui définit la « réflexivité » du matériau  Idiffuse : intensité du rayon diffusé

 Kd : facteur de « diffusion »

École  n : vecteur normal à la surface normalisé École nshiny thématique thématique k II specular= s light cos f ARCHI07  l : vecteur de la lumière normalisé ARCHI07 mars 2007 mars 2007

43/105 44/105 Récapitulatifs des opérations Les vertex fixes

 Rotation :  Existent depuis longtemps  Calcul de sinus, cosinus  Très efficaces pour réaliser les opérations de base (translation, rotation, …)  Mise à l’échelle :  Multiplication, addition de matrice/vecteur  Contraintes :  Algorithmes paramétrables mais non modifiables  Normalisation de vecteur :  Couleur au format RGBA  Calcul de la longueur : L = sqrt(x²+y²+z²)  Coordonnées des vertex XYZW  Division de chaque composante par L  … École École thématique thématique ARCHI07 ARCHI07

mars 2007 mars 2007

45/105 46/105

Unités d’exécution des shaders : Vertex Shader programmable Unité MAD : Multiply and accumulate

Vertex data VLIW

 L’unité MAD prend en entrée des flottants 32 bits (fp32) et fournit un résultat fp32 MIMD 4 voies  Elle est capable d’effectuer les opérations suivantes : Vertex FP32 FP32 - MAD Texture Scalar Vector  FADD, FMUL, FMAD Fetch Unit Unit

L1 cache  Pipelinée, mais pas optimisée pour la latence  FADD et FMUL proche du standard IEEE * 1 voie  Les dénormalisés sont arrondis à 0 sin,cos,log,exp rcp, rsq  Les cas spéciaux sont gérés correctement Shared Branch Unit  Les arrondis héritent d’un passé original L2 Vertex engine :  FMAD différent du FMA texture Primitive Assembly -Multithread  Le produit intermédiaire est gardé avec moins de précision Cache -Branchement sans École École  Pour le calcul graphique c’est suffisant et cela permet de doubler Viewport Processing pénalité thématique thématique le débit à faible coût. ARCHI07 -2 inst. / cycle ARCHI07 Mémoire -9 FLOPS mars 2007 Triangle setup mars 2007 de Texture * : Caractéristiques arithmétiques des processeurs graphiques, 47/105 M. Daumas, G. Da Graca, D. Defour, SympA 2006. 48/105 Évaluation des fonctions spéciales sur GPU Interpolateur multifonction Nvidia (Pineiro and Oberman, ARITH 17, 2005)

 Évaluation basée sur interpolation plus tabulation ou évaluation minimax

École  Pleinement pipeliné École thématique thématique ARCHI07 ARCHI07 mars 2007 mars 2007

49/105 50/105

Vertex programmable : les registres Vertex programmable : les registres

 REMARQUE : On ne n’intéresse qu’aux shaders V3.0  Registres constant flottant  Définissent des valeurs qui ne changeront pas d’un vertex à l’autre  Registres de 128 bits semblables aux registres SSE  Contiennent les matrices de transformation  4 nombres flottants sur 32 bits  Plus de 256 registres en lecture seule  Registres temporaires  Registres constant booléen  Contiennent les résultats d’opérations effectuées dans le  16 registres vertex shader  Registres constant entier  32 registres en lecture/écriture avec 3 ports de lecture  16 registres  Registres d’entrée École École  Registres d’échantillonnage thématique  16 registres en lecture seule thématique  4 registres d’accès aux textures ARCHI07 ARCHI07  Contiennent la position des vertices, la couleur, normale …  Accès à 4 textures différentes mars 2007 mars 2007

51/105 52/105 Vertex programmable : les instructions Caractéristiques dictées par DirectX 9c

 Registres des vertex shaders V3.0

 Nombres très limités Nom Nombre R / W # de port  Permettent de réaliser les transformations géométriques de lecture  Instructions de contrôle de flux : (shaders v3.0) Input register 16 R 1  Boucles Temporary register 32 R / W 3  Branchements conditionnels Constant float register >256 R 1  Prédication Constant boolean register 16 R 1  Accès aux textures Constant integer register 16 R 1  Création d’un relief plus complexe par des modifications liées à la Sampler 4 R 1 texture. Adress register 1 R / W 1 Exemple : Normal Mapping Loop register 1 R 1 • R => X • G => Y Predicate register 1 R / W 1 • B => Z Output register 12 W - École École thématique thématique ARCHI07 ARCHI07  Nombre d’instructions exécutées : mars 2007 mars 2007  Statique : 512  Dynamique : 65 536 53/105 54/105

Bloc diagramme d’un GPU 4. Culling/Clipping

Command & data fetch

Vertex Shader  Élimination des données 3D non visibles à l’écran  Évite de faire du calcul pour des données qui n’apparaîtront Cull/Clip/Setup pas dans le résultat final

Z-Cull Rasterization  Culling :

Shared  Rejet basé sur l’ordre des vertices qui détermine les faces L2 avant et arrière Pixel Shader texture Cache  Clipping : Fragment pixel crossbar 1. Rejet si vertex en dehors de l’écran 2. Utilisation de plan de clipping Z-compare & Blend  Rasterisation École École thématique Memory Memory Memory Memory thématique  Construction des pixels à partir ARCHI07 partition partition partition partition ARCHI07 des vertices mars 2007 mars 2007 128 Mo 128 Mo 128 Mo 128 Mo GDDR 3 GDDR GDDR 3 GDDR 3 GDDR 3 GDDR 55/105 56/105 5. Rasterization : calcul de la perspective 5. Rasterization

 Objectif :  Pour un triangle donné, il faut identifier les pixels appartenant à ce triangle.  Calcul d’une projection Orthographique (plan 2D) d’un objet 3D  Échantillonnage de point :

 Technique :  Un pixel appartient à un triangle ssi le centre du pixel est à l’intérieur du  En pratique, il suffit d’enlever la coordonnée de profondeur z triangle Car si une droite est parallèle en 3D, elle le reste en 2D  On évalue 3 équations de la forme E=Ax+By+C, où E=0 est exactement  Problème : sur la ligne, E>0 est à l’intérieur du triangle  Et la perspective ???  Le but est d’implémenter ces équations avec suffisamment de  Solution : précision, en minimisant la latence, École École le délai et la surface thématique  Division de chaque composante par w en utilisant la réciproque thématique ARCHI07 ARCHI07 [x/w y/w z/w 1] mars 2007 mars 2007 Source : « GPUs: Applications of computer arithmetic in 3D graphics », Stuart Oberman, RNC7 57/105 58/105

6. Pixel shader Pixel Shader

Texture data Pixel data MADD SIMD 4 voies + calcul adresse de texture Mip-mapping 1. Application d’une texture +Mini ALU Filtrage  Accès à la texture via les coordonnées U, V +Normalisation FP16 FP FP32

 Une carte peut stocker beaucoup de texture L1 Texture Vector Mini-ALU

Cache Processor Unit  Seul un faible nombre peut être utilisé simultanément (4- MADD SIMD 4 voies 8) +Mini ALU 2. Mélange des textures FP32 Vector Mini-ALU  Opérations différentes appliquées à chaque texture Shared Unit Pixel engine : ex : couleur du pixel X couleur de la texture N°1 L2 -Multithread texture alpha du pixel X couleur de la texture N°2 Branch Unit -SIMD Cache École École thématique thématique Fog Unit ARCHI07 ARCHI07 Mémoire mars 2007 mars 2007 de Texture Fragment pixel Crossbar

59/105 60/105 Mappage de texture Accès aux textures

 On associe un point d’une image à  Sur les GeForce 6 et 7 un point géométrique  Calcul de l’adresse de la texture dans le premier MAD  Mélange entre les données de la couleur de texture avec les couleurs  + Unité d’accès et de filtrage interpolées (bilinéaire, trilinéaire, anisotropic, + mip - map)

 Filtrage bilinéaire

• P1,2 = d 1 * P 1 + d 2 * P 2

• P3,4 = d 1 * P 3 + d 2 * P 4

• P = d 4 * P 1,2 + d 3 * P 3,4

• avec d 2 = 1 - d1 et d 4 = 1 - d3 École École thématique thématique ARCHI07 ARCHI07 mars 2007 mars 2007

61/105 62/105

Les textures (suite) Les textures (suite et fin)

 Le mip – map  Filtrage trilinéaire  Principe des poupées russes  Interpolations linéaires sur les 3 dimensions  Diminue l'effet d'aliasing généré lors de transformations Bilinéaire : Trilinéaire :  Diminue la quantité de mémoire nécessaire pour effectuer 4 points de départ 8 points de départ le mapping de texture 3 interpolations linéaires 2 interpolations bilinéaires 1 interpolation linéaire

 Filtrage anisotropique Taille N  Adapte la texture aux déformations de l’objet (perspective)

École Taille N/2 École thématique thématique Taille N/4 Filtrage bilinéaire ARCHI07 ARCHI07 Filtrage anisotropique (floue) mars 2007 mars 2007

63/105 64/105 Pixel shader programmable Exécution des instructions

 Instructions spécifiques :  Co-issue : Exécution de 2 instructions Opération 2  Texld : Opération 1 différentes en parallèle sur OU chargement d’une texture en U, V (bump mapping) les composantes RGBA  Texkill : annule le rendu pour un pixel Opération 1 Opération 2  Support des branchements

 Support pour le « Multiple Render Target » Shader 1 3 registres de sorties + 1 registre de profondeur  Dual issue : Exécution de 2 instructions différentes sur 2 shaders Opération 1 Opération 2 différents École École Shader 2 thématique thématique ARCHI07 ARCHI07 mars 2007 mars 2007 Opération 3 Opération 4

65/105 66/105

Caractéristiques dictées par DirectX 9 Swizzle

 Registres des pixel shaders V3.0 Nom Nombre R / W # de port de lecture

Input register 10 R 1  Les données sont dans des Temporary register 32 R / W 3 registres de 4 flottants Constant float register 224 R 1  L’opérateur swizzle permet : Constant integer register 16 R 1  Le réarrangement des Constant boolean register 16 R 1 données Predicate register 1 R 1  La duplication Sampler 16 R 1 Face register 1 R 1  La suppression Position register 1 R 1 Loop counter register 1 R 1 Output color register 1 ou 4 W 1  R.xyzw = A.wxzy * B.wwww École Output depth register 1 W 1 École thématique thématique ARCHI07  Nombre d’instructions exécutées : ARCHI07 mars 2007  Statique : 65 536 mars 2007 http://www.3dcenter.org/artikel/cinefx/index2_e.php  Dynamique : 65 536 67/105 68/105 7. Tests alpha 8. Le brouillard

 Tests alpha :  Brouillard volumétrique  Alpha : transparence d’un pixel  Mélange la couleur du pixel avec la couleur du brouillard  Supprime l’affichage des pixels dont la valeur alpha est inférieure à un seuil en fonction de sa distance par rapport à la caméra

 Test de profondeur  Utilise un tampon de profondeur  Mélange alpha  Supprime des pixels en fonction de leurs profondeurs  Mélange les couleurs de deux pixels en fonction de la valeur alpha  Stencil test  Test la valeur qui se trouve dans le stencil buffer  Celui arrivant et celui déjà présent  Utile pour les ombres simples et le reflet dans un miroir  Dessine la scène dans une forme quelconque et non la fenêtre entière École École thématique thématique ARCHI07 ARCHI07

mars 2007 mars 2007

69/105 70/105

Viewport Les goulots d’étranglement

 Définit la zone géométrique d’affichage des pixels dans la  Architecture sous la forme d’un pipeline fenêtre  Si une unité travaille plus qu’une autre Exemple d’utilisation : => problème

 Goulots d’étranglement possibles:

École École thématique thématique ARCHI07 ARCHI07

mars 2007 mars 2007

71/105 72/105 Impacts architecturaux de DirectX 10 Architecture unifiée imposée par DirectX 10

 Unification des ressources de calcul !

 Limité à Windows Vista  Pixel, vertex, géométrie, physique  Supporté uniquement par les R600 et GeForce 8  Moins de goulot d’étranglement  Unification des ressources de calcul 8 processeurs  Tout ce que je viens de vous dire sur le pipeline graphique est à 16 processeurs de revoir !!! flot (vert)

8 unités de filtrage de texture (bleu) Resources DirectX 9 DirectX 10 Temporary Registers 32 4,096 4 unités d’adressage de texture Constant Registers 256 16 x 4,096 Textures 16 128 Cache L1 École Render Targets 4 8 École thématique thématique 6 bus 64bits Maximum Texture ARCHI07 4,048 x 4,048 8,096 x 8,096 ARCHI07 d’interface mémoire Size avec cache L2 dédié mars 2007 mars 2007

73/105 74/105

GeForce 8 et CUDA Environnement de programmation CUDA

 Informations issues de CUDA sur la 8800 :  Environnement et architecture conçus ensemble => ne fonctionne qu’avec les GeForce 8  Cœur double-pumped (1350 Mhz)  Programmation par threads  16 multiprocesseurs à 675 Mhz  Extension du langage C • traitent des groupes de 32 threads sur 8 processeurs __global__ généraux + 2 spécialisés __device__ • Disposent d’une mémoire partagée de 16ko __shared__ (communication inter-)  Mémoire en lecture / écriture (plus de distinction entre vertex : a[i]=p et pixel p=a[i] )  Tous les 2 cycles, 1 inst. Courantes sur 512 threads • 256 opérations / cycles (ou 512 si MAD)  Support des pointeurs • + 64 inst. spéciales École École thématique thématique  Environnement CTM ( Close to The Metal ) avec ATI ARCHI07 ARCHI07

mars 2007 mars 2007

Puissance mesurée d’une 8800GTX 75/105 76/105 Partie 3 : Utilisation du GPU

 Les GPU en quelques chiffres

 Modèle mémoire PARTIE 3 :  Structure de données Utilisation du GPU  Algorithmique sur GPU

École École thématique thématique ARCHI07 ARCHI07

mars 2007 mars 2007

77/105 78/105

Évaluation des Gflops de la 7800GTX Les GPU en quelques chiffres : ATI R600

Vertex Shader 9 opérations FP / cycle Inst. Inst. 4 voies x 1 MADD 1 opérations = 8 opérations FP / FP32 FP32  Modèle : X2000XTX FP / cycle cycle Scalar Vector  80nm, 500 10 6 transistors, 750 Mhz, 180 W, 420 mm² !!! Unit Unit  Mémoire : 1 Go de DDR4, 2400 MHz X 8 shaders = 72 opérations FP / cycle X 550 Mhz = 39 GFLOPS  Bande passante max : 153 Go/s +  Vertex + Pixel Shader : 64 Pixel Shader

16-27 opérations FP / cycle Inst. Inst.  Unité de texture : 32 4 voies x 1 MADD = 8 opérations FP /  Inst. cycle Pipeline de sortie : 16 2 opérations FP32 FP / cycle Mini-ALU Vector Normalisations FP16  Puissance de calcul attendue : 512 GFLOPS Unit / cycle

École 2 opérations FP32 4 voies x 1 MADD École  Support pour DirectX 10.1 et OpenGL 2.0 thématique FP / cycle Mini-ALU Vector = 8 opérations FP / thématique ARCHI07 Unit cycle ARCHI07

mars 2007 X 24 shaders = 648 opérations FP / cycle mars 2007 X 550 Mhz = 356 GFLOPS Source : http://en.wikipedia.org/wiki/Comparison_of_ATI_Graphics_Processing_Units TOTAL = 400 GFLOPS 79/105 80/105 Les GPU en quelques chiffres : NVidia GeForce 8 Les GPU en quelques chiffres

 Et pour comparer… le Cell  90nm, 234 10 6 transistors, 3.2GHz, 235 mm² !!!  Modèle : 8800GTX  Mémoire : 512Ko de cache L2 6  90nm, 681 10 transistors, 575MHz, 484 mm² !!!  Bande passante max : (optimisée pour le débit et non la latence)  Mémoire : 768 Mo de GDDR3, 1800 MHz • 204.8 Go/s (bus interne)  Bande passante max : 86.4 Go/s • 25.6 Go/s (mémoire externe)  Vertex + Pixel Shader : 128  8 Synergistic Processing Elements 128bits SIMD  Unité de texture : 32  1 Power Processor Element  Pipeline de sortie : 24  Puissance de calcul attendue : 205 GFLOPS  Puissance de calcul attendue : 520 GFLOPS

 Support pour DirectX 10.0 École École thématique et OpenGL 2.1 thématique ARCHI07 ARCHI07

mars 2007 mars 2007 Source : http://en.wikipedia.org/wiki/Comparison_of_NVIDIA_Graphics_Processing_Units

81/105 82/105

Hiérarchie mémoire au sein du PC + GPU Modèle mémoire du CPU

Disque  Mémoire de type accès aléatoire  Accessible à partir de n’importe quel endroit du programme Mémoire Principale  Lecture/Écriture vers les registres  Lecture/Écriture vers la mémoire locale (pile)  Lecture/Écriture vers la mémoire globale (tas) Mémoire vidéo (GPU)  Lecture/Écriture vers le disque

Caches du CPU Caches (GPU)

École École thématique Registres du CPU Registres des Registres thématique ARCHI07 ARCHI07 constantes (GPU) temporaires (GPU) mars 2007 mars 2007

83/105 84/105 Modèle mémoire du GPU Les pointeurs

 Accès mémoire plus restreint  Utilisation de textures dépendantes Texture Texture  Programme GPU (texture indirections) 3 Donnée  Allocation/Libération de la mémoire uniquement avant le calcul 3 Donnée  Pas de pile locale  Créer des dépendances  Pas d’accès disque direct potentiellement non-recouvrables par 1 Donnée du calcul non-dépendant  Lecture/Écriture vers les registres temporaires 1 Donnée  Mémoire globale en lecture seulement  Exemple: les octree • V = a[ i ];  GPUGems 2, Chapitre 37  Écriture vers la mémoire globale à la fin du traitement (Shader v3.0) • Position d’écriture fixée par la position de l’élément traité Pas d’écriture vers une adresse mémoire calculée • Les vertex shader peuvent écrire dans un flux de sommet Écriture de 12 composants de 4 flottants École • Les pixel shader peuvent écrire dans le frame buffer École thématique Écriture de 4 composants de 4 flottants thématique ARCHI07 ARCHI07 Question : a[i] = v; mars 2007 Comment implémenter de façon logicielle une écriture « aléatoire » ? mars 2007

85/105 86/105

Stockage des données Utilisation du Framebuffer

 Les données se trouvent :  Mémoire écrite par le fragment processor  Vertex buffer  Zone mémoire en écriture seule  Frame buffer  Affichage du résultat  Texture  Utile pour mémoriser le résultat de calcul GPGPU

Texture

École Vertex Fragment École Vertex Fragment Rasterizer Rasterizer thématique Vertex Buffer Processor Processor Frame thématique Vertex Buffer Processor Processor Frame ARCHI07 Buffer(s) ARCHI07 Buffer(s)

mars 2007 mars 2007

87/105 88/105 Utilisation de la mémoire de texture Utilisation de la mémoire de texture

 Idée :  Le plus utilisé en GPGPU  Écrire le résultat dans la mémoire de texture  Création d’algorithme en plusieurs passes  Permet les itérations (+ Ping-Pong)  Itération 1 : écriture des résultats dans le framebuffer  Support OpenGL • Sauvegarde sur des flottants 16/32 bits / pixel  Itération 2 : association du résultat à • Utilisation des Multiple Render Targets (MRTs) une texture, et lecture de la texture Texture ATI et Nvidia • 1. Copie vers la texture - glCopyTexSubImage • 2. Rendu direct vers la texture - École GL_EXT_framebuffer_object École Vertex Fragment Rasterizer thématique thématique Vertex Buffer Processor Processor Frame ARCHI07 ARCHI07 Buffer(s) mars 2007 mars 2007

89/105 90/105

Utilisation de la mémoire de texture Utilisation de la zone d’un vecteur de sommet

 Idée :  Render-To-Texture (RTT) basé sur les pbuffers  Écrire le résultat dans un vecteur de sommet  Rapide, mais ne fonctionne que sous Windows  Permet aux données de reboucler sur le pipeline graphique  Support multi-plateforme  Support OpenGL • Sauvegarde sur des flottants 16/32 bits / pixel  Frame Buffer Object (FBO) • Utilisation des Multiple Render Targets (MRTs) • Copie vers un vecteur de sommet - GL_ARB_pixel_buffer_object • Lent, utilise de la bande passante

École Vertex Fragment École Vertex Fragment Rasterizer Rasterizer thématique Vertex Buffer Processor Processor Texture thématique Vertex Buffer Processor Processor Frame ARCHI07 ARCHI07 Buffer(s) mars 2007 mars 2007

91/105 92/105 Résumé sur la mémoire Structure de base

 Contraintes sur la programmation en GPU  Tableaux :  Pas de lecture / écriture simultanée sur une même texture.  Limité à 2048 ou 4096 éléments  Écriture uniquement dans le pixel courant.  Reformulé en tableau 2D  On peut combiner la valeur d’un pixel avec la valeur du pixel antérieur.  Matrices :  Il est possible d’accéder n’importe où dans une texture  Limité à mais pour un coût élevé. 2048x2048 ou 4096x4096  Le nombre de textures adressables simultanément est éléments limité.  Structure naturelle  Pas de traduction d’adresse École  La taille des textures est limitée (généralement 4096 École thématique pixels). thématique ARCHI07 ARCHI07 mars 2007 mars 2007

93/105 94/105

Structures creuses Algorithmique

 Intérêts :  Réduction du temps de calcul  Le tri bitonique  Réduction de la bande passante

 Tabulation de données  Solutions: 1. Stockage complet des données  Rejet des données en utilisant le culling  Cluster de GPU appliqué à la bioinfo

2. Stockage des données intéressantes  Table de page École  Table de hashage École thématique thématique ARCHI07 ARCHI07 mars 2007 mars 2007

95/105 96/105 Algorithmique sur GPU : Le tri bitonique Algorithmique sur GPU : Le tri bitonique Tri (cohérence Tri Comparaison Comparaison Comparaison Coordonnées locale) Interpolation des sommets Tri Tri  Tri en O(log² n) étapes bilinéaire  Chaque étape effectue n comparaisons / échanges  Coût total : O(n log²n) 3 3 3 3 3 2 1

7 7 4 4 4 1 2

4 4 7 7 2 3 3  Implémentation sur GPU :

8 8 8 8 1 4 4 Données 2D 6 2 2 1 8 5 5 à trier

École 2 6 1 2 7 6 6 École Itération sur plusieurs données thématique thématique Pixel trié ARCHI07 1 1 6 5 5 7 7 ARCHI07  GPUTeraSort: High Performance Graphics Coprocessor Sorting for mars 2007 5 5 5 6 6 8 8 mars 2007 Large Database Management, N. K. Govindaraju et al.

97/105 98/105

Tabulation de données + … Interpolation linéaire quasi gratuite

 Objectif :  Une texture flottante peut mémoriser 4 canaux  Recalculer une données est parfois coûteux (= 4 fonctions: sin, cos, exp, log)  Utilisation de table  Utiliser le filtrage disponible dans l’unité de texture (ex: évaluation des fonctions élémentaires)  Fournit des valeurs entre les valeurs tabulées

 Solution :  Filtrage linaire : y = a . x 1 + (1-a) . x 2  Mémoriser les données dans une texture  Filtrage bilinéaire, Filtrage trilinéaire, Filtrage anisotropique + mipmapping +  Inconvénients : École École thématique ??? thématique  Gourmand en bande passante ARCHI07 ARCHI07 mars 2007 mars 2007

99/105 100/105 Cluster de GPU en Bioinformatique HMMer sur GPU : ClawHMMer

 HMMer  « ClawHMMER: A Streaming HMMer-Search Implementation », D.  Base de données de protéines R. Horn, Supercomputing 2005 • SWISS-PROT (200 000 protéines)  x3 par rapport à PowerPC G5 • NCBI (> 2.5 millions de protéines )  x25 par rapport à Pentium 4  Séquences d’ADN  Dérivé de la version HMMer pour CPU • DDBJ Japan (42 millions de gènes) • GenBank (10 millions de séquences)  Basé sur l’algorithme de Viterbi  Problème : • Recherche du chemin le plus probable • Plusieurs protéines codent la même fonction • Implémentation en Brook (langage de haut niveau) • Comparaison d’une nouvelle protéine avec celles de la base de données École École thématique • Recherche de similarités en utilisant un modèle thématique ARCHI07 probabiliste ARCHI07 mars 2007 mars 2007

101/105 102/105

Implémentation de ClawHMMer (1) Implémentation de ClawHMMer (1)

 Pré-tri de la base de données par longueur des séquences  Implémentation :  Utilisation d’une texture de 4 flottants  Pour utiliser la mémoire GPU disponible (256-512 Mo) 3 pour la sauvegarde des probabilités, 1 pour la max  Pour que la quantité de calcul sur ces données soit  Modèle précédent déroulé et exécuté dans le pixel shader identiques  Les probabilités de transitions sont stockées dans les registres  Hidden Markov Model constants  Exécution vectorielle en testant plusieurs protéines en parallèle

 Limites :  Nombre de registres intermédiaires limité  Nombre de vecteurs en sortie limité

 Version exécutée sur machine SPIRE École École (16 nœuds graphiques) thématique  Pour une séquence de longueur L : thématique ARCHI07 ARCHI07  Découpage manuel des jeux de données  L multiplications matrice-vecteur  Utilisation >95% des 16 processeurs mars 2007 mars 2007

103/105 104/105 Conclusion Pointeurs

 De nouveaux co-processeurs sont disponibles http://www.gpgpu.org http://www.nvidia.com  Puissance de calcul et bande passante http://www.ati.com  Environnement de programmation complexe  Mais les choses s’améliorent (DirectX10, CUDA, CTM, ...)  Paradigme de programmation intéressant  Recherche très active sur des représentations de données GPUGems 2, efficaces Programming Techniques for high performance graphics and General-Purpose Computation  Les algorithmes doivent s’adapter à l’architecture Matt Pharr (idem pour le cell) 2005 École École thématique thématique Addison-Wesley ARCHI07 ARCHI07 ISBN : 0-32133-559-7 mars 2007 mars 2007

105/105 106/105