Zum 3DCenter Forum
Inhalt




Die neuen Features im G70-Chip

26. Juni 2005 / von aths / Seite 2 von 3


   Verbesserungen der SM3-Performance

Der G70 bringt keine Revolution bezüglich der Performance der "kritischen" SM3-Features. Gegenüber SM2 ist man dennoch im Vorteil, da auch "unkritische" Features zur Beschleunigung eingesetzt werden können.

Ein Quad ist im folgenden ein Block von 2x2 Pixeln. Seit langer Zeit werden nur Quadpipes verbaut, der G70 hat also tatsächlich nur 6 Pipelines im Pixelteil, von denen jede Pipeline bis zu vier Pixel gleichzeitig berechnen kann. Unter Instruction Pointer wird desweiteren ein Zeiger verstanden, der auf die Stelle im Shader-Programm verweist, die gerade berechnet wird.

Beim G70 kostet im Pixelshader ein If, ElseIf oder EndIf-Befehl wie im NV40 zwei Takte. Für eine Kontrollstruktur für dynamische Verzweigungen fallen also weiterhin mindestens vier Takte an (und zwar für If und EndIf). Doch das Hauptproblem ist folgendes: Pro so genanntem Quad-Batch gibt es nur einen Instruction Pointer. Das heißt, wenn nicht gerade für alle Quads im Batch der gleiche Rechenweg genutzt wird, müssen bei einer Verzweigungen beide Pfade für alle Quads im gleichen Batch durchgerechnet werden. Die Größe eines solchen Batches wird für den NV40 auf ungefähr 250 pro Quadpipe geschätzt (dieser Schätzwert kann auch grob falsch sein). Damit wären immer etwa 1000 Pixel gleichzeitig in einer Quad-Pipeline. Im G70 schätzen wir die Quadbatch-Size etwas größer ein.

Beim NV40 und NV43 sind die Quadbatches leider nicht unabhängig. Das scheint beim G70 geändert worden zu sein. Nvidia sagte diesbezüglich gegenüber 3DCenter: "Branch penalty on G70 is lower than NV40 or even NV43 by design." Wir gehen davon aus, dass dies über nun unabhängige Quadbatches realisiert wurde. Das heißt, für jede Quadpipe wird der Batch einzeln verwaltet, so dass sich die mögliche Ersparnis beim dynamischen Branching besser als früher entfalten kann. Der G70 ist noch keine GPU, bei der man generell dynamisches Branching zur Leistungssteigerung einsetzen kann, aber es gibt nun mehr Fälle, in denen sich ein Performancegewinn erzielen lässt. Damit ist der Weg klar: Branching auch im Pixelshader soll über kurz oder lang dermaßen schnell werden, dass man es relativ bedenkenlos verwenden kann. Dies ermöglicht die gezielte Ausnutzung der vorhandenen Rechenleistung.

Generell, nicht nur bezüglich SM3, profitiert der G70 von verbesserten Caches bezüglich des Textursamplings. Details wollte man leider nicht nennen, so wissen wir auch nicht, ob die Texturcache-Größe erhöht wurde. Davon kann man allerdings ausgehen. Es gibt seit dem Shader Model 3 neue Texturoperationen, die auf dem NV40 teilweise ziemlich viele Takte zur Berechnung brauchen. Daran scheint sich im G70 nichts geändert zu haben, eine Beschleunigung hat man hier nur über das Mehr an Pipelines.

Dafür wurde der Texturzugriff im Vertexshader leicht verschnellert. Hier besteht das Problem darin, dass der Vertexshader (im Gegensatz zur Pixelpipeline) nicht darauf optimiert ist, die Latenzen eines Textursamplings zu verstecken. Das ist Aufgabe des Programmierers, und je kürzer die Latenz, desto einfacher die Optimierung. Der NV40 verfügt über 4 physikalische Vertexshader-TMUs, die sich die 6 Vertexshader teilen. Ob der G70 hier mehr anbieten, wissen wir noch nicht.

Natürlich wäre es schön, bei 8 Vertexshader-Einheiten auch 8 TMUs zu haben, zumal die Vertexshader-TMUs ja nicht filtern können – das heißt, pro bilinearem Sample sind vier Texturefetches notwendig. Andererseits steht natürlich die Frage, ob die Bandbreite da noch mitspielt. Die Bandbreite könnte schon beim NV40 der Grund dafür gewesen sein, dass nur vier TMUs zur Verfügung gestellt werden, da mehr sinnvoll nicht auszulasten wären.

Denn im Vertexshader wird alles mit FP32-Genauigkeit berechnet (dies ist auch bei einer normalen DirectX7 T&L-Einheit Standard). Das heißt, dass auch die VS-TMUs in FP32-Genauigkeit rechnen – und FP32-Texturen erwartet werden. Schön wäre eine Möglichkeit, auch FP16-Texturen lesen zu können, doch das ist von Nvidia offenbar nicht vorgesehen. Gerade im Bereich "Displacementmapping" sehen wir durchaus Einsatzmöglichkeiten für FP16. Allerdings sollte auch der G70, trotz interessanter Features, nicht als gute "Displacementmapping-GPU" gesehen werden. Hierfür wären zusätzliche Einheiten erforderlich, die wohl erst mit WGF2 kommen – frühestens.

Interessante Notiz zum Vertexshader: Sowohl ATIs als auch Nvidias Vertexshader haben einen 4:1-Aufbau. Im 4er Teil werden ganze 4D-Vektoren gerechnet, im 1er Teil sind skalare Operationen möglich. Nvidia bietet die wichtige MAD-Operation nur im Vektor-Teil, ATI zusätzlich auch im skalaren Kanal, welcher von Nvidia ausschließlich für SFUs vorgesehen ist. Damit kann ATI pro Takt und Vertexshader meist etwas schneller sein. Der Vorteil bei Nvidia ist die MIMD-Architektur, das heißt jeder Vertexshader hat seinen eigenen Instruction Pointer. Dies ist notwendig, um effizientes Branching zu ermöglichen und um die Latenz von Textur-Fetches so gut es geht zu verstecken.


   Nichtlineare Downfilterung beim Antialiasing

Gerne wird von "gammakorrektem" oder "gammakorrigiertem" Antialiasing gesprochen. Dabei wird übersehen, dass die Gammakorrektur in jedem Fall geboten wird, egal ob mit oder ohne Antialiasing. Das eigentliche Problem ist, dass der Monitor RGB-Daten bewusst nicht mit linearer Kennlinie anzeigt. Hat man 8-Bit-Werte von 0 bis 255, ist "halbe Helligkeit" nicht etwa 128, sondern 186. Für die dunklen Farben stehen somit feinere Abstufungen zur Verfügung. Der sRGB-Standard orientiert sich an einer Gamma-Charakteristik von 2,2.

Nun rechnen Grafikkarten allerdings linear. Man müsste den Input linearisieren und den Framebuffer dann wieder im sRGB-Format vorhalten. Das ist einfacher gesagt als getan. Nvidia wirbt mit dem Support von sRGB-Texturen, kann die Texel aber nicht vor der Filterung umwandeln, sondern wohl erst danach (was seit DirectX9 im Pixelshader sowieso immer geht). Auch der Alphablender rechnet linear. Mit dem "gammakorrekten" Downfiltering gibts also – ähnlich wie bei ATI – nur Kosmetik und keine tatsächlich korrekte Rechnung. Wir möchten auch dieses Thema an dieser Stelle nicht weiter vertiefen und nur kurz darauf hinweisen, dass sich mit FP16-Texturen eine Reihe an Problemen lösen lassen, was allerdings die Leistung auch auf dem G70 deutlich drücken kann.

Im Gegensatz zu ATI erlaubt Nvidia, das Feature des nichtlinearen Downfilterings an- und abzuschalten. Dies begrüßen wir außerordentlich, denn es lassen sich Sitationen denken, in denen dieses Feature mehr stört als nützt. Der NV40 unterstützt per Treiber auch schon 4x "gamma corrected" Multisampling, der G70 realisiert dies allerdings über Extra-Hardware, so dass es im Gegensatz zum NV40 keinen spürbaren Geschwindigkeitsverlust geben sollte.

In jedem Fall wird die nichtlineare Zusammenfilterung der AA-Samples nur für Gamma 2,2 (oder eben 1,0 bei linearer Verrechnung) unterstützt. Da der Monitor auf sRGB-Wiedergabe eingestellt sein sollte, halten wir das für ausreichend.


   Antialiasing bei Alphatest-Kanten

Viele Entwickler nutzen Methoden, die auf Multisampling-Antialiasing keine Rücksicht nehmen. Folge: Obwohl der User Antialiasing aktiviert hat, flimmert es. Man könnte den Spieß auch umdrehen und den Grafikchip-Entwicklern zum Vorwurf machen, dass sie überhaupt von Supersampling auf Multisampling umgestiegen sind, denn Supersampling glättet alles.

Nun bietet Nvidia seit der originalen GeForce prinzipiell immer 4x Supersampling, obwohl seit der GeForce3 auch Multisampling zur Verfügung steht. Dennoch nutzen einige Spieler den Supersampling-Modus, weil damit eben alles geglättet wird – auch ein per Alphatest realisierter Maschendrahtzaun. Folge: Die Grafik flimmert weniger. Doch dies muss mit einem massiven Leistungsabfall bezahlt werden.

Es wäre doch sinnvoll, nur auf die Polygone Supersampling anzuwenden, die es brauchen. Und dann bitte sparse grid (und nicht ordered grid) Supersampling, weil dies gerade bei den nervigen Winkeln (um die 90° herum) besser glättet. Wenns nichts ausmacht, bitte noch mit nichtlinearem Downfiltering. Genau das bietet nun der G70.

Kurz gesagt: Das ist aus unserer Sicht das Killer-Feature schlechthin: Die hohe Qualität von 4x sparse grid Antialiasing im gesamten Bild. Oder fast, denn Shaderaliasing wird damit nicht behandelt, wenn für das betroffene Polygon nicht auch zufällig der Alphatest aktiviert ist. Deshalb hoffen wir, dass Nvidia den neuen 4x sparse grid Supersamplingmodus generell verfügbar macht.

Damit erreicht man zwar noch keine Glättung wie das 4x4 ordered grid Supersampling, aber gegenüber 2x2 ordered grid Supersampling ein deutliches Qualitätsplus, ohne gegenüber 2x2 zusätzlich Leistung opfern zu müssen. Die Krönung wäre natürlich eine Kombination aus 4x sparse grid Supersampling mit 2x2 Supersampling: Dieser 16x-Modus würde noch einmal deutlich bessere Qualität als der bisherige 4x4-Supersampling-Modus bieten - und das bei gleichem Leistungslevel.

Eine Alphatest-Glättung ohne Supersampling bietet Nvidia auch. Dabei wird ausgenutzt, dass der Alphakanal im Texturfilter mitinterpoliert wird, man also im Bereich von 0 und 1 auch Zwischenwerte bekommt. Diese Zwischenwerte werden pro Pixel auf 16 Stufen quantisiert, und da immer Quads verarbeitet werden, kann man für 16 Werte entsprechend dithern, also per Rasterung scheinbar mehr Stufen als 4 (da 4x Multisampling) anbieten. Doch nur die Supersampling-Methode bietet immer volle Qualität. Leistung für das partielle Supersampling ist im G70 eigentlich genügend vorhanden.

Obwohl Nvidia weiterhin keinen höheren Multisamplingmodus als 4x sparse anbietet, sehen wir Nvidia in der Gesamt-AA-Qualität jetzt weit vor ATI, welche Supersampling einzig in der Crossfire-Lösung anbieten, und dann auch nur bis zu 2x.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig Zurück / Back Weiter / Next

Shortcuts
nach oben