ATI Radeon X800 XT et X800 Pro

Publié le 04/05/2004 par et
Imprimer
Shaders simples mais efficaces
En ne modifiant pas ses unités de calcul, ATI conserve cette redoutable efficacité qui a fait le succès des Radeon 9700 et 9800. L´efficacité est clairement au cœur de l´architecture d´ATI. En face, NVIDIA a opté pour une approche très différente : complexifier l´architecture pour lui donner plus de possibilités. Le problème est que sans efficacité ces possibilités sont inutilisables. C´est le problème qu´a rencontré NVIDIA avec la gamme des GeForce FX. Avec le GeForce 6800, NVIDIA a choisi de conserver cette complexité mais de la modifier entièrement afin de la rendre plus efficace, le but étant d´allier les possibilités des GeForce FX (et même plus) à l´efficacité des Radeon.

Bien entendu, NVIDIA n´a pas pu atteindre complètement cette efficacité. Les Radeon 9700/9800/X800 conservent donc un avantage à ce niveau comme vous pourrez le constater dans les divers résultats de cet article. Ceci dit, l´efficacité des GeForce 6800 est à cent lieues de celle des GeForce FX. Le nouveau GPU de NVIDIA offre clairement un compromis très intéressant entre efficacité et possibilités. La question reste bien entendu de savoir à quel point les développeurs vont pouvoir et/ou vouloir user de ses possibilités.

Voici quelques résultats obtenus en Pixel Shader. Le premier tableau utilise des pixel shader 2.0 extraits d´applications courantes et exécutés sous une autre application (résultats en Mpixels /s). Nous avons ensuite utilisé deux shader de RightMark 3D (Specular Lighting et Procedural Texturing), en Full precision (FP32/FP24) ainsi qu’en partial precision sur GeForce (FP16).

Pixel Shader 2.1
Avec les Radeon X800, ATI supporte une version plus avancée des Pixel Shader 2.0. Premièrement ATI peut maintenant gérer 512 passages dans les pixel pipelines au lieu de 64 auparavant. Ceci porte le nombre d´instructions gérées de 160 à 1536. Etant donné que ce nombre maximal dépend de l´utilisation de toutes les unités (vectorielle, scalaire et de texturing) et ne peut-être atteint que quand elles sont toutes utilisées, ATI ne peut pas exposer autant d´instructions dans DirectX. La limite en pratique passe donc de 96 instructions (64 mathématiques + 32 de texturing) à 512 instructions (peu importe le type).

ATI expose également 32 registres au lieu de 12 avec les Radeon 9700/9800. Il ne s´agit cependant pas d´une nouveauté et les Radeon 9700/9800 peuvent également en gérer 32. Les Pixel Shader 2.0 ne permettant pas d´exposer plus de 12 registres, ATI a estimé (avec raison) qu´il était inutile de passer par des Pixel Shader 2.x pour si peu de différence.


Toutes les variantes des Pixel Shader situées entre les 2.0 et les 3.0 se nomment 2.x, tout du moins pour le runtime de DirectX. Les développeurs ont accès avec le HLSL à des profils de compilation différents qui correspondent grossièrement à chaque architecture.
Le profil ps_2_0 correspond aux Radeon 9500 à 9800.
Le profil ps_2_a correspond aux GeForce FX.
Le profil ps_2_b correspond aux Radeon X800.
Le profil ps_3_0 correspond aux GeForce Serie 6.
Si des lettres sont utilisées pour les séparer c´est parce que du ps_2_b n´est pas nécessairement plus évolué que du ps_2_a. Ce n´est d´ailleurs pas le cas. S´il fallait donner un chiffre à ces versions, le profil ps_2_a correspondrait à du PS 2.8 alors que le profil ps_2_b représenterait, lui, du PS 2.1.

Les capacités des nouvelles Radeon restent donc encore bien inférieures à celles des GeForce FX. Ceci n´a pas été un problème pour ATI jusqu´ici, mais qu´en sera-t-il dans quelques mois, dans 1 an ? Il est très difficile de répondre à cette question et nous ne pouvons pas, à l´heure actuelle y répondre.
Où sont les 2 unités des GeForce 6800 ?
Sur le papier le GeForce 6800 dispose de 2 unités de calcul des pixel shader par pipeline contre une chez ATI. Nous pourrions donc nous attendre a voir des performances bien plus élevées sur le GeForce 6800. Nous avons cherché une explication à ceci et avons constaté que le GeForce 6800 dispose bien de 2 unités par pipeline mais que celles-ci ne sont pas identiques. La première peut effectuer toutes les opérations complexes, les opérations de texturing et les multiplications, mais pas d´addition ni ce qui y est lié. C´est la seconde unité qui s´occupe des additions (ainsi que des MAD et DP3). Elle peut également exécuter une multiplication, mais aucune autre instruction.

Cela signifie en pratique que le shader doit contenir un savant mélange d´instructions alternées dans un ordre bien précis pour utiliser complètement les 2 unités à chaque cycle. Le compilateur intégré aux drivers garde donc une importance non négligeable et au fur et à mesure de son évolution il devrait permettre de mieux ordonner les pixel shader afin qu´ils puissent tirer plus de profit des 2 unités de calcul. En l´état actuel des choses, force est de constater qu´ATI fait aussi bien avec une seule unité !
Vertex Shader
Il n´y a rien de bien du neuf du côté des Vertex Shader d´ATI. Il est néanmoins intéressant d´en comparer les performances à ceux de NVIDIA. Pour ce faire, nous avons utilisé un test géométrique de Rightmark 3D réalisé en fonction fixe (T&L), en VS1.1, en VS2.0, en VS2.x et en VS3.0. A chaque fois c´est la même chose qui est calculée.


Comme vous pouvez le constater, NVIDIA garde un avantage lorsqu´il s´agit d´opérations T&L. Les unités de Vertex Shader de NVIDIA semblent fortement optimisées pour ce mode. Une fois passé aux Vertex Shader, c´est ATI qui mène la danse. Les GPU NVIDIA chutent de façon inexpliquée avec le branchement statique. Ils se rattrapent avec le branchement dynamique. C´est d´ailleurs totalement anormal que le branchement dynamique soit exécuté plus rapidement que son équivalent statique. Probablement un bug dans les drivers NVIDIA ... qui y traînerait alors depuis la sortie des GeForce FX.
Vos réactions

Top articles