Accueil » Dossier » GPU haut de gamme : ATI VS nVidia » Page 3

GPU haut de gamme : ATI VS nVidia

1 : Introduction 2 : Architectures 4 : Filtrage des textures 5 : AntiAliasing 6 : Le test 7 : Performances synthétiques 8 : Tests pratiques 9 : Tests pratiques (suite) 10 : Cartes Asus, bruit, overclocking 11 : Bilan, conclusion

Architectures (suite)

Le NV40 dans le détail

Lors de la mise au point du NV30 le mot d’ordre semblait avoir été « flexibilité ». En effet au niveau des fonctionnalités pures le GPU de nVidia était très satisfaisant et allait largement au delà de ce qui était préconisé par DirectX 9. A côté de ça nVidia avait choisi de maximiser les performances lors de l’exécution de code DirectX 8 en dotant chaque pixel pipeline des fameux Registers Combiners présents depuis la première GF. L’idée de la firme Californienne était de rester fidèle à sa formule habituelle, à savoir :

  • Innover au niveau des fonctionnalités quitte à ce qu’elles ne soient pas exploitables directement. L’objectif ici est de satisfaire les développeurs en leur donnant une base de travail pour leurs futurs jeux.

Offrir des performances élevées dans les jeux du moment afin de contenter les joueurs.

Cette stratégie lui a toujours réussi et nVidia pensait bien continuer sur cette voie. Et cela aurait pu être le cas si ATI n’avait pas joué les troubles fêtes en devançant nVidia avec son R300 qui non content d’être le premier chip DirectX 9 disponible, offrait également des performances de haut niveau à la fois dans les PS1.x et les PS2.0.

nVidia était donc contraint de changer de tactique et la première conséquence de l’échec du NV30 fut le NV35 une version largement remaniée de cette architecture. Pour une fois nVidia allait à l’encontre de ses principes : afin de concurrencer ATI plus efficacement dans le haut de gamme, la firme Californienne était prête à « sacrifier » les performances dans les jeux actuels pour améliorer les performances de sa puce dans les PS2.0. Ainsi la fréquence a été réduite, et surtout nVidia a du abandonner ses Registers Combiners pour deux unités flottantes, certes capables de les émuler mais au prix toutefois de performances parfois inférieures dans certains cas particuliers.

Le deuxième pan de cette stratégie est le NV40 dont les objectifs étaient clairs : mettre les performances en virgule flottante des pixel pipeline au niveau, tout en conservant la flexibilité offerte par le NV30. Et pour s’assurer d’y parvenir nVidia a mis toutes les chances de son côté en n’hésitant pas à créer un GPU de 222 millions de transistors.

Vertex Shaders

Tout comme son concurrent nVidia a doté sa nouvelle architecture de six unités de Vertex Shaders mais celles-ci sont désormais de type MIMD (Multiple Instructions Multiple Data) ce qui signifie qu’elles sont totalement indépendantes les unes des autres. Chaque unité peut donc exécuter une instruction différente. Encore une fois à l’image d’ATI, nVidia a conçu ses unités pour qu’elles soient capables d’opérer simultanément sur un vecteur et un scalaire. Mais contrairement aux unités du R420 qui travaillent sur un vecteur 4D et un scalaire, les unités du NV40 travaillent sur un vecteur 3D et un scalaire, le R420 conserve donc un avantage au niveau des performances brutes.

En contrepartie nVidia offre un certain nombre de fonctionnalités en plus. Le support du branchement dynamique était déjà présent dans les unités du NV30 mais il se voit ici amélioré par l’ajout d’une unité dédié à cet effet. Cependant la principale nouveauté apparue avec le NV40 est la possibilité d’échantillonner une texture dans un Vertex Shader. Pour avoir une idée de l’intérêt de cette fonction, vous pouvez vous référer à notre article 3 années d’évolution des shaders. Attention toutefois, depuis sa publication les possibilités du vertex texturing ont été nettement revues à la baisse. Ainsi le seul filtrage disponible désormais est le point sampling, le bilinear pouvant toutefois être émulé en effectuant 4 échantillonnages.

Pixel Shaders

Attardons nous maintenant sur le point le plus intéressant de l’architecture du NV40, en effet contrairement à son concurrent direct, nVidia a pour cette génération entièrement remis les choses à plat. Le NV40 est donc le résultat d’une toute nouvelle architecture, qui pour la première fois depuis la GeForce, n’a pas été conçue avec les Registers Combiners à l’esprit. La première chose qui marque c’est le nombre de quads pipelines : d’un sur le NV30 on passe à quatre ! nVidia a compris que la flexibilité ne faisait pas tout, le nombre de pipeline joue encore un rôle primordial dans les performances d’une architecture.

Malgré le nombre conséquent de transistors nVidia a du faire des sacrifices, en supprimant notamment la deuxième unité de textures. Mais c’est bien là un moindre mal : depuis l’avènement des shaders on assiste peu à peu à une augmentation du nombre d’instructions arithmétiques par rapport au nombre d’instructions de textures. Chaque pipeline du NV40 dispose de deux ALU. En soit cela n’a rien de neuf le NV35 disposait déjà d’une ALU capable de piloter l’unité de texture et d’effectuer l’ensemble des instructions, et d’une deuxième ALU mais celle-ci était bien plus limitée. Même si ses deux unités ne sont toujours pas parfaitement identiques elles sont en revanche bien plus exploitables que celles du NV35.

La raison principale est que désormais elles sont co issue, ce qui signifie qu’elles n’opèrent pas uniquement sur un vecteur de 4 éléments mais peuvent aussi opérer sur un vecteur de 3 éléments et un scalaire tout comme les unités d’ATI. Mais pas seulement ! Ces unités peuvent aussi opérer sur deux vecteurs de deux éléments. Cette flexibilité permet de maximiser leur utilisation et de garantir une efficacité maximale.

Tout comme pour le NV35 l’ALU 1 peut soit piloter l’unité de texture soit effectuer un calcul mais dans certains cas elle peut effectuer les deux. Pour être plus complet : l’ALU 1 est capable d’effectuer des multiplications ou des fonctions complexes. Elle ne peut pas effectuer d’addition et par conséquent bien évidemment pas de MAC (Multiply Accumulate). En revanche elle dispose d’une instruction de normalisation native en FP16 qui peut être effectuée gratuitement. L’ALU2 pour sa part est plus complète car elle est aussi capable d’effectuer des additions et donc les fameuses instructions MAC si utiles dans les calculs matriciels.

Si l’on combine les deux unités (dual issue) avec le fait que chacune est co issue on obtient une performance de crête de 4 opérations différentes par pipeline ce qui est assez impressionnant. Il faut noter que dans ce calcul on ne prend pas en compte les mini-ALUs. Tout comme ATI, nVidia dispose d’unités dédiées au support des modifiers afin de les effectuer gratuitement.

On peut maintenant se demander quels sont les atouts de cette architecture comparée à celle d’ATI ? Dans le cas d’un shader présentant une répartition équilibrée entre les instructions de texture et les instructions arithmétiques, aucune architecture ne se détache du lot. Les différences se joueront sur l’efficacité des pipelines, chose que l’on ne peut pas déterminer en se contentant d’étudier les architectures. En revanche la flexibilité du NV40 peut s’avérer payante lorsque les instructions arithmétiques sont plus nombreuses. C’est ce qui se passe notamment dans le cas de shaders procéduraux. Cette théorie semble être confirmée par nos tests pratiques comme vous le verrez plus loin.

Support orthogonal des textures flottantes

Si la génération précédente avait marqué l’introduction des textures flottantes, le NV30 faisait figure de parent pauvre à ce niveau avec un support limité aux textures rectangles sans gestion des différents modes de wrapping ni des Mipmaps. Avec le NV40 nVidia a donc décidé de se rattraper et propose donc un support complet des textures flottantes sans restriction sur leur format et en autorisant également le filtrage, ce qu’ATI ne supporte ni dans le R300 ni dans le R420. Ce filtrage ne peut toutefois s’effectuer qu’en FP16, ce qui est tout de même déjà appréciable.

nVidia va même plus loin en étant le premier à offrir un pipeline de rendu entièrement flottant, jusqu’au Frame Buffer. En effet jusqu’à présent il était possible d’effectuer un rendu dans une texture flottante mais l’absence de blending flottant limitait les possibilités car une des opérations les plus courantes dans ce genre de situations consiste à accumuler plusieurs passes de rendu pour obtenir par exemple les contributions de plusieurs lumières. Il était possible de s’en sortir en réalisant l’accumulation directement dans le Pixel Shader mais cette solution s’avère nettement plus coûteuse et n’est pas très élégante. Là encore le blending ne peut s’effectuer qu’en FP16.

Conclusion

Alors au final lequel des deux constructeurs a réussi son pari ? Pour pouvoir répondre complètement à cette question il faudra prendre en compte les résultats des tests. Toutefois du point de vue strictement de l’architecture il est difficile de ne pas être impressionné par le travail accompli par nVidia. Ils ont réussi à proposer un design très bien pensé, et flexible tout en offrant suffisamment de puissance brute pour lui garantir de bonnes performances.

A côté le design d’ATI surprend moins vu qu’il s’agit d’un R300 revu et corrigé. Mais il ne faut pas pour autant rabaisser le travail fourni par la firme Canadienne même si l’on peut être un peu déçu de voir que quelques limitations « frustrantes » des PS2.0 sont toujours présentes comme par exemple le nombre d’indirections de texture. Hormis ce détail le reste de l’architecture conserve la qualité qu’elle avait à la sortie du R300 : une grande efficacité, ce qui couplé à la puissance brute offerte par le R420 devrait garantir d’excellentes performances.

Sommaire :

  1. Introduction
  2. Architectures
  3. Architectures (suite)
  4. Filtrage des textures
  5. AntiAliasing
  6. Le test
  7. Performances synthétiques
  8. Tests pratiques
  9. Tests pratiques (suite)
  10. Cartes Asus, bruit, overclocking
  11. Bilan, conclusion