ATI Radeon X1800 XT & XL

Publié le 05/10/2005 par et
Imprimer
Performances en pixel shading
Nous avons extrait des shaders de 3 applications qui en utilisent des complexes : 3DMark05, Far Cry et Tomb Raider AOD. Nous les avons exécutés sur tout l’écran dans une application externe.


Dans 2 pixel shader sur 3, Nvidia domine avec la 7800 GTX, grâce à sa puissance de calcul plus importante, par contre ATI repasse devant dans le troisième qui repose plus sur l´accès aux textures dépendantes (indirections) qui profitent de la bande passante plus élevée sur les X1800 XT.

Par rapport à la X850 XT PE, la X1800 XL amène des gains assez réduits, entre 5 et 10%, ce qui n´est pas étonnant puisqu´elle dispose de moins de bande passante mémoire et d´une puissance de calcul plus réduite. Les gains sont donc dus à la nouvelle architecture et donc au ring bus et à l´Ultra Threading. La X1800 XT affiche bien entendu des performances plus élevées, surtout dans le troisième shader puisque son avantage en bande passante mémoire et sa fréquence plus élevée semble se combiner pour offrir un gain de 70% par rapport au X1800 XL !


Nous avons ensuite testé 2 shaders d’éclairage :


Ces shaders mesurent la puissance de calcul pure et sont donc nettement à l´avantage de Nvidia qui en plus peut profiter du FP16 pour augmenter ses performances. La différence entre le X1800 XT et le X850 XT PE est en grande partie due à la différence de fréquence.


Branchements
L’une des principales nouveautés qui a été introduite avec le GeForce 6800 est le branchement dynamique dans les pixel shaders. Cela permet de faciliter l’écriture de certains shaders et d’augmenter l’efficacité d’autres shaders en évitant de calculer une partie de ceux-ci sur les pixels qui n’en ont pas besoin. Par exemple pourquoi appliquer le filtrage très coûteux de l’adoucissement de bordure d’une ombre si le pixel est au milieu de l’ombre ? Un branchement dynamique permet de détecter si le pixel en a besoin ou pas. Splinter Cell Chaos Theory utilise cette technique alors que Les Chroniques de Riddick calcule tout pour chaque pixel. Les performances baissent de 10 à 15% dans le premier cas et de plus de 50% dans le second. Bien entendu les algorithmes ne sont pas identiques mais cela donne une image de ce que peuvent permettre les branchements dynamiques.


Mais tout n’est pas si rose puisque ceux-ci ne sont efficaces que dans des cas bien précis. Dans un GPU, les pixels sont traités par groupes de centaines voire de milliers de pixels. Lors d’un branchement, tous les pixels doivent prendre la même branche sans quoi les 2 branches doivent être calculées pour tous les pixels, avec des masques pour n’écrire que le résultat de la branche requise. ATI dispose sur le papier d´un net avantage avec une unité de traitement dédiée aux branchements et des threads de très petite taille, voyons si cela se confirme en pratique via un petit test que nous avons développé qui nous permet de modifier la granularité du branchement, c´est-à-dire le nombre moyen de pixels consécutifs qui vont prendre une même branche. Nous spécifions la branche à prendre par colonne de pixels, une colonne sur 2 doit afficher un shader complexe et l´autre peut passer cette partie du rendu. Des triangles de taille moyenne en mouvement sont affichés à l´écran, ce qui implique que tant les triangles et leur position que la taille de la colonne influent sur l´efficacité du branchement ce qui est plus proche d´une situation réelle que notre précédent test qui était affiché sur 2 grands triangles en plein écran.


Avec des colonnes étroites, les GPU ne peuvent pas profiter du branchement pour éviter la partie complexe sur la moitié des pixels, mais par contre doivent traiter les instructions de branchement, ce qui fait baisser les performances au lieu de les augmenter. Vous remarquerez cependant que la baisse de performances n´est que de 2.5% chez ATI contre 9/10% chez Nvidia, ce qui est visiblement dû au fait qu´ATI dispose d´une unité dédiée aux branchements qui travaille en parallèle du reste.

Les petits threads d´ATI, de 16 pixels (4x4) permettent un gain de performances dès que la largeur des colonnes atteint 4 pixels alors qu´il faut attendre une largeur de 64 pixels chez Nvidia ! ATI atteint facilement 60% de gains alors que Nvidia reste dans les 20% à l´exception de la colonne de 800 pixels soit un écran divisé en deux puisque nous teston en 1600x1200.

Vous noterez enfin que la GeForce 7800 n´est cette fois pas plus efficace que la GeForce 6800 qui l´était pourtant dans notre précédant test. Mais celui-ci ne représentait qu´un cas très spécifique dans lequel la 7800 est effectivement plus efficace, mais en pratique ce n´est pas le cas. Les gains sont légèrement plus réduits sur 7800 puisque son architecture est plus efficace et donc le coût de la branche complexe plus faible.

Globalement, l´efficacité des branchements chez ATI est de très loin supérieure à celle que l´on retrouve chez Nvidia, ce qui devrait permettre leur utilisation dans de plus en plus de cas, ce que les développeurs devraient apprécier.


Vertex Shader
Nous avons testé les performances en T&L, VS 1.1, VS 2.0 et VS 2.X/3.0 dans RightMark :


En rendu simple, 1 lumière, Nvidia domine, excepté en T&L. En rendu plus complexe, la X1800 XT domine sur toute la ligne. Avec les branchements statiques, Nvidia souffre d´un problème de performances et les précédentes Radeon n´étaient pas très efficaces. La X1800 XT fait ici un gros bond en avant en doublant les performances. Avec le branchement dynamique, contrairement aux pixel shader, les GPU Nvidia et le X1800 XT réagissent de la même manière et la différence entre les 2 est uniquement due à la différence de fréquence.

Contrairement à Nvidia, ATI fait l´impasse sur le support du Vertex Texturing qui pourtant nous semblait être requis pour pouvoir afficher le support des Vertex Shader 3.0. ATI prétend que non, ce qui est étrange. En y regardant de plus près, nous avons remarqué qu´ATI reporte à DirectX le support du vertex texturing, mais ne l´autorise sur aucun format de texture, ce qui parait suspect et ressemble à une manière habile de contourner les spécifications de DirectX en affichant ainsi le support des Vertex Shader 3.0 sans que le Vertex Texturing ne puisse être utilisé. Bref tout ceci n´est pas très net. Mais quoi qu´il en soit, en pratique, le Vertex Texturing n´est pas très important, et mis à part 2-3 démos technologiques, il n´est pas utilisé parce que trop limité, tout du moins dans son implémentation actuelle.
Vos réactions

Top articles