Nvidia Streaming Multiprozessor-Verlauf


Letztes Wochenende habe ich CUDA- und SIMT-Programmierung gelernt. Diese fruchtbar verbrachte Zeit endete mit einer fast 700-fachen Beschleunigung meines „Visitenkarten-Rennfahrers“ [1] - von 101 Sekunden auf 150 ms.

Eine solch angenehme Erfahrung war eine gute Ausrede, um das Thema und die Entwicklung der Nvidia-Architektur weiter zu untersuchen. Aufgrund der riesigen Menge an Dokumentation, die im Laufe der Jahre vom „grünen“ Team veröffentlicht wurde, gelang es mir, in die Vergangenheit zu reisen und kurz durch die erstaunliche Entwicklung seiner Streaming-Multiprozessoren zu gehen.

In diesem Artikel werden wir Folgendes berücksichtigen:

Jahr Generation Crystal Process Technology Series Leistungsstärkste Karte
================================================== ===========================
2006 Tesla GeForce 8 G80 90 nm 8800 GTX 
2010 Fermi GeForce 400 GF100 40 nm GTX 480
2012 Kepler GeForce 600 GK104 28 nm GTX 680
2014 Maxwell GeForce 900 GM204 28 nm GTX 980 Ti
2016 Pascal GeForce 10 GP102 16 nm GTX 1080 Ti
2018 Turing GeForce 20 TU102 12 nm RTX 2080 Ti

Sackgasse


Bis 2006 korrelierte die GPU-Architektur von NVidia mit den logischen Phasen des API-Renderings [2] . Die GeForce 7900 GTX, die vom G71-Kristall gesteuert wird, bestand aus drei Teilen, die an der Verarbeitung von Eckpunkten (8 Blöcke), der Erzeugung von Fragmenten (24 Blöcke) und der Kombination von Fragmenten (16 Blöcke) beteiligt waren.


Kristall G71. Achten Sie auf die Z-Cull-Optimierung, bei der ein Fragment verworfen wird, das den Z-Test nicht besteht.

Diese Korrelation ließ die Konstrukteure die Position der Engpässe des Förderers für den korrekten Ausgleich jeder der Schichten erraten. Mit dem Aufkommen einer weiteren Stufe in DirectX 10 - dem geometrischen Shader - standen die Nvidia-Ingenieure vor der schwierigen Aufgabe, den Kristall auszugleichen, ohne zu wissen, wie aktiv diese Stufe verwendet wird. Es ist Zeit für eine Veränderung.

Tesla



Nvidia löste das Problem der zunehmenden Komplexität mithilfe der 2006 veröffentlichten „integrierten“ Tesla-Architektur.

Es gab keinen Unterschied mehr zwischen den Schichten im G80-Kristall. Aufgrund der Fähigkeit, Scheitelpunkt, Fragment und geometrischen "Kern" auszuführen, hat der Stream-Multiprozessor (Stream-Multiprozessor, SM) alle zuvor vorhandenen Blöcke ersetzt. Der Lastausgleich wurde automatisch durchgeführt, da der von jedem SM durchgeführte „Kern“ je nach den Anforderungen des Förderers ausgetauscht wurde.

"Tatsächlich haben wir die gesamte NV30 / NV40-Shader-Architektur verworfen und von Grund auf eine neue mit einer neuen gemeinsamen Architektur für Universalprozessoren (SIMT) erstellt, die auch neue Methoden für das Prozessordesign einführte."

John Alben (extremetech.com Interview)

SIMD-Befehle können nicht mehr ausgeführt werden. Aus „Shader-Blöcken“ werden „Kernel“, die einen ganzzahligen Befehl oder einen Befehl mit float32 pro Zyklus ausführen können. SM empfängt Threads in Gruppen von 32 Threads, die als Warp bezeichnet werden. Im Idealfall führen alle Threads desselben Warps denselben Befehl zur gleichen Zeit aus, nur für unterschiedliche Daten (daher der Name SIMT). Die Multithread-Befehlseinheit (MT) ist damit beschäftigt, Threads im Warp zu aktivieren / deaktivieren, wenn ihr Befehlszeiger (Befehlszeiger, IP) konvergiert / zurückweist.

Mit zwei SFUs können Sie komplexe mathematische Berechnungen durchführen, z. B. die inverse Quadratwurzel, sin, cos, exp und rcp. Diese Blöcke können auch einen Befehl pro Zyklus ausführen, aber da es nur zwei davon gibt, wird die Geschwindigkeit des Warps in vier Teile geteilt. Es gibt keine Hardwareunterstützung für float64, Berechnungen werden programmgesteuert durchgeführt, was die Ausführungsgeschwindigkeit stark beeinflusst.

SM realisiert sein maximales Potenzial, wenn es in der Lage ist, Speicherlatenzen aufgrund des ständigen Vorhandenseins von verteilbaren Warps zu verbergen, aber auch, wenn der Fluss im Warp nicht abweicht (die Steuerlogik hält ihn auf dem gleichen Weg der Befehlsausführung). Stream-Zustände werden in 4-Kilobyte-Registerdateien (Register File, RF) gespeichert. Threads, die zu viel Platz auf dem Stapel beanspruchen, reduzieren die Anzahl möglicher Threads, die gleichzeitig ausgeführt werden können, und verringern gleichzeitig die Leistung.

Das Flaggschiff der Tesla-Generation war der in der GeForce 8800 GTX eingeführte 90-nm-G80. Zwei SMs werden in einem Texture Processor Cluster (TPC) zusammen mit einer Texture Unit und einem Tex L1-Cache kombiniert. Es wurde versprochen, dass der G80 mit 8 TPC und 128 Kernen 345,6 Gigaflops erzeugt [3]. Die 8800 GTX-Karte war zu einer Zeit äußerst beliebt, erhielt wundervolle Bewertungen und verliebte sich in diejenigen, die es sich leisten konnten. Es stellte sich als so hervorragendes Produkt heraus, dass es dreizehn Monate nach seiner Veröffentlichung eine der schnellsten GPUs auf dem Markt blieb.


G80 in 8800 GTX installiert. Render Output Units (ROP) übernehmen die Glättung.

Zusammen mit Tesla führte Nvidia die Programmiersprache C für Compute Unified Device Architecture (CUDA) ein, eine Obermenge der Sprache C99. GPGPU-Enthusiasten, die die Alternative zur Täuschung der GPU mit GLSL-Texturen und Shadern begrüßten, fanden dies gut.

Obwohl ich in diesem Abschnitt hauptsächlich über SM spreche, war es nur die eine Hälfte des Systems. In SM müssen Anweisungen und Daten übertragen werden, die im Speicher der GPU gespeichert sind. Um Ausfallzeiten zu vermeiden, versuchen GPUs nicht, die Speicherübertragung mithilfe großer Caches zu minimieren und die Leistung der CPU vorherzusagen. GPUs nutzen die Latenz und sättigen den Speicherbus, um die E / A-Anforderungen von Tausenden von Threads zu erfüllen. Zu diesem Zweck realisiert ein Chip (zum Beispiel G80) eine hohe Speicherbandbreite unter Verwendung von sechs zweiseitigen DRAM-Speicherbussen.


GPUs nutzen Speicherlatenzen, während CPUs sie mit einem riesigen Cache und einer Vorhersagelogik verbergen.

Fermi



Tesla war ein riskanter Schritt, der sich als sehr erfolgreich erwies. Es war so erfolgreich, dass es für die nächsten zwei Jahrzehnte die Grundlage für die NVidia-GPU wurde.

« , , (Fermi , Maxwell ), , G80, [Pascal]».

( extremetech.com)

2010 veröffentlichte Nvidia den GF100, der auf der brandneuen Fermi-Architektur basiert. Das Interieur des neuesten Chips ist in der technischen Dokumentation von Fermi [4] ausführlich beschrieben .

Das Ausführungsmodell basiert weiterhin auf einer Verzerrung von 32 Threads, die an SM gesendet werden. NVidia konnte alle Indikatoren nur dank der 40-Nanometer-Prozesstechnologie verdoppeln / vervierfachen. Dank zwei Arrays mit 16 CUDA-Kernen konnte SM nun gleichzeitig zwei Semi-Warp (jeweils 16 Threads) versenden. Trotz der Tatsache, dass jeder Kern einen Befehl pro Taktzyklus ausführte, war SM im Wesentlichen in der Lage, einen Warp-Befehl pro Taktzyklus auszuschließen (viermal mehr als die Tesla-Architektur SM).

Die Anzahl der SFUs hat ebenfalls zugenommen, aber nicht so sehr - die Kapazität hat sich nur verdoppelt. Es kann gefolgert werden, dass Anweisungen dieses Typs nicht sehr aktiv verwendet wurden.

Float64 unterstützt Semi-Hardware und kombiniert Operationen, die von zwei CUDA-Kernen ausgeführt werden. Dank der 32-Bit-ALU (in Tesla war es 24-Bit) kann der GF100 eine ganzzahlige Multiplikation in einem Zyklus durchführen und hat aufgrund des Übergangs von IEEE 754-1985 zu IEEE 754-2008 die Genauigkeit bei der Arbeit mit der float32-Pipeline unter Verwendung von Fused Multiply erhöht -Add (FMA) (genauer als das in Tesla MAD verwendete).

Aus programmtechnischer Sicht ermöglichte es das integrierte Speichersystem von Fermi, CUDA C durch C ++ - Funktionen wie ein Objekt, virtuelle Methoden und Ausnahmen zu ergänzen.

Aufgrund der Tatsache, dass die Texturblöcke jetzt zu SM geworden sind, wurde das Konzept von TPC aufgegeben. Es wurde durch GPC-Cluster (Graphics Processor Clusters) mit jeweils vier SMs ersetzt. Zu guter Letzt ist SM jetzt mit der Polymorph Engine ausgestattet, die sich mit dem Abrufen von Scheitelpunkten, dem Transformieren des Ansichtsfensters und der Tessellation befasst. Das Flaggschiff GeForce GTX 480 auf Basis der GF100 soll 512 Kerne enthalten und 1.345 Gigaflops liefern können [5] .


GF100 in der GeForce GTX 480 installiert. Beachten Sie die sechs Speichercontroller, die den GPC bedienen.

Kepler



2012 veröffentlichte Nvidia die Kepler-Architektur, benannt nach einem Astrologen, der vor allem für die Entdeckung der Gesetze der Planetenbewegung bekannt ist. Wie üblich erlaubte uns die technische Dokumentation GK104 [6] , nach innen zu schauen .

Bei Kepler hat Nvidia die Energieeffizienz des Chips erheblich verbessert, indem die Taktrate gesenkt und die Kernfrequenz mit der Kartenfrequenz kombiniert wurde (zuvor wurde ihre Frequenz verdoppelt).

Solche Änderungen hätten zu einem Rückgang der Produktivität führen müssen. Dank einer Halbierungstechnologie (28 Nanometer) und dem Ersatz des Hardware-Dispatchers durch einen Software-Dispatcher konnte Nvidia jedoch nicht nur mehr SM auf dem Chip platzieren, sondern auch das Design verbessern.

Der Streaming-Multiprozessor der nächsten Generation (SMX) ist ein Monster, dessen Indikatoren fast alle verdoppelt oder verdreifacht wurden.

Dank vier Warp-Dispatchern, die in der Lage sind, einen gesamten Warp in einem Taktzyklus zu verarbeiten (Fermi konnte nur die Hälfte des Warps verarbeiten), enthielt SMX jetzt 196 Kerne. Jeder Dispatcher hatte eine doppelte Dispatching-Funktion, die es ermöglichte, den zweiten Befehl in Warp auszuführen, wenn er unabhängig von dem aktuellen ausführbaren Befehl war. Eine doppelte Planung war nicht immer möglich, da eine Spalte mit 32 Kernen zwei Planungsvorgängen gemeinsam war.

Ein solches Schema komplizierte die Planungslogik (wir werden später darauf zurückkommen), aber dank der Ausführung von bis zu sechs Warp-Befehlen pro Zyklus lieferte der SMX die doppelte Leistung im Vergleich zum SM der Fermi-Architektur.

Es wurde angegeben, dass das Flaggschiff NVIDIA GeForce GTX 680 mit einem GK104-Chip und acht SMX 1536 Kerne hat und 3.250 Gigaflops erreicht [7].. Die Elemente des Kristalls wurden so kompliziert, dass ich alle Signaturen aus dem Diagramm entfernen musste.


GK104 in der GeForce GTX 680 installiert. Achten Sie

auf die komplett neu gestalteten Speichersubsysteme, die mit einer atemberaubenden Frequenz von 6 GHz arbeiten. Sie erlaubten es, die Anzahl der Speichercontroller von sechs auf vier zu reduzieren.

Maxwell


2014 veröffentlichte Nvidia die GPU der zehnten Generation namens Maxwell. Wie in der technischen Dokumentation zu GM107 [8] angegeben , lautete das Motto der ersten Generation der Architektur „Maximale Energieeffizienz und außergewöhnliche Leistung für jedes verbrauchte Watt“. Die Karten wurden für "leistungsbeschränkte Umgebungen wie Laptops und SFF-PCs (Small Form Factor)" positioniert.

Die wichtigste Entscheidung war, die Kepler-Struktur mit der Anzahl der CUDA-Kerne in SM aufzugeben, was keine Zweierpotenz ist: Einige Kernel wurden üblich und arbeiteten wieder im Half-Warp-Modus. Zum ersten Mal in der Geschichte der Architektur hatte SMM weniger Kerne als sein Vorgänger: „nur“ 128 Kerne.

Durch die Anpassung der Anzahl der Kerne und der Kettgröße wurde die Kristallsegmentierung verbessert, was zu Platz- und Energieeinsparungen führte.


Ein 2014er SMM hatte 2006 so viele Kerne (128) wie die gesamte GTX 8800.

Der Maxwell der zweiten Generation (beschrieben in der technischen Dokumentation GM200 [9] ) steigerte die Produktivität erheblich und behielt gleichzeitig die Energieeffizienz der ersten Generation bei.

Die Prozesstechnologie blieb bei 28 Nanometern, sodass die Ingenieure von Nvidia nicht auf eine einfache Miniaturisierung zurückgreifen konnten, um die Produktivität zu steigern. Eine Verringerung der Anzahl von SMM-Kernen hat jedoch ihre Größe verringert, wodurch mehr SMMs auf dem Chip platziert werden könnten. Im Vergleich zu Kepler verdoppelte die zweite Generation von Maxwell die Anzahl der SMMs, während die Kristallfläche nur um 25% vergrößert wurde.

In der Liste der Verbesserungen finden Sie auch eine vereinfachte Versandlogik, mit der die Anzahl der redundanten Versandredundanzen und die Verzögerung der Berechnungen verringert werden konnten, wodurch die Optimalität der Verwendung von Warp erhöht wurde. Auch die Speicherfrequenz wurde um 15% erhöht.

Das Studium des Maxwell GM200-Blockdiagramms belastet bereits Ihre Augen. Aber wir prüfen es immer noch sorgfältig. Das Flaggschiff NVIDIA GeForce GTX 980 Ti mit einem GM200-Kristall und 24 SMM versprach 3072 Kerne und 6.060 Gigaflops [10] .


GM200 in der GeForce GTX 980 Ti installiert.

Pascal


Im Jahr 2016 führte Nvidia Pascal ein. Die technische Dokumentation GP104 [11] hinterlässt ein Déjà-vu-Gefühl, da der Pascal SM genau wie der Maxwell SMM aussieht. Das Fehlen von SM-Änderungen stagnierte nicht, da die 16-Nanometer-Prozesstechnologie es uns ermöglichte, mehr SMs zu platzieren und die Anzahl der Gigaflops erneut zu verdoppeln.

Unter anderem wurde ein Speichersystem auf Basis des brandneuen GDDR5X verbessert. Die 256-Bit-Speicherschnittstelle ermöglichte dank acht Speichercontrollern Übertragungsgeschwindigkeiten von 10 Gigaflops, erhöhte die Speicherbandbreite um 43% und reduzierte die Ausfallzeit von Warps.

Das Flaggschiff NVIDIA GeForce GTX 1080 Ti mit einem GP102-Chip und 28 TSM versprach 3584 Kerne und 11.340 Gigaflops [12] .


GP104 in der GeForce GTX 1080 installiert.

Turing


Mit der Veröffentlichung von Turing im Jahr 2018 machte Nvidia seinen „größten architektonischen Schritt seit zehn Jahren“ [13] . In Turing SM erschienen nicht nur spezialisierte Tensorkerne mit künstlicher Intelligenz, sondern auch Kerne für die Strahlverfolgung (Rautracing, RT). Eine solch fragmentierte Struktur erinnert mich an die geschichtete Architektur, die vor Tesla existierte, und dies beweist einmal mehr, dass die Geschichte die Wiederholung liebt.


Zusätzlich zu den neuen Kernen sind in Turing drei wichtige Merkmale erschienen. Erstens ist der CUDA-Kernel jetzt superskalar geworden, was die parallele Ausführung von Anweisungen mit ganzen Zahlen und Gleitkommazahlen ermöglicht. Wenn Sie 1996 finden, erinnert dies möglicherweise an Intels „innovative“ Architektur.

Zweitens kann das neue Speichersubsystem auf GDDR6X, das von 16 Controllern unterstützt wird, jetzt 14 Gigaflops bereitstellen.

Drittens haben Streams jetzt keine gemeinsamen Befehlszeiger (IP) in Warp. Dank der unabhängigen Thread-Planung in Volta hat jeder Thread seine eigene IP. Infolgedessen können SMs die Dispatching-Flows in Warp flexibler konfigurieren, ohne dass eine Konvergenz so schnell wie möglich erforderlich ist.

Das Flaggschiff NVIDIA GeForce GTX 2080 Ti mit TU102 und 68 TSM-Kristallen hat 4352 und erreicht 13 45 Gigaflops [14] . Ich habe kein Blockdiagramm gezeichnet, da es wie ein verschwommener grüner Fleck aussehen würde.

Was erwartet uns als nächstes?


Gerüchten zufolge wird die nächste Architektur mit dem Codenamen Ampere im Jahr 2020 angekündigt. Wie Intel am Beispiel von Ice Lake bewiesen hat, dass das Potenzial für eine Miniaturisierung mithilfe der 7-Nanometer-Prozesstechnologie noch besteht, besteht fast kein Zweifel daran, dass Nvidia damit SM weiter reduziert und seine Leistung verdoppelt.


Teraflops / s für jeden Nvidia-Chip / jede Nvidia-Karte (Datenquelle: techpowerup.com).

Es wird interessant sein zu sehen, wie Nvidia die Entwicklung der Idee von Kristallen mit drei Arten von Kernen fortsetzt, die unterschiedliche Aufgaben erfüllen. Werden wir Kristalle sehen, den gesamten Zustand von Tensorkernen oder RT-Kernen? Neugierig.

Referenzmaterialien


[1] Quelle: Überarbeitung des Visitenkarten-Raytracers
[2] Quelle: Fermi: Die erste vollständige GPU-Computerarchitektur
[3] Quelle: NVIDIA GeForce 8800 GTX (techpowerup.com)
[4] Quelle: Whitepaper Fermi (GF100)
[5] Quelle: NVIDIA GeForce GTX 480
[6] Quelle: Kepler (GK104) Whitepaper
[7] Quelle: NVIDIA GeForce GTX 680
[8] Quelle: Maxwell Gen1 (GM107) Whitepaper
[9] Quelle: Maxwell Gen2 (GM200) Whitepaper
[10] Quelle: NVIDIA GeForce GTX 980 Ti
[11] Quelle: Pascal (GP102) Whitepaper
[12] Quelle:NVIDIA GeForce GTX 1080 Ti
[13] Quelle: Turing (TU102) Whitepaper
[14] Quelle: NVIDIA GeForce GTX 2080 Ti

All Articles