[Wissen] Geforce 8 im Detail

PCGH_Carsten

Ex-Redakteur
Mit der G80-GPU in der Geforce 8800 GTX und GTS hat Nvidia die Benchmarkkrone im Sturm zurückerobert. Nach Preview und Test in den letzten beiden Ausgaben schaut PCGH dem G80-Chip nun detailliert unter den Heatspreader. Erfahren Sie, wo die Ursachen der Leistungsexplosion liegen.

attachment.php



Inhalt:
>> Shader-Einheiten: Spezialisierung ist für Insekten
>> Shader: G80 vs. G7x
>> Skalare Shader: Der Schlüssel zum Erfolg?
>> Skalarprozessoren: einfach effizienter
>> Texturlatenz: getrennt für bessere Leistung
>> Textureinheiten: mehr Filter für das Volk
>> Texturqualität: kein Rückschritt durch Fortschritt
>> Dynamische Programmverzweigungen
>> Vertex-Shader: Suche VTF, biete MIMD
>> Kantenglättung: 16 Samples sollt ihr sein
>> Raster-Operatoren: HDR-Rendering und FSAA!
>> RAM-Interface: Ausnahmsweise keine Zweierpotenz
>> DirectX 10: die Rückkehr der Integer-Ritter
>> GPU-Skalierung: G8x für alle Segmente




Gerade noch rechtzeitig zum Weihnachtsgeschäft 2006 liefert Nvidia die ersten Direct3D-10-fähigen GPUs aus. Realisierte man die Chips der alten Direct3D-9-Generation noch mit mehreren immer weiter verbesserten Varianten der CineFX-Architektur, entschied man sich beim G80 für einen anderen Weg. So ist die auf den Geforce-8800-Karten eingesetzte GPU seit Jahren die erste, welche das Attribut neu auch zu Recht trägt Grund genug für PCGH, diese Neuerungen auf vier Seiten zu durchleuchten.



>> Shader-Einheiten: Spezialisierung ist für Insekten
Im Vergleich zur CineFX-Architektur hat Nvidias jüngster Spross deutlich Ballast abgeworfen in mehr als nur einer Hinsicht. Die Vertex-Einheiten wurden scheinbar ersatzlos gestrichen. Und dort, wo früher die sechs Pixel-Prozessoren zu finden waren (jeweils als 4x SIMD ausgeführt, s. Kasten), sind nun zwei zusätzliche Rechner hinzugekommen. Doch keiner der acht Neuen ist ein reiner Pixel-Shader, denn auch dieses Relikt aus alten Zeiten musste weichen. Die neuen skalaren Shader-ALUs übernehmen nun alle anfallenden Arbeiten. Neben dem bekannten Vertex- und Pixel-Shading arbeiten sie auch das neue, in Sachen 3D-Render-Pipeline dazwischenliegende Geometry-Shading ab. Dieses als Unified-Shader-Architektur bezeichnete GPU-Design wird bereits seit mehr als einem Jahr von Ati für den Grafikkern der Xbox 360 genutzt. Im PC-Bereich soll dieses Prinzip mit dem Next-Generation-Chip R600 auch bei AMD/Ati Einzug halten.



>> Shader: G80 vs. G7x
Den Änderungen im Großen folgten Anpassungen im Detail und so haben die Shader-Einheiten im G80 nicht mehr viel mit denen der G7x-Reihe gemein. Waren beim Vorgänger die Rechenwerke und Texturprozessoren noch Teil einer gemeinsamen, langen Pipeline, arbeiten beide beim G80 weitgehend unabhängig voneinander. Dies geht sogar so weit, dass beide Funktionsblöcke mit stark unterschiedlichen Taktfrequenzen betrieben werden. Während die Textur-Operationen mit dem Basistakt von 575 MHz (GTX) ausgeführt werden, treibt die Rechenwerke ein mit 1.350 MHz (ebenfalls GTX) wesentlich schnellerer Taktgeber an. Die Verwendung von mehreren Taktdomänen in einer GPU, die mit der höher getakteten Vertex-Domäne (plus 40 MHz gegenüber dem restlichen Chip) bei der 7800 GTX begann, erreicht damit einen neuen Höhepunkt.



>> Skalare Shader: Der Schlüssel zum Erfolg?
Die einzelnen Rechenwerke (ALUs) im G80-Chip wurden komplett überarbeitet. Nutzte der G7x (Geforce7-Reihe) noch vierkanalige ALUs für die Pixel-Bestandteile Rot, Grün, Blau und Alpha/Transparenz (RGBA, Vektor-4), sind es beim G80 nun skalare Prozessoren, welche pro Takt nur einen der vier Kanäle bearbeiten können. Auf diese Idee setzten auch schon 3DLabs (P10) und Intel (GMA X3000). Um den Unterschied bei der Rohleistung auszugleichen, wurden Anzahl und Taktrate der ALUs stark erhöht. Jede einzelne der insgesamt 128 Shader-ALUs ist in eine primäre und eine sekundäre Einheit aufgeteilt. Jeweils 16 Shader-ALUs sind als Gruppe (Cluster) organisiert.

Während die primären Einheiten sowohl Multiplikationen als auch gleichzeitig Additionen beherrschen (MAD; Multiply/Add), begnügen sich die sekundären mit der Fähigkeit zur Multiplikation. Da bei Gleitkommaberechnungen die Addition aufwendiger zu realisieren ist, spart man so eine erhebliche Anzahl Transistoren. Zugleich sind aber im Vergleich zum G7x die Gleitkommaoperationen (FLOP, Floating Point Operations) pro Takt etwas niedriger, da dieser mit den 48 Pixel-Shader-ALUs jeweils zwei MAD-Instruktionen (vier FLOPs pro Kanal) ausführen konnte. Ein Skalar-MAD plus -MUL entsprechen dagegen lediglich drei FLOPs.

Daneben bringt die Umstellung von mehrkanaligen zu skalaren ALUs noch ein weiteres Problem mit sich. Jede G7x-ALU besitzt die Fähigkeit, eine sogenannte Spezialfunktion (Sinus, Cosinus, Wurzelberechnung etc.) auszuführen. Die Möglichkeit, jede der neuen G80-ALUs ebenfalls damit auszustatten, hätte die Leistung in diesem Bereich zwar vervierfacht, aber auch einen erheblichen Teil des ohnehin schon arg strapazierten Transistorbudgets benötigt. Die Chipdesigner griffen daher zu einem Trick. Neben den ALUs für die Ausführung von Shader-Programmen nutzt Nvidia weitere Rechenwerke, um die Interpolation von Vertex-Daten bei Bedarf zu erledigen zum Beispiel bei Texturkoordinaten. Durch eine entsprechende Erweiterung können die Interpolatoren des G80 nun auch wahlweise die anfallenden Spezialfunktionen ausführen. Aufgrund der Tatsache, dass die Interpolatoren auf der Basis von 2x2-Pixelblöcken (sogenannten Quads) arbeiten, beschränkt sich ein G80-Shader-Cluster jedoch auf lediglich vier Spezialfunktionen pro Takt.



>> Skalarprozessoren: einfach effizienter
Die Shader-ALUs sind zur Erhöhung der Effizienz deutlich vereinfacht worden. Um eine hundertprozentige Auslastung zu erreichen, müssten bei vierkanaligen ALUs alle Kanäle genutzt werden in der Praxis ist das kaum zu erreichen und kostet zudem Zeit bei der Optimierung der Shader-Programme durch Spiele-Entwickler und den Treiber. Auch wenn ein Pixel aus dem Zusammenschluss von RGBA besteht, werden nicht zwingend auf alle vier Kanäle die gleichen Operationen angewendet (MIMD). Zudem müssen die Shader-Einheiten häufig Texturkoordinaten berechnen, welche oft nur zwei Kanäle (U und V) nutzen. Nvidia trägt diesem Umstand Rechnung und integriert seit der Geforce FX folgende Aufteilungsoptionen (Splits) in ihre GPUs:
  • Geforce-FX-Reihe (parallel): nur Vektor-4
  • Geforce6-Reihe (parallel): Vektor-4, 3:1, 2:2
  • Geforce7-Reihe (parallel): Vektor-4, 3:1, 2:2
  • Geforce8-Reihe (seriell): beliebig
Mit den skalaren Rechenwerken ist nun eine deutlich bessere Auslastung möglich. Wurden bisher die vier Kanäle von vier Pixeln in einem Takt parallel bearbeitet, benötigt der G80 für eine Gruppe von 16 Pixeln nun vier Takte umgerechnet ebenfalls nur vier Pixel pro Takt. Kommen jedoch nur zwei Kanäle wie bei der Texturadressierung zum Einsatz, braucht der G7x auch weiterhin vier Takte, um die 16 Pixel zu bearbeiten. Ein G80 schafft es in drei Vierteln der Taktzyklen und kann in extremen Fällen sogar die vierfache Performance gegenüber seinem Vorgänger erreichen.

attachment.php



>> Texturlatenz: getrennt für bessere Leistung
Diese Effizienzsteigerung würde jedoch wirkungslos verpuffen, hätte Nvidia nicht auch noch an einem anderen Problem der CineFX-Architektur gearbeitet. Durch die enge Verknüpfung von Rechenwerk und Textureinheit blockierten sich diese bei allen Nvidia-Chips der Direct3D-9-Generation gegenseitig. Entsprechend wurde dort viel Leistung verschenkt. Vor allem beim Einsatz aufwendiger Texturfilter lag viel Rechenleistung brach. Beim Chip der Geforce8 wurde nicht nur diese enge Bindung abgeschafft, sondern man ging noch einen Schritt weiter. War es bei den Vorgängern noch erforderlich, die Texturkoordinaten über das erste Rechenwerk zur Textureinheit zu leiten, wird die TMU nun ohne diesen Umweg mit Daten versorgt. Das Rechenwerk bleibt für die Ausführung des mathematischen Anteils am Shader-Programm frei.

attachment.php



>> Textureinheiten: mehr Filter für das Volk
Wie schon beim Vorgänger verfügen die Textureinheiten in den acht Shader-Clustern weiterhin über einen separaten Cache, um die Latenz beim Texturzugriff zu senken. Die Filtereinheit, welche auf diesen Speicher zugreift, ist nun in der Lage, auch Gleitkommawerte mit 32 Bit Genauigkeit zu verarbeiten der G7x schafft hier nur 16 Bit. Doch nicht nur die Genauigkeit wurde gesteigert. Abhängig vom Texturformat kann nun auch zweimal pro Takt gefiltert (aber nicht adressiert) werden. Dies kommt der Geschwindigkeit bei qualitativ hochwertigen Filtern, bei denen bilineare Textursamples weiterhin das Basiselement bilden, zugute.



>> Texturqualität: kein Rückschritt durch Fortschritt
Nachdem die letzten Geforce-Generationen in Sachen anisotroper Filterqualität jeweils einen Rückschritt brachten, den PCGH des Öfteren thematisierte, erreicht der G80 bei der Level-of-Detail-Bestimmung (LOD) fast die als ideal geltende Vorgabe Microsofts im DirectX-
Entwicklungsbaukasten. Dieser Modus ist sogar automatisch aktiv und konnte nur in einigen Vorserientreibern abgeschaltet werden.

Neben diesen Verbesserungen beherrscht die Textureinheit auch eine Reihe weiterer Formate, welche für die Direct3D-10-Kompatibilität erforderlich sind. Dazu gehören neben den zwei zusätzlichen Kompressionsverfahren für zweikanalige Texturen, die Ati bereits unter dem Namen 3dc unterstützt, auch ein 14-Bit-Gleitkommaformat mit gemeinsamem Exponenten (RGBA 9-9-9-5). Dadurch benötigt dieses Format wenig Speicherplatz sowie -bandbreite und eignet sich dank hohen Dynamikumfangs für das Speichern von HDR-Texturen.



>> Dynamische Programmverzweigungen
Durch die Entflechtung von ALU und TEX Rechenwerken und Textureinheiten war es auch erforderlich, das Steuerwerk der Shader-Einheiten zu verändern. Während die CineFX-Vorgänger noch mehr oder weniger große Pixelmengen in einer festen Reihenfolge abarbeiten, nutzt der G80 ein Konzept, wie man es schon von ATI/AMD (Hyper-Threading) kennt provokant Ultra-Threading genannt.

Dadurch können Pixel, die auf Ergebnisse der Textureinheit warten, im Registerspeicher zwischengeparkt werden. So blockieren sie die Rechenwerke nicht für andere Threads (Pixel). Neben der damit verbundenen Steigerung der Effizienz verbessert sich auch die bei den Vorgängern immer wieder kritisierte, zu hohe Blockgröße bei dynamischen Programmverzweigungen.



>> Vertex-Shader: Suche VTF, biete MIMD
Bei den Vertex-Shadern führt die oben beschriebene Maßnahme allerdings zu Einbußen in der Flexibilität, da die MIMD-Vorteile (s. Kasten) der Vorgänger entfallen. Im Gegenzug verbessert sich jedoch die schwache Leistung der Vertex-Shader beim Einsatz von Texturen, wie es zum Beispiel für Displacement-Mapping nötig ist. Der G80 kann nun für alle Shader-Arten mit derselben Geschwindigkeit Texturen einsetzen.

attachment.php



>> Kantenglättung: 16 Samples sollt ihr sein
Aber auch beim Antialiasing selbst hat man nachgebessert. Begnügten sich Nvidias Direct3D-9-Chips mit maximal vier Abtastpunkten (Samples) pro Pixel, verdoppelte man diese beim G80 auf acht. Doch damit nicht genug: Durch eine neue Kompressionstechnik sind nun sogar 16 Samples pro Pixel möglich. Dies gilt allerdings nur für den Farbanteil. Bei den Tiefen- (Z) und Stencil-Werten bleibt es bei maximal acht Abtastungen. Zudem arbeitet das neue Verfahren (Coverage-Sampling-AA, CSAA) nicht verlustfrei wie herkömmliche Verfahren für Multi-Sampling-Anti-Aliasing (MSAA).

Da im Speicher trotzdem nur Platz für vier bzw. acht Farbwerte pro Pixel reserviert wird, muss der Chip Details verwerfen, wenn der Speicher belegt ist. Damit dieser Fall eintritt, müssen sich jedoch mehr als vier bzw. acht Dreiecke in einem einzigen Pixel überschneiden.



>> Raster-Operatoren: HDR-Rendering und FSAA!
Auch an anderer Stelle geht Nvidia auf die berechtigte Kritik an den Vorgängern ein. Bezeichneten sich die Kalifornier auch gerne als Vorreiter beim HDR-Rendering, mussten sie das Schlachtfeld schnell wieder räumen, als es darum ging, HDR- und Anti-Aliasing-Techniken zu kombinieren. Mit den neuen Raster-Operatoren im G80 ist auch dieses Manko beseitigt. Neben dem 16-Bit-Gleitkommaformat, welches auch Radeon-X1000-Chips beherrschen, unterstützt Nvidia zudem die Kombination von 32-Bit-Gleitkommagenauigkeit mit HDR-Rendering.

attachment.php



>> RAM-Interface: Ausnahmsweise keine Zweierpotenz
Auch die vor langer Zeit eingeführte Speicherarchitektur wird überarbeitet. Die bisher als eigenständige Einheiten geführten Speicher-Controller sind nun ein Teil der Raster-Operatoren geworden. Die GPU-Designer haben auf eine eigene Speicher-Crossbar verzichtet, da Shader-ALUs und ROPs bereits über eine solche Kreuzweiche verbunden sind. Während diese bei den Vorgängern nur in eine Richtung genutzt wird, transportiert der G80 darüber auch Daten zu den Shadern und erhöht so den Nutzungsgrad der beteiligten Transistoren.



>> DirectX 10: die Rückkehr der Integer-Ritter
Zu einem weiteren cleveren Trick griffen die Entwickler, um der neuen Direct3D-10-Anforderung für Berechnungen im Ganzzahl-Format nachzukommen. Dies ist mit den Gleitkomma-Rechenwerken nur mit geringen Rundungsfehlern möglich. Diese können aber zum Beispiel bei der Adressierung von Feldern (Arrays) bereits zu groß werden. CPUs besitzen aus diesem Grund normalerweise separate Ganzzahl-Einheiten. Aktuelle Spiele können jedoch keinen Gebrauch von INT-ALUs machen und auch in Zukunft überwiegen Gleitkommaberechnungen. Die zusätzlichen Transistorkosten separater Integer-Einheiten wären wegen der geringen Nutzung also schlecht investiert. Darum modifizierte Nvidia eine der beiden ALU-Gruppen so, dass damit korrekte Integer-Berechnungen möglich sind. Die FP32-ALUs (32 Bit Gleitkommagenauigkeit) verfügen bereits über zwei vernetzte Rechenwerke für die Mantisse (24 Bit) und den Exponenten (8 Bit). Eine Erweiterung um Integer-Berechnungen kostet weniger Transistoren, als hätte man separate INT24-Einheiten integriert. Unter OpenGL geht man sogar noch einen Schritt weiter und bietet das neue Format separat an.



>> GPU-Skalierung: G8x für alle Segmente
Besonders durch den Verzicht auf die Crossbar zum RAM besteht die G80-GPU im Großen und Ganzen nur noch aus Shader- und ROP-Bereich unterstützt von einigen Hilfseinheiten. Das Design lässt erwarten, dass die folgenden Chips der G8x-Familie sich primär bei der Anzahl dieser beiden Einheitstypen unterscheiden. Selbst ein G80-Mainboard-Chipsatz mit einer oder zwei Shader-Einheiten und einer ROP-Partition ist denkbar.

attachment.php

Die jeweils mit 64 Bit an den RAM angebundenen Raster-Operatoren können, genau wie die Shader-Einheiten, selektiv deaktiviert werden und so kann Nvidia den Speicherbus in kleinen 64-Bit-Schritten skalieren genau die Bitbreite aktueller Einsteigerlösungen. Sind alle ROPs aktiv, kommen so insgesamt 384 Bit zusammen. Im Gegensatz zu den Vorgängern, bei denen sich eine Verkleinerung des Speicherbusses oft auch in einer Vereinfachung bei der Platine niederschlägt, benötigt der G80 in seiner aktuellen Form immer das aufwendige PCB-Design. Da die Speichercontroller fest mit den Plätzen für die Speicherchips verbunden sind, müssen abhängig von der Auswahl der ROPs auch die Platinen bestückt werden. Ärgerlich für Modding-Fans: Dadurch wird es unmöglich, die ROPs nachträglich wieder freizuschalten, weil diesen dann die RAM-Chips fehlen.

Diskussionsthread: http://extreme.pcgameshardware.de/showthread.php?t=1653
 
Zuletzt bearbeitet von einem Moderator:
Zurück