GeForce GTX 480 und 470: Von Fermi und GF100 zu echten Karten!

Zusätzliches Lesen: Geometrie, Raster, ROP und GPGPU Geometrie Shader und Raster Engine Nach unserer kleinen Sidebar auf Tessellation, lassen Sie uns die Tour entlang Nvidias Geometrie-Pipeline fortsetzen. Die letzte Stufe besteht aus dem Geometry Shader, der zuerst mit Direct3D 10 erschienen ist und es ermöglicht, Ecken zu Primitiven hinzuzufügen oder von ihnen zu entfernen. W

Zusätzliches Lesen: Geometrie, Raster, ROP und GPGPU

Geometrie Shader und Raster Engine

Nach unserer kleinen Sidebar auf Tessellation, lassen Sie uns die Tour entlang Nvidias Geometrie-Pipeline fortsetzen. Die letzte Stufe besteht aus dem Geometry Shader, der zuerst mit Direct3D 10 erschienen ist und es ermöglicht, Ecken zu Primitiven hinzuzufügen oder von ihnen zu entfernen. Wir sind weit entfernt von T & L mit unserer lieben alten GeForce (es ist schon 10 Jahre her).

In diesem Bereich hat sich die neue GeForce GTX 480 im Vergleich zur vorherigen Architektur am meisten entwickelt, mit einer Verbesserung des RightMark Hyperlight um nicht weniger als 311%.

Schließlich führt die PolyMorph Engine die Berechnung der Darstellungsfeldtransformation und der perspektivischen Korrektur durch, bevor die Scheitelpunkte und alle ihre Attribute an die Raster Engine übergeben werden. Die Raster Engine besteht aus drei Hauptstufen. Zuerst werden die Gleichungen für die Kanten des Dreiecks berechnet und die Dreiecke, die nicht der Kamera zugewandt sind, werden verworfen. Dann erzeugt der Rasterisierer die Pixel (und die Abtastungen im Fall von MSAA), die von dem Dreieck bedeckt sind, bevor alle Daten an eine Z-Cull-Einheit weitergegeben werden, die nun eine vertraute Einheit ist, die eine Pixelschattierung an versteckten Pixeln unter Verwendung von vermeidet ein hierarchischer Z-Puffer.

Überarbeitete ROP-Einheiten

Wie wir bereits gesehen haben, hat Nvidia die Anzahl der ROPs erhöht, aber auch einige Änderungen vorgenommen. Die "Grafik" -Leistung der Einheiten wurde nicht geändert (ein 32-Bit-Integerpixel pro Taktzyklus, ein FP16-Pixel über zwei Takte oder ein FP32-Pixel über vier Takte), aber Nvidia hat die atomaren Operationen stark optimiert (d. H. Speicheroperationen, die in einer einzigen Transaktion ausgeführt werden) ohne Unterbrechung möglich. Diese Art der Operation ist äußerst nützlich bei der parallelen Programmierung, wenn mehrere Threads versuchen können, auf dieselbe Ressource zuzugreifen. Nvidia beansprucht sehr große Gewinne - bis zu 20x bei atomaren Operationen an einer einzigen Adresse und 7.5x bei zusammenhängenden Speicherbereichen, selbst wenn diese Gewinne in der Praxis wahrscheinlich eher das Ergebnis der Verwendung des L2-Cache sind als alle anderen wesentliche Änderung der ROP-Einheiten.

Nvidia behauptet auch eine wesentliche Verbesserung seiner Komprimierungsalgorithmen, was zu einer besseren Effizienz mit 8x Anti-Aliasing führt.

Schließlich verfügt GF100 über einen neuen 32x Coverage Sampling Anti-Aliasing (CSAA) -Modus und die Möglichkeit, CSAA und Transparenz-Multisampling zu kombinieren, um das Anti-Aliasing von transparenten Oberflächen zu verbessern. Ein interessantes Detail: Bis jetzt stieg die Anzahl der von der Setup-Engine erzeugten Pixel und die Anzahl der ROP-Einheiten zusammen. Jetzt hat GF100 48 ROP-Einheiten und sein Rasterizer kann nur 32 Pixel pro Zyklus erzeugen. Das mag auf den ersten Blick eine seltsame Wahl sein, aber in der Praxis werden die neuesten Spiele normalerweise nicht auf High-End-Hardware ohne MSAA gespielt, und sie verwenden oft Gleitkomma-Frame-Puffer, was den ROP-Einheiten eine größere Arbeitslast auferlegt Nehmen Sie mehrere Zyklen, um die Pixel zu verarbeiten. Daher ist die Erhöhung der Anzahl der ROP-Einheiten gerechtfertigt, aber in einigen sehr einfachen Rendering-Pässen werden sie von den Rasterizern nicht ausreichend genutzt.

GPGPU

Es ist schwierig, über die GF100 zu sprechen, ohne über GPGPU zu sprechen, da sich Nvidia während der Präsentation der neuen Architektur so sehr darauf konzentriert hat. Als das Unternehmen G80 entwarf, steckte der GPGPU-Markt noch in den Kinderschuhen. Die Auswahlmöglichkeiten von Nvidia erwiesen sich als gut, sowohl hinsichtlich der Hardware (mit d-Speicher) als auch bezüglich der Software (Compute Shader und OpenCL haben Programmierparadigmen, die CUDA sehr nahe kommen). Aber es ist unmöglich, auf Anhieb eine perfekte Lösung anzubieten, und Nvidia entwickelt weiterhin CUDA und unterstützt die GT200 mit doppelter Genauigkeit und atomaren Anweisungen. Aber das waren nur schrittweise Verbesserungen. Mit seiner Fermi-Architektur konnte Nvidia das gesamte Know-how aus der mehrjährigen Zusammenarbeit mit CUDA nutzen, um eine wesentlich leistungsfähigere Lösung anzubieten.

Der erste Punkt, der mit GF100 erheblich verbessert wurde und der GPGPU-Anwendungen direkt zugute kommen wird, ist die Unterstützung für Arithmetik mit doppelter Genauigkeit. Wie wir bereits gesehen haben, sah die doppelte Unterstützung des GT200 wirklich wie eine schnelle und schmutzige Lösung aus, die hinzugefügt wurde, um das Gebiet abzustecken. Mit einer einzelnen 64-Bit-Einheit im Vergleich zu acht 32-Bit-Einheiten war die Double-Precision-Leistung des GT200 nicht wirklich auf Hochtouren. Ohne dedizierte Einheiten konnte AMD sogar den Vorteil erzielen, dass die Leistung seiner GPU mit DP nur um den Faktor vier reduziert wurde, was nur halb so stark war wie bei Nvidias Architektur.

Aber mit GF100 hat Nvidia die Architektur komplett überarbeitet und die dedizierte MAD-Einheit wurde abgeschafft. Die gleichen Einheiten verarbeiten jetzt Berechnungen mit einfacher und doppelter Genauigkeit, und die Leistung wird nur um die Hälfte mit doppelter Genauigkeit reduziert. Daher ist der Einfluss auf die Leistung viel vernünftiger als bei CPUs, die mit SSE betrieben werden. Der Vorteil, eine GPU für diese Art von Berechnung zu verwenden, sollte jetzt attraktiv genug sein, um Programmierer dazu zu motivieren, die notwendige Neucodierung durchzuführen.

Während wir uns mit der Gleitkommaberechnung beschäftigen, beachten Sie, dass der GF100 den neuesten Standard IEEE 754-2008 mit allen erforderlichen Rundungsalgorithmen und Fließkomma-Multiply-Add-Double (FMAD) -Anweisungen unterstützt. Es behält die Genauigkeit der Berechnung durch und führt nur eine einzige Rundung durch, im Gegensatz zur klassischen Multiplikations-Additionsanweisung (MAD), die zwei Rundungen ausführt. Beachten Sie jedoch, dass sein direkter Konkurrent, RV870 von AMD, in diesem Bereich nicht wirklich hinterherhinkt, da er auch den neuesten Gleitkomma-Standard und den FMAD-Befehl unterstützt.

Wir haben auf der vorherigen Seite einen weiteren Vorteil für Fermi in GPGPU-Umgebungen beschrieben: eine neue Speicherhierarchie. In einigen Fällen kann ein kleiner Arbeitspuffer RAM Wunder bewirken, aber es gibt Situationen, in denen nichts den Cache-Speicher ersetzen kann. Der GF100 unterstützt optional ECC-Speicher, und der gesamte interne Speicher der GPU (L1- und L2-Cache plus Speicher) ist ebenfalls geschützt.

Nvidia korrigierte zwei Engpässe, die die Leistung seiner Chips im GPGPU-Modus verlangsamen könnten. Wie eine CPU gibt eine GPU die Illusion, mehrere Aufgaben parallel auszuführen, indem sie zwischen ihnen wechseln, wobei jeder Aufgabe ein Teil der GPU-Zeit zugewiesen wird. Der Hauptunterschied zwischen CPUs und GPUs liegt darin, dass bei Switching-Aufgaben extrem hohe Kosten anfallen. Nvidia hat sich bei der Entwicklung von GF100 mit diesem Problem auseinandergesetzt und diese Operationen optimiert. Die Zeit für den Wechsel zwischen den Kontexten beträgt jetzt weniger als 25 Mikrosekunden. Mit diesem Grad der Verbesserung ist eine häufige Inter-Kernel-Kommunikation jetzt machbar, wo es vorher nicht war.

Eine weitere große Verbesserung: Bis jetzt konnte die GPU nur einen Kernel gleichzeitig auf der gesamten GPU ausführen. Bei großen Kernen war das kein Problem, und alle Ressourcen wurden verwendet. Aber mit kleinen Kernen war es möglich, dass ein Teil der GPU ungenutzt blieb. GF100 ist nun in der Lage, mehrere Kernel parallel (in der Praxis bis zu einem pro Multiprozessor) auszuführen, was zu einer effizienteren Nutzung der GPU führt, selbst bei großen Kernen. Wenn größere Kernel das Ende ihrer Ausführung erreichen, ist es möglich, dass sie eine zu geringe Anzahl von Blöcken haben, um die gesamte GPU zu belegen.

Das Verzweigungsmanagement wurde ebenfalls optimiert, mit Unterstützung für Prädikationsanweisungen. Diese führen zwei divergente Codeabschnitte parallel aus, bevor sie bestimmen, welcher Code beibehalten werden soll. Dies vermeidet die zusätzlichen Kosten des Verzweigungsbefehls, was vorteilhaft sein kann, wenn der auszuführende Code begrenzt ist.

Das letzte neue Feature ist ein einheitlicher Speicherplatz. Bis jetzt hatte PTX ISA 1.0 (der virtuelle Befehlssatz, zu dem CUDA-Programme kompiliert werden) drei Adressräume: den globalen, Geräte- und systemweiten Raum, den privaten lokalen Raum für jeden Thread und den Raum d von allen Threads in einem bestimmten Block. Das Ziel eines Lade- / Speicherbefehls musste zur Kompilierungszeit bestimmt werden, wodurch es schwierig wurde, Zeiger vollständig zu implementieren, deren Ziel sich zur Laufzeit dynamisch ändern kann. Bei der von GF100 unterstützten PTX ISA 2.0 wird ein einzelner Adressraum verwendet, der unter anderem C ++ - Programme unterstützt. C ++ - Objekte hängen weitgehend von der Verwendung von Zeigern ab, um virtuelle Funktionen zu implementieren, deren Verhalten sich je nach dynamischem Objekttyp zur Laufzeit ändern kann.

Lassen Sie uns Kredit geben, wo Kredit fällig ist. Nach einigen Monaten der Stagnation ist endlich die kleine 3D-Welt erwacht und wir haben jetzt zwei Direct3D 11-Architekturen, die mit ganz unterschiedlichen Ansätzen entworfen wurden.

Top