nVidia GeForce 8800 GTX im Test: Der neue König unter den Grafikkarten

 3/36
Wolfgang Andermahr
664 Kommentare

Technik im Detail Part 1

Auch wenn bereits klar war, dass nVidia die GPU der GeForce-8800-Serie, namentlich den G80, gegenüber dem Vorgänger G7x deutlich erweitern musste, kommt es trotzdem überraschend, dass im Endeffekt mehr verändert wurde, als die ersten Gerüchte vermuten ließen. Wenig überraschend ist die Unterstützung der neuen Direct3D-API in der Version 10, die mit dem in Kürze erhältlichen Betriebssystem Windows Vista Einzug erhalten wird. Erstaunlicher ist dagegen, dass die Kalifornier beim G80 auf eine komplette Unified-Shader-Architektur setzen, da man beim G80 eigentlich vom Erhalt des klassischen Designs mit getrennten Pixel-, Vertex- und Geometryshadern ausgegangen ist. Denn diese ist, obwohl des Öfteren das Gegenteil behauptet wird, nicht zwingend Voraussetzung für Direct3D 10. Einzig ein „Unified Shader Core“ muss vorhanden sein. Sprich die ALUs müssen alle vorhandenen Shaderarten berechnen können, unabhängig davon, ob die Einheiten als Pixel- oder Vertexshader deklariert sind.

GeForce 8800 GTX Kern
GeForce 8800 GTX Kern

Der G80, der vorerst auf dem Topmodell GeForce 8800 GTX sowie auf der etwas langsameren Variante GeForce 8800 GTS verbaut wird, beweist sich mit seinen 681 Millionen Transistoren als ein wahres Monster, das weiterhin im 90-nm-Prozess bei TSMC hergestellt wird und dessen Entwicklung bereits im Jahr 2002 begonnen haben soll. Der G80 verfügt über insgesamt 128 Stream-Prozessoren (GTX: 128; GTS: 96), die die ehemals getrennten Shadervarianten der klassischen Architektur ablösen. Bei der klassischen Pipeline nimmt die GPU die Kommandos der CPU entgegen und berechnet zuerst die Geometrie im Vertex-Shader. Anschließend werden im „Triangle-Setup“ die Vertices (Eckpunkte) in Primitive (wie beispielsweise eine Linie oder ein Dreieck) umgewandelt, bevor im Fragmentshader (die D3D-Spezifikation spricht hier vom Pixelshader) unter anderem Pixeltexturing sowie Farbbestimmungen durchgeführt werden. Schlussendlich finden in den ROPs noch Z-Berechnungen (Sichtbarkeitsprüfungen) und das Anti-Aliasing statt, bevor die fertigen Daten in den Framebuffer geschrieben werden.

klassische Pipeline
klassische Pipeline

Diese klassische Pipeline ist schon seit vielen Jahren im Einsatz, bietet jedoch ein paar Nachteile. So werden beispielsweise traditionell mehr Pixelshader-Anweisungen als Vertexshader-Programme verwendet, was schnell eine ungleiche Auslastung des 3D-Beschleunigers zur Folge hat, da eine Einheit mit Anweisungen regelrecht überquillt, während sich die andere ALU im Leerlauf langweilt. Zudem war es kompliziert, fertig berechnete Daten durch einen erneuten Pipelinedurchlauf zu modifizieren, was allerdings eher eine Limitierung der Direct3D-9-API ist. Bei der Direct3D-10-GPU G80 fallen nun beide Nachteile weg. So sind die 128 Streamprozessoren in der Lage, sowohl Vertex- als auch Pixel- und Geometryanweisungen zu verarbeiten. Dadurch ist es zumindest theoretisch möglich, dass alle ALUs durch die Bank maximal ausgelastet sind und kein unnötiger Leerlauf entsteht. Ob dies aber tatsächlich immer der Fall ist, kann man nur vermuten. Einen wichtigen Anteil an der Auslastung trägt dabei der so genannte „Thread-Prozessor“, der den Shadercode auf die 128 Shadereinheiten verteilt.

Wie weiter oben erwähnt, ist die GeForce 8800 in der Lage, Daten, die den Shadercore bereits durchlaufen haben, erneut im Shadercore zu modifizieren. Der Output des Streamprozessors wird dabei in ein Register, einen extrem schnellen Zwischenspeicher, geschrieben und anschließend entweder erneut durch den Unified Shader Core geschleust (eine „Loop-Funktion“) oder an die ROPs weitergegeben. Schauen wir uns nun die G80-Architektur der GeForce 8800 GTX und GeForce 8800 GTS etwas genauer an.

G80 Architektur
G80 Architektur

Streamprozessoren:
Verglichen mit den 56 Shadereinheiten auf einem R580 oder G71 erscheinen die 128 Streamprozessoren der GeForce 8800 GTX als geradezu monströs. Hier muss man allerdings einen Blick ins Innere der ALUs werfen, da diese zwischen den beiden Generationen deutliche Änderungen aufweisen. So sind die ALUs sowohl auf dem R580 als auch auf dem G71 Vektorprozessoren (4D), die innerhalb eines Taktes vier unterschiedliche Komponenten (RGBA; Rot, Grün, Blau und den Alphawert) berechnen können. Jedoch sind viele Shaderanweisungen simpler als eine Vektoranweisung gestrickt (Skalarberechnung mit einer einzigen Komponente; 1D), weswegen es beispielsweise auf einem G71 möglich ist, die Recheneinheiten in einem 3:1 oder 2:2 Verhältnis aufzuteilen, um die Last auf die ALUs gleichmäßiger zu verteilen (Nichtsdestotrotz rechnen die ALUs längst nicht immer mit der maximal möglichen Leistung). Somit entschied sich nVidia beim G80 dazu auf Vektorprozessoren zu verzichten und verbaut 128 Skalareinheiten. Bei Pixelshader-Anweisungen, die auf den vier Komponenten basieren, stehen einem theoretisch maximal 32 Shadereinheiten (der alten Klasse) zur Verfügung.

G80 Thread Manager
G80 Thread Manager

Jede der 128 ALUs auf der GeForce 8800 GTX kann jeweils eine MADD- (Multiply-ADD) sowie eine MUL-Operation (Multiply) innerhalb eines Taktes ausführen. Gleichzeitig kann der G80 dabei von 128 Pixelshader auf 128 Vertex- oder Geometryshader umschalten, besitzt also eine äußerst feine Granularität. Angebunden sind die Streamprozessoren, ähnlich wie die Geometric-Domain auf der G71-GPU, mit einer eigenen Taktdomäne. Diese taktet mit satten 1350 MHz und arbeitet um einiges schneller als die restlichen Komponenten auf der GeForce 8800 GTX, die mit 575 MHz angetrieben werden. Wie nVidia uns auf Nachfrage bestätigte, handelt es sich dabei nicht um ein „DDR-Prinzip“ sondern reale Taktraten. Die Streamprozessoren sind auf der GeForce 8800 GTX in acht Blöcken mit jeweils 16 ALUs eingeteilt, die nVidia blockweise deaktivieren kann. So ist auf der GeForce 8800 GTS dieselbe GPU vorhanden. Allerdings sind zwei der acht Blöcke deaktiviert, womit der kleinere Bruder auf 96 Streamprozessoren zurückgreifen kann.

Textureinheiten:
Bei den Textureinheiten des G80 hat sich ebenfalls einiges verändert. Während nVidia auf der GeForce 7900 GTX noch 24 bilinear ausgelegte Texture Mapping Units (TMUs) verbaute, werden auf der GeForce 8800 GTX nun gleich 64 solcher (bilinearen) Einheiten eingesetzt. Man kann aber auch hier die Einheiten nicht direkt miteinander vergleichen. So konnten auf dem G71 nicht nur 24 Pixel texturiert und gefiltert, sondern zusätzlich auch noch adressiert werden. Auf dem G80 können dagegen zwar 64 Pixel gefiltert, aber nur 32 Pixel adressiert werden, was eine interessante Eigenschaft mit sich bringt: Bei einfacher bilinearer Filterung können insgesamt 32 Texel pro Takt fertiggestellt werden, wobei die restlichen 32 Textureinheiten quasi brach liegen. Wenn man nun allerdings einen 2-fachen bilinearen anisotropen Filter einsetzt, benötigen die 32 Textureinheiten bereits zwei Takte, um die Pixel zu filtern. Mit Hilfe der 32 restlichen Einheiten kann dieser Schritt nun schon in einem Taktdurchlauf erledigt werden, weswegen 2xAF mit bilinearer Filterung theoretisch keinerlei Leistung kostet. Ob bei herkömmlicher trilinearer Filterung 32 Pixel in einem Taktdurchlauf fertiggestellt werden können, gibt nVidia leider nicht an.

G80 Textureinheit
G80 Textureinheit

Darüber hinaus hat nVidia auf dem G80 eine Schwachstelle des G71 entfernt. So war bei einer Texturoperation die Shader-Unit 1 kurzzeitig mit einer Latenz versehen, womit die Funktion der ALU ungenutzt blieb und unnötig Rechenleistung verschenkt wurde. Bei dem G80 sind die TMUs nun vollständig von den ALUs abgekoppelt, womit dieser „stall“ bei einer Texturoperation nicht mehr auftritt. nVidia konnte somit einige Transistoren einsparen und die GPU dementsprechend einfacher produzieren. Darüber hinaus sind die TMUs des G80 bei der anisotropen Filterung intelligenter. So kann der G71 bei anisotroper Filterung gewisse Winkel nicht mit der vollen Anzahl an Samples filtern, wodurch eine winkelabhängige Texturfilterung entsteht, die in einigen Spielen negativ auffällt. Der G80 beherrscht nun, wie der R5x0 von ATi, eine winkelunabhängige Texturfilterung.

G80 vs G70 und ALU vs Tex
G80 vs G70 und ALU vs Tex