Zum 3DCenter Forum
Inhalt




Wann kommt DirectX 9.1?

10. Januar 2004 / von aths / Seite 1 von 1


Um es gleich vorweg zu nehmen: DirectX 9.1 kommt wohl nie. Doch sehr hartnäckig hält sich immer noch das Gerücht, DirectX 9.1 würde Nvidia-Karten um 60% schneller machen. Diesem Gerücht wollen wir hiermit auf den Grund gehen.


Zunächst die Frage: Ginge das überhaupt? Klare Antwort: Nein. Der Pixelshader der GeForceFX hat zwar eine viel größere Funktionalität als der Pixelshader der aktuellen Radeon-Karten, aber er führt weniger Operationen pro Takt aus. Falls das Shader-Programm in einem für Radeon optimierten Format vorliegt, wird die CineFX-Architektur zusätzlich ausgebremst, denn eine Abarbeitungsfolge, die für Radeon günstig ist, führt bei den GeForceFX-Chips zu Zwangspausen. Die Radeon-Architektur ist da nicht so anfällig, allerdings ist das angesichts der einfacheren Shader-Technik auch verständlich.

Um die CineFX-Funktionalität überhaupt einigermaßen leistungsfähig zu machen, musste Nvidia beim Design Kompromisse eingehen. Befolgt man die komplizierten Optimierungs-Regeln für FX-Shader, genießt man an einigen Stellen gegenüber der Radeon-Technik sogar Leistungs-Vorteile. Von Spezialfällen abgesehen, bleibt die Radeon jedoch insgesamt vorne, Nvidia kann das derzeit nur durch höhere Taktraten ausgleichen.

Das Shader-Programm, welches die Grafikkarte ausführen soll, liegt so vor, wie es eben vorliegt — da kann auch ein DirectX 9.1 nichts ändern. Shader-Programme werden heutzutage gerne in einer Hochsprache (HLSL) geschrieben. Bei den DirectX Entwicklungs-Tools übersetzt ein Compiler das Programm in die "Pixelshader-Sprache". Inzwischen gibt es ein Compiler-Profil namens 2_A, (welches für die 2_X-Shader optimiert ist, und damit für GeForce FX), und natürlich weiterhin das Profil für 2_0-Shader.

Dass heißt im Klartext, der Mehraufwand der Entwickler, die ja zwei Architekturen bedienen müssen, hält sich in Grenzen. Der gleiche Quelltext ist zweimal durch den Compiler zu jagen, und das Spiel muss beim Start feststellen, welche Grafikkarte im Computer steckt, um den besten Shader auszuwählen. Die aktuelle DirectX-Entwicklungsumgebung stellt Funktionen zur Verfügung, die ermitteln, welches Shader-Profil das beste für die laufende Hardware ist.

Die Entwickler gehen normalererweise nicht den Weg, DirectX dem in HLSL geschriebenen Shader zum "on thy fly"-Übersetzen zu geben. Würden sie das tun, könnte ein aktualisiertes DirectX neue Hardware-Architekturen berücksichtigen und beschleunigen. So ist es aber nicht - weil sich die wenigsten in die Karten gucken lassen, bekommt die DirectX-Applikation meist nur das fertige Kompilat.

Nvidia ist sich der Problematik bewusst, dass praktisch alle älteren Shader-Programme rein für Radeon optimiert sind. Nicht aus böser Absicht, sondern schlicht weil ATI mit der Radeon 9700 /Pro seinerzeit die allererste DirectX9-Hardware bot und seinerzeit (und lange vor der GeForceFX 5800 /Ultra) entsprechend auf Radeon zugeschnittene Optimierungs-Empfehlungen herausgab.

Halten wir also zwei Sachen fest: Leistungsmäßig stehen Radeons besser da. Die GeForces haben neben geringerer Grundleistung den Nachteil, anfällig für einen Effizienzeinbruch zu sein, falls CineFX-Optimierungs-Regeln verletzt werden. Der Punkt ist nun: Die Radeon ist beinahe ausgereizt, was angesichts der relativ verständlichen Optimerungs-Vorschriften (und der Tatsache, dass einiges, was für Pixelshader 1.4 galt, nun auch auf 2.0 zu beziehen ist) nicht verwundern sollte. Würden die GeForceFX-Shader jetzt 60% schneller, würden sie damit die Radeon überholen. Das geht aber schon deshalb nicht, weil die Grundleistung geringer ist.

Wie es zu den 60% kommt, ist schnell erklärt. Nvidia legt in einem Dokument zum eigenen "Unified Shader Compiler" (lokale Kopie) folgendes dar:

 

"The NVIDIA unified compiler technology efficiently translates these operands into the order that maximizes execution on NVIDIA GPUs—texture, texture, math, math. This one compiler feature can deliver a 60 percent performance improvement for DirectX 9 applications, and points out how a minor programming difference can result in significant performance impact on programmable GPUs."

"Die vereinheitlichte Nvidia Compiler-Technologie übersetzt diese Operanten effizient in eine Folge, welche die Auslastung auf Nvidia GPUs maximiert: Textur, Textur, Aritmetik, Arithmetik. Dieses eine Compiler-Feature kann eine Leistungsverbesserung von 60 Prozent für DirectX9-Anwendungen bringen, und zeigt auf, wie kleine Programmier-Unterschiede erhebliche Leistungs-Auswirkungen auf programmierbaren GPUs haben können."

 

Dabei handelt es sich um ein Treiber-Feature ab Detonator 50 (welcher ja neuerdings ForceWare heißt). Auch neuere Catalyst-Treiber optimieren allerdings Shader-Programme. Bei GeForceFX-Karten ist das aber ganz besonders nötig. In der Tat bringt der neue Treiber etwa 10 bis 20% mehr Leistung für DirectX9-Spiele, ohne die Bildqualität zu beeinflussen. In synthetischen reinen Shader-Tests kann man — je nach Optimierungsgrad des "Rohmaterials" — auch 100% Leistung gewinnen. Wohlgemerkt, 100% mehr Leistung gegenüber der vorherigen CineFX-Leistung, nicht gegenüber Radeon. Wir möchten aber ausdrücklich festhalten, dass solche Treiber-Features mit DirectX 9.0 zusammenarbeiten und nicht irgendwie auf eine 9.1er Version angewiesen wären.

In DirectX 9.0 sind Pixel- und Vertexshader 2.0 und 3.0 definiert. Shader 4.0 sind für "DirectX-Next" (sozusagen DirectX 10) vorgesehen. Es besteht einfach keine Notwendigkeit für eine Zwischenversion, denn die erweiterte Features werden über Caps angesprochen, und nicht mittels neuer Shader-Versionen. Natürlich unterliegen die Entwicklungs-Tools einer ständigen Aktualisierung, dort kann es sicherlich auch einmal zu neueren Build von DirectX 9.0 kommen, womöglich auch zu einem DirectX 9.1. Aber für den Endbenutzer verändert sich nichts - hier ist alles schon geklärt und würde sich auch mit einem möglichen DirectX 9.1 nicht mehr ändern.


Wir befürchten zudem, dass viele Hersteller auf die Idee kommen werden, Shader 3.0 Support unter "DirectX 9.1 Support" zu vermarktend, so wie bereits in der jüngsten Vergangenheit in einigen Grafikchip-Roadmaps mit "DirectX 9.1" eigentlich der Shader 3.0 Support gemeint war. Irgendwer hat das "9.1" dann noch mit den 60% Leistungsgewinn in Verbindung gebracht und diese wirre Meldung unters Volk gemischt. Leider schrieben und schreiben viele Print- und Online-Magazine diese Meldung ungeprüft voneinander ab. Es gibt bereits einige solide Vorab-Informationen zu DirectX-Next - aber Microsoft hat sich nie dahingehend geäußert, eine Version 9.1 zu veröffentlichen.

Die Hoffnung auf 60% mehr Leistung müssen GeForce-User also begraben, denn dazu müsste die Leistung erst einmal Hardware-seitig vorhanden sein. Es gibt in den DirectX-9-Enwicklungs-Tools ein Compiler-Profil für 2_X, und zusätzlich tut der ForceWare50-Recompiler, was er kann. Wir meinen, sowohl Radeon als auch GeForce können Shader-mäßig als praktisch ausgereizt betrachtet werden.

Es sei denn, Nvidia verbessert den Recompiler erheblich, und traut sich, FX12-Hardware für DirectX-Pixelshader zu verwenden. FX12-Rechenleistung ist nämlich in rauen Mengen vorhanden. Allerdings ist es nicht so einfach, FX12-Units rechnen zu lassen, wenn eigentlich FP24-Genauigkeit gefordert wird - DirectX selbst erlaubt das auch nicht.

Abseits dessen aber kann man davon ausgehen, daß bei den derzeit aktuellen Architekturen von ATI und Nvidia keine großen Leistungssprünge per Treiber und gleich gar nicht per DirectX mehr möglich sind. Nicht umsonst unterstützen beide Hersteller immer mehr einzelne Spiele-Projekte und -Entwickler, weil mehr Leistung auf der aktuellen Hardware nur noch über die (zeit- und arbeitsintensive) Optimierung einzelner Spiele erreichbar ist.



Wir möchten uns bei Demirug bedanken, der uns mit Hintergrund-Informationen zu diesem Thema versorgte.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig 3DCenter-Artikel - Index Home

Shortcuts
nach oben