AMD Radeon HD 5870 et 5850

Publié le 23/09/2009 par
Imprimer
RV870 ou Cypress
Pour implémenter le support complet de Direct3D 11, AMD a dû développer un nouveau GPU, comme vous devez vous en douter. Les changements à apporter à son architecture étaient cependant mineurs puisqu’avec le support de Direct3D 10.1 et l’intégration depuis plusieurs générations d’une unité de tessellation, les Radeon HD 4000 n’étaient pas bien loin de Direct3D 11. C’est en partie ce qui explique qu’AMD arrive en avance sur Nvidia.


Cypress, le nom de code du GPU également appelé RV870, reprend une architecture semblable à celle des Radeon HD 4800 et 4700, mais double le nombre d’unités d’exécution et atteint la bagatelle de 2.15 milliards de transistors entassés dans 334 mm² ! De quoi afficher 2.72 teraflops au compteur.



20 SIMDs
Le GPU des Radeon HD 5800 est composé de grosses unités SIMD larges de 2560 bits qui se décomposent en 16 processeurs vec5. AMD parle ici de 80 cores par unités SIMD, mais c’est selon nous un abus de langage similaire à celui que fait Nvidia et qui est destiné à mettre un avant le GPU par rapport au CPU. Ceci étant dit, si AMD a conservé la structure de ses unités d’exécution, le nombre de SIMDs a été doublé et passe de 10 à 20, soit de 160 processeurs vec5 à 320 ou encore de 800 à 1600 cores.


La structure interne des processeurs vec5 reste globalement similaires et de type 4 +1. Les 4 premières unités sont identiques et peuvent exécuter soit une instruction FP32 simple par cycle, une instruction INT24 par cycle, une addition FP64 en 2 cycles ou une multiplication (ou multiplication + addition) en 4 cycles. La 5ème unité est distincte et peut traiter soit une opération FP32 simple par cycle, soit une instruction INT32 par cycle soit une fonction spéciale en FP32 par cycle.

Evolution importante, Cypress supporte le nouveau standard IEEE754-2008 qui est requis par Direct3D 11. Celui-ci ajoute principalement le support de l’instruction FMA (Fused Multiply Add) qui part rapport à l’instruction MAD (Multiply Add) classique permet de conserver la totalité du résultat intermédiaire de la multiplication pour plus de précision. Compte tenu de la manière dont fonctionnent les nombres flottants, cela permet de traiter très efficacement d’autres instructions. AMD en a profité pour rendre le produit scalaire plus efficace et câblé l’instruction SAD (Sum of Absolute Difference) qui permet d’accélérer fortement certains algorithmes.

Exploiter une unité vec5, en opposition à une unité qui a un comportement scalaire comme dans les GPUs Nvidia, requiert un travail supplémentaire de la part du compilateur qui va devoir essayer de trouver 5 instructions indépendantes à exécuter en parallèle. C’est souvent impossible, ce qui explique l’efficacité moindre, par unité, de ce type d’architecture. En contrepartie, elle permet à AMD de placer beaucoup plus d’unités dans ses GPUs.

Chaque SIMD dispose de 16384 registres de 128 bits, comme les générations précédentes, de manière à supporter un nombre important de threads et ainsi masquer les latences autant que possible.

En plus des unités arithmétiques, chaque processeur vec5 dispose d’une unité dédiée au traitement des branchements qui sont donc gratuits au niveau des performances, tout du moins s’il n’y a pas de divergence puisque chaque SIMD travaille sur des blocs de 64 threads (contre 32 chez Nvidia). Dès qu’une divergence se manifeste entre les threads, les 2 branches doivent être exécutées successivement avec un masque pour n’écrire les résultats que pour les threads qui les empruntent.

Toujours pour coller à Direct3D 11, chaque SIMD voit sa mémoire partagée passer de 16 Ko (Radeon HD 4600 à 4800) à 32 Ko. Une mémoire partagée globale à tous les SIMDs de 64 Ko est proposée en supplément et exposée dans OpenCL via une extension.

Les unités de texturing restent par contre similaires, soit 4 par SIMD. AMD indique cependant avoir augmenté la bande passante vers le cache L1 ce qui devrait améliorer leur rendement.


Double rasterizer ?

Dans les documentations d’AMD, la mise en avant d’un double rasterizer nous a fait penser que Cypress serait le premier GPU à pouvoir traiter 2 triangles par cycle puisque pour rappel, il s’agit jusqu’ici de la seule étape qui n’a pas été parallélisée. Le faire représente plusieurs défis et nous avons un instant pensé qu’AMD y avait trouvé une solution. En réalité, questionné à ce sujet, le fabricant nous a indiqué qu’il s’agit simplement d’un détail d’implémentation et qu’il n’y a en réalité qu’un setup engine et donc qu’un triangle traité par cycle. Au lieu d’un rasterizer complexe pour se charger de leur découpe en pixels, ce sont 2 plus simples qui ont été implémentés, mais cela revient au même.

Notez que comme dans les GPUs précédents, la tessellation repose bien sur une unité fixe (elle pourrait l’être via un programme exécuté dans les SIMDs). Par contre les interpolateurs ont disparus et ce sont les unités de calcul qui se charge de l’interpolation.


ROPs doublés et bus de 256 bits
Tout comme pour le RV740, AMD a doublé le nombre de ROPs par contrôleur mémoire. Si nous restons sur 4 contrôleurs 64 bits, pour un bus mémoire total de 256 bits, Cypress intègre donc 32 ROPs. Pour supporter cette charge supplémentaire, le cache L2 de chaque contrôleur est doublé et atteint 128 Ko.

Alors que la puissance de calcul a doublé, le bus mémoire reste lui inchangé et AMD ne pourra que compter sur de la mémoire GDDR5 plus rapide pour alimenter son nouveau GPU. Il est évident que le rapport puissance de calcul / bande passante mémoire va donc changer significativement et dans certains cas il risque de limiter Cypress.
Vos réactions

Top articles