NVIDIA GeForce 7800 GTX

Publié le 22/06/2005 par et
Imprimer
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. Or le flux d’instructions n’est pas géré par pixel mais bien par groupe de pixels, ce qui signifie que la suite d’instruction appliquée doit être la même sur tous les pixels d’un même groupe. Autrement dit, 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. Les instructions de branchement n’étant pas gratuites, il est aisé de réduire les performances avec les branchements au lieu de les améliorer. Voyons comment la situation a évolué entre 6800 et 7800.

Coût des instructions de branchement :

Cas 1
6800 : 3 cycles
7800 : 2 cycles
6800 il y a 1 an : 9 cycles

Cas 2
6800 : 5 cycles
7800 : 5 cycles
6800 il y a 1 an : 9 cycles

La différence entre le cas 1 et le cas 2 concerne le type de l’élément qui est utilisé en sortie : une couleur constante dans le premier cas et une couleur interpolée dans le second. Vous noterez que les drivers ont fortement évolué à ce niveau en 1 an. Sans rentrer dans les détails, ils sont maintenant capables de terminer le pixel shader avant d’avoir exécuté toutes les instructions du branchement.


Cette fois nous utilisons un shader qui nous permet de spécifier la branche que prennent des blocs de pixels de taille variable. Si ces blocs correspondent à ceux du GPU (ou sont plus grands), le branchement apporte un gain. Comme vous pouvez le voir, les branchements apportent des gains à partir de blocs de pixels plus petits avec le 7800 qui est donc plus efficace. Interrogé à ce sujet, David Kirk, Chief Scientist chez NVIDIA, nous a indiqué que le gain venait d’une meilleure distribution des blocs de pixels entre les différents quad engines qui gagnent donc en indépendance et peuvent chacun traiter des blocs de pixels qui prennent des branches différentes, ce qui n’était pas le cas sur GeForce Serie 6 puisque, tout du moins dans le cas qui nous occupe, un seul bloc était utilisé par tous les quad engines. Une GeForce 6600 GT pouvait donc être plus efficace qu’une 6800 GT (tout en restant dans la majorité des cas moins performante bien entendu).

Sans cette optimisation, le GeForce 7800 GTX aurait été encore moins efficace que le 6800 GT à cause de son nombre plus élevé de quad engines puisqu’il aurait dû traiter ce type de branchement sur des blocs de 6000 pixels au lieu de 1000 comme c’est le cas. Une optimisation qui est donc bienvenue même s’il est utile de préciser que 1000 pixels ça reste énorme et que cette taille devra, à l’avenir, être réduite fortement pour que les branchements soient pleinement efficaces dans un maximum de cas.
Vertex Shader
Tout comme pour les Pixel Shader, NVIDIA annonce des améliorations au niveau des Vertex Shader, mais cette fois il n’est pas question d’ajout d’unité de calcul mais simplement d’amélioration de l’efficacité. Nous n’en saurons pas plus puisque NVIDIA n’est pas rentré dans les détails. Nous avons testé les performances en T&L, VS 1.1, VS 2.O et VS 2.X/3.0 dans RightMark :


En Diffuse avec 1 source de lumière, les performances augmentent dans les 4 modes légèrement plus que ce que n’entraîne le passage de 6 à 8 pipelines de vertex shading. En Diffuse & Specular avec 3 sources de lumière les performances augmentent encore un peu plus ce qui témoigne d’une amélioration de l’efficacité des vertex shader (+7%).
Vos réactions

Top articles