NVIDIA GeForce 8800 GTX & 8800 GTS

Publié le 08/11/2006 (Mise à jour le 12/02/2007) par
Imprimer
L’architecture GeForce 8
Comme expliqué dans la brève description de ce nouveau GPU, il repose sur une architecture unifiée qui consiste à utiliser les mêmes unités pour traiter tout type d’éléments, qu’ils soient pixels ou vertices. L’intérêt étant d’éviter qu’un type d’unités ne se tourne les pouces. Vous aurez remarqué que dans l’historique utilisé pour planter le décor, nous parlons uniquement de "pixel shaders" et de leurs unités de traitement. Ce n’est pas anodin. Ces unités ont en réalité déjà presque tout ce qu’il faut pour traiter les vertex shaders. L’unification consiste donc plus à étendre les capacités des moteurs de pixel shaders actuels qu’à fusionner pixel et vertex shaders. Il est d’ailleurs évident que les shader cores des Radeon X1000 d’ATI, au niveau fonctionnel (mais pas de gestion), sont similaires à ceux d’une architecture unifiée. Passer à une architecture unifiée sera donc une évolution naturelle pour ATI avec le R600.


Du côté de Nvidia l’architecture fixe des GeForce 7 ne s’y prête pas très bien. Avec les GeForce 8, Nvidia repart donc de 0. Vous avez bien entendu l’habitude d’entendre ça à chaque nouvelle génération de GPU puisque la "brand new architecture" fait partie des arguments de base pour vendre un GPU. Un argument bateau en général, sauf que dans le cas présent c’est réellement le cas. Nvidia est reparti de rien et a dû revoir totalement son architecture qui avait atteint une limite.


Nvidia s’est tourné vers une architecture similaire à celle des Radeon X1000 en découplant unités de calcul et unités de texturing, qui sont dans la version la plus haut de gamme respectivement aux nombre de 128 et 32. Relativement à l’évolution des GPU de ces dernières années le GeForce 8800 est ainsi très proche des GPU ATI actuels. Mais si l’on s’attache aux détails des différences importantes apparaissent.
Un processeur scalaire
Les unités de calcul des GPUs précédents, tant du côté d’ATI que de Nvidia travaillent sur un certain nombre de pixels en parallèle. Il s’agit de 4 pixels pour les GeForce 7 et de 12 pixels pour les Radeon X1000. Chacun de ces pixels est un vecteur de 4 composantes (RGBA ou XYZW puisqu’il ne s’agit pas forcément de couleurs) et ces 4 composantes sont également traitées en parallèle. Nous supposerons ici qu’un pixel est représenté par un tel registre pour faciliter le raisonnement. A chaque cycle effectif, une instruction va donc être appliquée sur 4 composantes de 4 pixels soit sur 16 éléments dans le cas d’une GeForce 7. Très souvent une instruction n’est pas appliquée sur toutes les composantes. Pour ne pas trop gaspiller de ressources, les shader cores de ces GPUs sont capables de traiter 2 instructions en même temps. Par exemple :
MUL R1.xy
ADD R1.z
Ces 2 instructions, multiplication et addition, peuvent être traitées en même temps bien qu’étant différentes, possibilité qui se nomme co-issue. Il s’agit donc d’unités dites MIMD (multiple instructions multiple data) larges de 512 bits (16 éléments x 32 bits).

Les unités des GeForce 8800 sont par contre de type SIMD (single instruction multiple data) 512 bits. Cela veut-il dire qu’elles sont moins efficaces ? Non puisqu’au lieu de traiter 4 composantes de 4 pixels par cycle, elles traitent 1 élément de 16 pixels. Ce qui veut dire que chaque composante des pixels peut se voir attribuer une instruction différente, sans gaspillage de ressources. Les 2 instructions données en exemple ci-dessus expriment d’ailleurs tout l’intérêt de cette organisation des unités. Avec une unité de type GeForce 7, elles seront appliquées sur 4 pixels à chaque cycle soit sur 16 pixels en 4 cycles. Sur GeForce 8, elles seront appliquées sur 16 pixels en 3 cycles, la première étant décomposée en MUL R1.x et MUL R1.y. 25% de gain à capacité de traitement équivalente, uniquement grâce à une réorganisation !
Spécifications des shader cores
Maintenant que nous avons décrit la philosophie derrière les différentes architectures nous pouvons comparer leurs spécifications :


Comme vous pouvez le constater, le GeForce 8800 GTX dispose d’une puissance de calcul énorme, en plus de bénéficier d’une efficacité de premier plan grâce aux traitements d’instructions scalaires. Il faut cependant garder en tête que ces unités vont également devoir traiter les vertex shaders alors que dans le cas des 2 autres GPUs, des unités dédiées s’en chargent.

Vous remarquez également que les nouvelles venues disposent d’une puissance de filtrage plus que conséquente, nous en parlerons plus en détail par la suite.

Nous avons effectué énormément de tests de manière à avoir une idée précise de la manière dans les shader cores du GeForce 8800 se comportent et force est de constater qu’ils sont redoutablement efficaces bien que les drivers soient encore très jeunes. Cependant nous ne sommes pas parvenus à observer le second MUL en action. Nous supposons que son utilisation est soumise à restrictions ou que le compiler intégré aux drivers ne l’exploite pas encore ce qui pourrait alors laisser envisager un gain dans le futur.

Notez pour le détail que chaque processeur scalaire, en plus des unités MAD et MUL, disposent en pratique d’une unité qui fait office d’interpolateur et de traitement des fonctions spéciales (EXP, LOG, RCP, RSQ, SIN, COS) qui s’exécutent toutes en 4 cycles. Nous supposons qu’au niveau de l’implémentation Nvidia a opté, par shader core, pour 4 unités capables de faire une interpolation sur un quad (carré de 4 pixels, ce qui simplifie les calculs) ou 1 instruction spéciale en 1 cycle.
Vos réactions

Top articles