Comment est organisé un GPU ?

6
10695

Voici la deuxième partie de ce Quicky basé sur les GPU. Pour rappel, ces deux Quicky font office d’introduction pour un nouveau type d’articles, créés spécialement pour vous. Pour accéder à la partie 1, c’est par ici.

Ces nouveaux articles s’appelleront les « Inside ». Ils auront pour but de se plonger à l’intérieur du GPU d’une carte en particulier, et de l’étudier. Le but est de voir quelle est sa structure et ainsi pouvoir montrer ses potentielles forces et faiblesses.

Connaître le fonctionnement d’un GPU n’est pas forcément facile, mais nous allons essayer de vous expliquer ici la base, afin d’affiner plus tard vos connaissances dans le domaine.

GTX670PE GPU

Difficulté : Expert

Comme vous l’avez vu dans le Quicky précédent, il existe différentes unités dans un GPU :

  • les Stream Processors
  • les Raster Engine
  • les Texture Mapping Units
  • les Render OutPut Units

Cependant, ces unités ne sont pas mis en vrac dans un GPU. Non, tout est organisé, et c’est cette organisation que je vais tenter de vous expliquer. Et c’est là qu’intervient de manière claire la notion d’architecture.

Une histoire d’Architecture :

Qu’est-ce qu’une micro-architecture ? C’est la manière d’organiser un GPU, dans le but d’améliorer les performances par rapport à la version précédente. Par contre, il ne faut pas faire amalgame entre micro-architecture et génération. En effet, deux cartes peuvent être de génération différentes et partager la même micro-architecture (GTX 680 et GTX 770 par exemple), ou au contraire être de la même génération, mais en étant de micro-architecture différentes (GTX 750 et GTX 760 par exemple).

architecture

Pour faire un bref historique des cartes AMD récentes, les HD 5000 avaient une architecture VLIW5, tandis que les HD 6000 avaient une micro-architecture VLIW4, et les HD 7000 ainsi que les Rx 200 ont des architectures GCN. Pour plus de détails sur la gamme de GPU AMD, c’est par ici. Et pour une rétrospective complète, c’est par ici.

De son côté Nvidia donne des noms de physiciens ou de mathématiciens célèbres à ses micro-architectures. En effet les GTX 400 et 500 étaient sur une architectures Fermi, les GTX 600 et 700 (sauf les GTX 750 et 750 Ti) étaient sur du Kepler, tandis que les toute récentes GTX 900 sont sur une architecture Maxwell. Pour une rétrospective des génération de Nvidia c’est par ici que ca se passe.

Plein de Blocs :

Comme je disais plus haut, les unités de calcul ne sont pas mis en vrac dans le GPU. Et c’est là qu’intervient la notion de blocs.

En effet, les GPU sont formés de blocs insécables (qu’on ne peut pas couper en deux). Selon l’architecture, ces blocs ont des noms différents : Compute Units (CU) chez les cartes graphiques AMD en GCN, SMX chez les cartes Nvidia Kepler, et SMM chez les cartes Nvidia en Maxwell.

Ces blocs contiennent des Stream Processor/ CUDA Core ainsi que des TMU. Par exemple :

  • un CU possède 64 SP et 4 TMU
  • un SMX possède 192 SP et 16 TMU
  • un SMM possède 128 SP et 8 TMU

Sans partir dans les détails, on remarque que AMD a choisi des blocs plus petits (et plus nombreux) tandis que ceux de Nvidia sont plus gros et moins nombreux (bien qu’ils aient rapetissé avec Maxwell).

Prenez une carte Nvidia Kepler, vous remarquerez que son nombre de « coeurs » est toujours un multiple de 192. Ce multiple est le nombre de SMX.

Ces blocs sont rarement mis en avant par le Marketing, sauf à quelques rares occasions. Est-ce que vous vous rappelez lorsque, sous prétexte de la technologie HSA, AMD avait dit que son APU A10 7850K possédait 4 coeurs CPU et 8 coeurs GPU ? Et bien ces « coeurs GPU » sont en fait des Compute Units. La partie graphique intégrée au 7850K avait 8 Compute Units, ce qui fait donc 64×8= 512 SP et 4×8 = 32 TMU.

Bon, quand je vous disais que ces blocs ne possédaient que des SP et des TMU, ce n’était pas tout à fait vrai. En effet, ils possèdent également de la mémoire cache de bas niveau, très rapide. Très très peu évoquée, cette mémoire cache joue un rôle dans les performances d’une carte.

Voilà un exemple, pour voir si vous avez bien suivi.  Ci dessous un SMM de Maxwell, en l’occurrence le GM204, qui anime la GTX 970 et 980 notamment. Vous pouvez comparer ce bloc Maxwell à un bloc Kepler (SMX), juste en dessous.

Nvidia SMMNvidia SMX GK104

Vous pouvez y voir notamment les CUDA Cores (les « Cores »), ainsi que les TMU (« Tex »), sans oublier la mémoire cache (cliquez sur l’image pour l’agrandir).

On voit ici par exemple que Nvidia a fortement allégé son bloc SMM par rapport au SMX pour pouvoir en mettre plus (passage de 192 à 128 CUDA Cores et de 16 à 8 TMU). Par contre, la mémoire cache a été augmentée pour notre grand bonheur.

Des Super Blocs :

Mais ces blocs, que ce soient des Compute Units, des SMX ou des SMM sont eux aussi rassemblés en ce que nous allons appeler des Super blocs. Un Super bloc possède un Raster Engine (unité capable pour rappel de générer des triangles). Si vous ne connaissez pas les Raster Engine, c’est que vous n’avez pas lu la partie 1 (qui est ici) : pas bien ! Dans tous les cas, plus une carte a de super bloc, plus elle a de Raster Engine, et plus elle calcule vite les triangles.

Chez Nvidia, les SMX ou les SMM (selon si on est en présence d’une carte Kepler ou Maxwell) sont regroupés dans des Super Bloc que l’on appelle des Graphic Processing Cluster (GPC). Par contre, il n’y a pas de règle fixe pour connaître le nombre de SM dans un GPC. Mais voilà ce qu’on a pu constater :

  • sur tous les GPU d’architecture Kepler, sauf le GK110 (c’est à dire tout sauf les Titan, la GTX 780 et la 780 Ti) ont des GPC regroupant 2 SMX. Ainsi, la GTX 770 a 8 SMX regroupés en 4 GPC, tandis que la GTX 760 a 6 SMX regroupés en 3 GPC. De son côté, la GTX 650 Ti a 4 SMX regroupés en 2 GPC.
  • sur le GK110, certainement afin d’éviter le profusion de GPC, ceux-ci ne contiennent pas 2 mais 3 SMX. Ainsi la GTX 780 Ti possède 5 GPC (car 15 SMX) tandis que la GTX 780 possède 4 GPC (car 12 SMX)
  • sur Maxwell GM107 (GTX 750 et 750 Ti, possédant respectivement 4 et 5 SMM) n’ont qu’un seul GPC
  • sur Maxwell en GM204 et GM206, un GPC regroupe 4 SMM. Ainsi la GTX 980 possède 4 GPC pleins (car 16 SMM) tandis que la GTX 960 en possède 2 (car 8 SMM).

Voici un appui visuel pour comprendre la coupe qu’a subi la GTX 760 par rapport à la GTX 770 (le trou en bas à droite c’est le GPC désactivé, réduisant de 2 le nombre de SMX et de 1 le nombre de Raster Engine par rapport à la GTX 760)

GTX104 GTX 760

Pour un exemple plus général de ce qu’est un GPC, celui ci-dessous. C’est un GPC d’un GF100 (GTX 480). On voit clairement sur ce schéma qu’il possède plusieurs SM ainsi qu’un Raster Engine.

Nvidia GPC GTX 480

Chez AMD, les Compute Units sont rassemblés dans d’énormes blocs appelés les Shader Engine. Contrairement à Nvidia, le nombre de Super Bloc ne va pas changer d’une variante de GPU à une autre (reprendre l’exemple de la GTX 760 et 770, basées sur le même GPU, mais avec un GPC coupé dans le cas de la GTX 760). Par contre, un super Bloc (Shader Engine) peut avoir plus ou moins de Compute Units. Deux contraintes : le même nombre de CU dans chaque Shader Engine, et pas plus de 16.

Par exemple, le GPU Tahiti (R9 280 et R9 280X) est structuré en 2 Shader Engine, sauf que la R9 280 possède 28 CU (28×64 = 1792 SP), tandis que la R9 280X en possède 32 (32×64 = 2048 SP). Et bien c’est simple : dans le cas de la R9 280, chacun des deux Shader Engine aura 14 CU à sa charge, tandis que pour la R9 280X, chaque Shader Engine aura 16 CU. C’est exactement le même principe avec les autres GPU de la gamme, si ce n’est qu’il y a plus ou moins de Shader Engine :

  • Hawaii (R9 290/290X) : 4 Shader Engine
  • Tonga (R9 285) : 4 Shader Engine
  • Tahiti (R9 280/280X) : 2 Shader Engine
  • Pitcairn/Curacao (R9 270/270X) : 2 Shader Engine
  • Bonaire (R7 260/260X) : 2 Shader Engine
  • Cape Verde (R7 250X) : 1 Shader Engine
  • Oland (R7 240/250) : 1 Shader Engine

Petit exemple de ce que l’on disait « même nombre de CU dans chaque Shader Engine ». Par exemple les GPU Hawaii ont 4 Shader Engine, et 44 CU dans le cas de la R9 290X (ce qui fait donc 11 CU par Shader Engine). Il n’est pas possible d’enlever un seul CU (et donc de passer à 43). Il faut soit en enlever un à chaque Shader Engine, soit rien du tout. Enlever un CU à chaque Shader Engine fait passer le nombre de CU à 40 (et donc 2560 SP). Et tadaaam, voilà une R9 290 !

Vous pouvez comparer par exemple ci dessous les 4 Shader Engines d’une GPU Hawaii (R9 290X) et ceux d’une GPU Tonga (R9 285). Vous constatez que les Shader Engines sont bien moins fournis sur la R9 285. (n’oubliez pas que vous pouvez cliquer pour agrandir).

Vous pouvez également constater que la R9 290X possède 8 contrôleurs mémoires 64 bits (écrits MC pour Memory Controler sur le schéma) contre seulement 4 pour Tonga. Mais ca, c’est le chapitre d’après !

Hawaii R9 290X GPU Tonga R9 285 GPU

Comme vous pouvez le voir, les fabricants de GPU utilisent des architectures, qui sont sur certains points radicalement différentes.

Et autour des Super Blocs ?

Et bien autour des Super blocs, nous retrouvons nos ROP, qui vont se charger des filtres, ainsi que le bus mémoire, au bout duquel on trouve la mémoire graphique. Pour plus d’informations sur le bus mémoire, cliquez ici. En tout cas, notez qu’on aura un certain nombre de contrôleurs mémoire dans le GPU, chacun fournissant un bus de 64 bits. Il suffit donc de multiplier 64 par le nombre de contrôleurs mémoire pour obtenir la fameuse largeur de bus de la carte.

Et maintenant un petit exemple : voilà le GPU de la GTX 980, et ses 4 GPC (en 2 lignes de 2), possédant chacun 4 SMM en ligne qui communiquent avec un Raster Engine. N’hésitez pas à cliquer si vous voyez mal.

Au final, nous avons 4 GPC pleins, c’est à dire 4 Rasterizer + 16 (4×4) SMM, c’est à dire 4 Rasterizer + 2048 (16×128) Cuda Core + 128 (16×8) TMU.

GPU GM204 GTX 980

Vous pouvez voir 64 petits carrés bleus foncés de part et d’autres de la L2 cache au milieu. Ces petits carrés bleus sont les ROP dont nous parlions tout à l’heure.

Et enfin, vous pouvez voir les 4 contrôleurs mémoire 64 bits à gauche et à droite, ce qui nous fait arriver à un bus de 4×64 = 256 bits.

Si vous avez compris cela, vous connaissez maintenant les bases de l’architecture d’un GPU. Cela vous sera extrêmement utile pour suivre nos dossiers « Inside » dont le numéro 1 est à venir.

6
Poster un Commentaire

avatar
5 Fils de commentaires
1 Réponses de fil
0 Abonnés
 
Commentaire avec le plus de réactions
Le plus populaire des commentaires
5 Auteurs du commentaire
geekosaBleachTrinitasGiu26_0CooL_ Auteurs de commentaires récents
  S’abonner  
plus récent plus ancien Le plus populaire
Notifier de
Luiano74
Membre
Luiano74

Merci pour ces superbes articles !

Par contre il y a un calcul que je ne comprends pas, si on a effectivement 128Sp et 8TMU par SMM sur les maxwell, alors pourquoi à la fin de l'article afin de calculer le nombre de TMU on fait "128 (16×4) TMU", ce ne devrait pas être (16SMM x 8 TMU) = 128 ? car d'ailleurs 16×4 = 64 et pas 128 ^^

Trinitas
Membre

En effet, les schémas des GCN ne représentent pas les ROP. Mais on sait que ces ROP sont reliés aux contrôleurs VRAM 64 bits par groupe. Ainsi, les R9 290X et 290 qui abritent 64 ROP avec un bus de 512 bits ont donc 8 contrôleurs VRAM de 64 bits, donc 8 groupes de 8 ROP. Ces contrôleurs et ROP sont reliés aux cache L2 que l'on voit bien par contre dans le schéma. Aussi, au contraire des ROP des Nvidia qui sont reliés aux GPC, donc si on désactive un GPC complétement, on entraine également la désactivation du groupe… Lire la suite »

Giu26
Membre
Giu26

Sur les photos des R9 285 et 290X, comment sont représentés les ROP ?

Giu26
Membre
Giu26

Super article

_0CooL_
Membre

merci clément pour ces précisions.