Accueil » Dossier » Test Radeon HD 7970 : AMD lance sa nouvelle architecture » Page 2

Test Radeon HD 7970 : AMD lance sa nouvelle architecture

1 : Introduction 3 : Vue d’ensemble : Tahiti et la Radeon HD 7970 4 : PRT, DirectX 11.1, Eyefinity, 3D stéréoscopique et plus encore 5 : Configuration du test 6 : Tests synthétiques & Tesselation 7 : Battlefield 3 8 : Crysis 2 9 : The Elder Scrolls V: Skyrim 10 : DiRT 3 11 : World Of Warcraft 12 : Batman: Arkham City 13 : Metro 2033 14 : GPGPU 15 : Overclocking 16 : Consommation, températures et bruit 17 : Conclusion

L’architecture Southern Islands

Si la Radeon HD 7970 est la première carte disponible dans le commerce à être basée sur l’architecture Graphics Core Next d’AMD, cette dernière n’a plus grand-chose de secret depuis un bon moment. En effet, afin de donner aux développeurs un maximum de temps pour se former à son futur matériel, AMD l’a dévoilée en juin 2011, lors du Fusion Developer Summit. Selon Eric Demers, CTO de la division graphique de la société, l’architecture VLIW utilisée jusqu’à présent et depuis l’époque des Radeon HD 2000 n’avait pas encore exploité l’intégralité de son potentiel en matière graphique, mais commençait à montrer ses limites dans le cadre des tâches de calcul plus généralistes. Plutôt que de recycler une fois de plus une vieille technologie, la firme de Sunnyvale a donc choisi d’investir dans un renouvellement complet de son architecture.

Un tel choix a de quoi effrayer : le calcul généraliste et la flexibilité ont beau être des objectifs tout à fait nobles et défendables, les cartes graphiques haut de gamme restent avant toute chose utilisées pour booster la qualité visuelle et la fluidité des jeux. Pour AMD, le défi était donc de concevoir un GPU qui soit à la fois plus polyvalent et plus performant en 3D. Et pour y parvenir, la société a choisi d’abandonner l’architecture Very Long Instruction Word (VLIW) en faveur de la Graphics Core Next.

Premier avantage de Graphics Core Next : l’efficacité

L’architecture VLIW d’AMD est très efficace lorsqu’il s’agit de traiter des instructions graphiques. Son compilateur est optimisé pour les calculs de produits scalaires, qui constituent le cœur même des calculs graphiques en 3D. Elle montre toutefois ses faiblesses lorsqu’elle doit traiter les instructions scalaires que l’on retrouve dans les applications plus généralistes : dans ce cas, le compilateur est très sollicité pour maximiser les optimisations et doit parfois faire des suppositions. Or, il arrive de temps en temps qu’un jeu d’instructions (on parle de « front d’onde ») ne puisse s’exécuter tant qu’un autre n’a pas été traité ; c’est ce que l’on appelle une dépendance. Le problème est que le compilateur ne peut pas modifier la file d’attente des fronts d’ondes après coup, ce qui signifie que les ALU doivent souvent perdre du temps à attendre que les dépendances soient résolues.

Rien de tel qu’un exemple pour illustrer le problème. Voici un exemple théoriques montrant comme le moteur SIMD VLIW4 de la Radeon HD 6970, avec ses 16 banques de shaders (contenant chacun 4 ALU, ce qui donne un total de 64 ALU par moteur SIMD), traiterait une file d’attente de fronts d’ondes contenant des dépendances :

Image 1 : Test Radeon HD 7970 : AMD lance sa nouvelle architecture

Image 2 : Test Radeon HD 7970 : AMD lance sa nouvelle architecture

Comme vous pouvez le voir, l’architecture VLIW ne gère pas les dépendances de manière idéale, et plusieurs fronts d’ondes doivent patienter inutilement dans la file pendant que des ALU restent vides et au repos.

Comment, dans ce cas, accroître le nombre de calculs scalaires réalisés par cycle ? Simple : en faisant appel à une nouvelle unité de traitement nommée « Compute Unit » (CU). La CU dispose, en dur, de son propre algorithme d’ordonnancement, lequel est capable d’assigner les fronts d’onde aux unités de calcul vectoriel (« Vector Unit », VU) disponibles, et ce, avec une capacité limitée à le faire dans le désordre afin d’éviter les goulots d’étranglement liés aux dépendances.

Les Compute Unit remplacent les moteurs SIMD auxquels nous avions fini par nous habituer. Chaque CU comprend quatre VU, elles-mêmes composées de 16 ALU (Arithmetic & Logical Unit) ; nous avons donc 64 ALU par CU, soit autant que par moteur SIMD. La principale différence réside dans le fait que, contrairement aux shaders des moteurs SIMD, les quatre Vector Units (VU) de la Compute Unit (CU) sont ordonnancées de manière indépendante.

D’apparence peut-être anecdotique, cette différence est cruciale pour améliorer les performances en calcul généraliste, car elle donne à chaque VU la possibilité de traiter des fronts d’onde différents en cas de dépendance au sein de la file d’attente :

Image 3 : Test Radeon HD 7970 : AMD lance sa nouvelle architecture

Dans notre exemple, la file d’attente qui nécessitait six cycles pour être terminée sur un moteur SIMD reposant sur l’architecture VLIW4 est maintenant exécutée en quatre cycles sur une CU basée sur l’architecture Graphics Core Next, et ce, alors que le nombre total d’ALU reste inchangé. C’est là la clé du surcroît d’efficacité de la nouvelle architecture par rapport à la VLIW. AMD affirme que la Radeon HD 7970 peut en théorie atteindre une vitesse de pointe 7,5 fois supérieure à celle de la Radeon HD 6970 dans les calculs généralistes ; en réalité, l’écart dépend beaucoup de l’efficacité du compilateur et nous avons constaté des variations importantes dans nos tests. Il arrive que la Radeon HD 7970 fasse à peine mieux que la 6970, du moins en termes d’instructions traitées par ALU et par cycle. Il ne fait cependant aucun doute que l’architecture Graphics Core Next dispose d’un potentiel nettement plus élevé que la VLIW4 en matière de calcul générique.

La Compute Unit disséquée

Image 4 : Test Radeon HD 7970 : AMD lance sa nouvelle architecture

Comme nous l’avons signalé plus haut, la Compute Unit (CU) remplace dans la terminologie AMD le moteur SIMD que nous connaissons depuis les Radeon HD 2000. Nous avons déjà mentionné le fait que chaque CU se compose de quatre VU (Vector Unit) comportant elles-mêmes 16 ALU et un registre chacune. Nous savons également que les VU fonctionnent indépendamment les unes des autres.

Ce que ne disent pas les exemples simplifiés que nous avons utilisés jusqu’à présent, c’est que chaque VU peut traiter un quart de front d’onde par cycle. Équipé de quatre VU, chaque CU peut par conséquent traiter quatre fronts d’onde tous les quatre cycles, ce qui équivaut à un front d’onde par cycle. Les VU sont programmables de manière scalaires et elles fonctionnent toutes en mode vectorielle.

Nous n’avons pas encore abordé l’unité de calcul scalaire des CU, qui est essentiellement chargée de traiter le code de branchement et l’arithmétique liée aux pointeurs. Les unités vectorielles (VU) pourraient réaliser ces tâches elles-mêmes, mais ce coprocesseur a l’avantage de les décharger du calcul vectoriel et donc de leur permettre de se concentrer pleinement sur ce qu’elles font le mieux.

Enfin, chaque CU contient quatre unités de textures reliées à un cache L1 de 16 Ko, qui est donc deux fois plus grand que celui de la VLIW4. Autre différence, ce cache L1 est utilisable en lecture et en écriture, alors qu’il ne l’était auparavant qu’en lecture seule. Les textures peuvent maintenant transiter dans les deux sens par le même cache.

Sommaire :

  1. Introduction
  2. L’architecture Southern Islands
  3. Vue d’ensemble : Tahiti et la Radeon HD 7970
  4. PRT, DirectX 11.1, Eyefinity, 3D stéréoscopique et plus encore
  5. Configuration du test
  6. Tests synthétiques & Tesselation
  7. Battlefield 3
  8. Crysis 2
  9. The Elder Scrolls V: Skyrim
  10. DiRT 3
  11. World Of Warcraft
  12. Batman: Arkham City
  13. Metro 2033
  14. GPGPU
  15. Overclocking
  16. Consommation, températures et bruit
  17. Conclusion