Wie man GPU-Chips entwirft
Chapter 1 Introduction to Gpu Chip Design

Kapitel 1: Einführung in das GPU-Chip-Design

Was sind GPUs und wie unterscheiden sie sich von CPUs

Grafikprozessoren (GPUs) sind spezialisierte elektronische Schaltkreise, die entwickelt wurden, um Speicher schnell zu manipulieren und zu ändern, um die Erstellung von Bildern in einem Framebuffer, der für die Ausgabe auf ein Anzeigerät bestimmt ist, zu beschleunigen. GPUs wurden ursprünglich entwickelt, um die 2D- und 3D-Grafikwiedergabe von der CPU abzulösen, was eine deutlich höhere Leistung für grafikintensive Anwendungen wie Videospiele ermöglicht.

Während CPUs für allgemeine Zwecke ausgelegt sind und eine komplexe Steuerungslogik aufweisen, um eine Vielzahl von Programmen zu unterstützen, haben GPUs eine hochgradig parallele Architektur, die aus Tausenden von kleineren, effizienteren Kernen besteht, die für die Bearbeitung mehrerer Aufgaben gleichzeitig ausgelegt sind. Dies macht sie ideal für die Grafikwiedergabe, bei der große Datenblöcke parallel verarbeitet werden können.

Zu den wichtigsten architektonischen Unterschieden zwischen CPUs und GPUs gehören:

  • Kernanzahl: GPUs haben eine große Anzahl kleiner Kerne (Hunderte bis Tausende), während CPUs wenige große, leistungsfähige Kerne (2-64) haben.
  • Cache-Hierarchie: CPUs haben große Caches, um die Latenz zu reduzieren, während GPUs kleinere Caches haben und sich mehr auf hohe Bandbreite verlassen, um die Latenz auszugleichen.
  • Steuerungslogik: CPUs haben komplexe Branch-Vorhersage- und Out-of-Order-Ausführungsfähigkeiten. GPUs haben eine viel einfachere Steuerungslogik.
  • Befehlssatz: CPUs unterstützen eine Vielzahl von Befehlen für allgemeine Zwecke. GPU-Befehlssätze sind begrenzter und für Grafiken optimiert.
  • Speicherbandbreite: GPUs haben eine sehr hohe Speicherbandbreite (bis zu 1 TB/s), um ihre vielen Kerne zu versorgen. CPUs haben eine geringere Bandbreite (50-100 GB/s).
  • Gleitkomma-Leistung: GPUs sind in der Lage, eine deutlich höhere Gleitkomma-Leistung zu erbringen, was sie für HPC- und KI-Workloads geeignet macht.

Zusammengefasst ermöglicht die hochgradig parallele Architektur von GPUs, dass sie bei Aufgaben, die die parallele Verarbeitung großer Datenblöcke erfordern, hervorragen, während die ausgeklügeltere Steuerungslogik von CPUs sie für allgemeine Zwecke besser geeignet macht.Hier ist die deutsche Übersetzung der Markdown-Datei. Für den Code wurde der Code selbst nicht übersetzt, sondern nur die Kommentare.

Wichtige Anwendungen und Bedeutung von GPUs

In den letzten zwei Jahrzehnten sind GPUs zu einer der wichtigsten Computertechnologien geworden, da ihre hochgradig parallele Struktur sie für Algorithmen, die große Datenblöcke parallel verarbeiten, effizienter als allgemeine CPUs macht. Einige der wichtigsten Anwendungsbereiche, die den rasanten Fortschritt der GPU-Technologie vorangetrieben haben, sind:

Computergrafik und Gaming

Die gängigste Verwendung von GPUs ist die Beschleunigung der Erstellung von Bildern in einem Framebuffer, der für die Ausgabe auf ein Anzeigerät bestimmt ist. GPUs sind hervorragend in der Manipulation von Computergrafiken und Bildverarbeitung, und ihre hochgradig parallele Struktur macht sie für Algorithmen, bei denen große Datenblöcke parallel verarbeitet werden, effektiver als allgemeine CPUs. Sie sind eine Standardkomponente in modernen Spielekonsolen und Gaming-PCs.

Hochleistungsrechnen (HPC)

Die Parallelverarbeitungsfähigkeiten von GPUs machen sie für wissenschaftliche Rechenanwendungen, die die Verarbeitung sehr großer Datensätze mit parallelen Algorithmen erfordern, gut geeignet. GPUs haben in Supercomputern und HPC-Clustern breite Anwendung gefunden, wo sie neben CPUs eingesetzt werden, um hochgradig parallele Arbeitslasten wie Wettervorhersage, Molekulardynamiksimulationen und seismische Analysen zu beschleunigen.

Künstliche Intelligenz und maschinelles Lernen

Die Parallelverarbeitungsleistung von GPUs war entscheidend für den rasanten Fortschritt des Deep Learning und der KI in den letzten Jahren. Das Training komplexer tiefer neuronaler Netze erfordert eine enorme Rechenleistung, und GPUs haben sich aufgrund ihrer Fähigkeit, die Matrixmultiplikationsoperationen, die im Herzen von Deep-Learning-Algorithmen stehen, effizient durchzuführen, zur Plattform der Wahl für das Training großer KI-Modelle entwickelt. Alle wichtigen Cloud-KI-Plattformen und Supercomputer, die für KI verwendet werden, setzen GPUs ein.Hier ist die deutsche Übersetzung der Markdown-Datei. Für den Code wurden die Kommentare übersetzt, der Code selbst blieb unverändert.

Kryptowährungsschürfen

GPUs wurden auch weit verbreitet für das Kryptowährungsschürfen eingesetzt, da ihre Parallelverarbeitungsfähigkeiten sie gut für die kryptografischen Hash-Algorithmen geeignet machen, die in proof-of-work-basierten Kryptowährungen wie Bitcoin verwendet werden. Hochwertige GPUs von AMD und Nvidia waren während des Kryptowährungsbooms 2017 sehr stark nachgefragt.

Beschleunigte Datenverarbeitung und Edge-KI

Mit der Verlangsamung von Moores Gesetz gibt es einen großen Trend hin zu beschleunigter, heterogener Datenverarbeitung, bei der spezialisierte Beschleunigungschips wie GPUs zusammen mit CPUs eingesetzt werden, um rechenintensive Arbeitslasten zu beschleunigen. GPUs werden auch verwendet, um KI-Fähigkeiten auf Edge-Geräte wie Smartphones, Smart Speaker und Fahrzeugsysteme zu bringen. Mobile SoCs verfügen nun häufig über integrierte GPUs, die sowohl für Grafik als auch für die Beschleunigung von KI-Arbeitslasten verwendet werden.

Die massive Parallelität und hohe Speicherbandbreite von GPUs haben sie zu einer der wichtigsten Rechenplattformen der heutigen Zeit gemacht, mit Anwendungen, die weit über Computergrafik hinausgehen. Da wir an die Grenzen allgemeiner Prozessoren stoßen, werden spezialisierte Chips wie GPUs, FPGAs und KI-Beschleuniger immer wichtiger als Rechenantriebe der Zukunft.

Die Landschaft der Rechenleistungsbeschleuniger

Da sich die Leistungsverbesserungen von allgemeinen CPUs in den letzten Jahren verlangsamt haben, gibt es einen zunehmenden Trend zu spezialisierten Beschleunigungschips, die bestimmte Arbeitslasten beschleunigen können. GPUs sind eines der prominentesten Beispiele für Beschleuniger, aber es gibt mehrere andere wichtige Kategorien:

Field Programmable Gate Arrays (FPGAs)

FPGAs sind Halbleitervorrichtungen, die auf einer Matrix konfigurierbarer Logikblöcke (CLBs) basieren, die über programmierbare Verbindungen miteinander verbunden sind. FPGAs können nach der Herstellung umprogrammiert werden, um den gewünschten Anwendungs- oder Funktionsanforderungen zu entsprechen, und bieten so eine flexiblere Alternative zu ASICs. Sie werden häufig in Luft- und Raumfahrt, ASIC-Prototyping und medizinischer Bildgebung eingesetzt.### Anwendungsspezifische integrierte Schaltungen (ASICs) ASICs sind integrierte Schaltungen, die für eine bestimmte Verwendung angepasst sind und nicht für den allgemeinen Gebrauch wie CPUs bestimmt sind. Moderne ASICs enthalten oft ganze 32-Bit- oder 64-Bit-Prozessoren, Speicherblöcke einschließlich ROM, RAM, EEPROM, Flash-Speicher und andere große Baugruppen. ASICs werden häufig beim Bitcoin-Mining, bei KI-Beschleunigern, in der 5G-Mobilfunkkommunikation und in IoT-Geräten eingesetzt.

KI-Beschleuniger

KI-Beschleuniger sind spezialisierte Chips, die darauf ausgelegt sind, KI-Arbeitslasten, insbesondere das Training und die Inferenz neuronaler Netze, zu beschleunigen. Beispiele sind die Tensor Processing Units (TPUs) von Google, die Nervana Neural Network Processor (NNPs) von Intel und eine Reihe von Start-ups, die KI-Chips von Grund auf neu entwickeln. Diese Chips nutzen reduzierte Rechengenauigkeit, effiziente Matrizenmultiplikationsschaltungen und eine enge Integration von Rechenleistung und Speicher, um eine deutlich höhere Leistung pro Watt bei KI-Arbeitslasten zu erreichen als GPUs oder CPUs.

Bildverarbeitungseinheiten (VPUs)

VPUs sind spezialisierte Chips, die für die Beschleunigung von Computervisions- und Bildverarbeitungsaufgaben ausgelegt sind. Sie enthalten oft dedizierte Hardware für Aufgaben wie Bildverarbeitungssignale, Stereovision und CNN-basierte Objekterkennung. VPUs werden häufig in Anwendungen wie Automotive ADAS, Drohnen, AR/VR-Headsets, Überwachungskameras und anderen Edge-Geräten eingesetzt, die eine schnelle visuelle Verarbeitung erfordern.

Neuromorphe und Quantenchips

In Zukunft werden neuromorphe Chips versuchen, die Architektur des Gehirns nachzuahmen, um eine schnelle und energieeffiziente Leistung neuronaler Netze zu erzielen, während Quantenchips quantenmechanische Effekte nutzen, um bestimmte Probleme schneller als klassische Computer zu lösen. Diese Bereiche befinden sich noch in der Forschungsphase, könnten aber in Zukunft wichtige Beschleuniger werden.

Der allgemeine Trend in der Computertechnik geht in Richtung domänenspezifischer Architekturen und einer Vielfalt von Beschleunigern, die neben allgemeinen CPUs integriert werden, um bestimmte Aufgaben zu beschleunigen.Hier ist die deutsche Übersetzung der Markdown-Datei. Für den Code wurden nur die Kommentare übersetzt, der Code selbst blieb unverändert.

Wichtige Arbeitslasten. GPUs haben dieses beschleunigte Rechenmodell eingeführt und bleiben eine der wichtigsten Arten von Beschleunigern, aber eine Vielzahl anderer Beschleuniger werden auch in vielen Anwendungsdomänen zunehmend entscheidend.

GPU-Hardware-Grundlagen

Eine moderne GPU besteht aus mehreren Schlüsselkomponenten der Hardware:

Streaming-Multiprozessoren (SMs)

Der SM ist der Grundbaustein der NVIDIA-GPU-Architektur. Jeder SM enthält eine Reihe von CUDA-Kernen (typischerweise 64 bis 128), die sich Steuerlogik und Befehlscache teilen. Jeder CUDA-Kern hat eine vollständig gepipelte ganzzahlige arithmetische Logikeinheit (ALU) und eine Gleitkomma-Einheit (FPU). Typischerweise hat ein GPU-Chip zwischen 16 und 128 SMs, was zu Tausenden von CUDA-Kernen führt.

Textur-/L1-Cache

Jeder SM hat einen dedizierten Texturcache und einen L1-Cache, um die Leistung zu verbessern und den Speicherverkehr zu reduzieren. Der Texturcache ist darauf ausgelegt, die räumliche Lokalität zu optimieren und ist besonders effektiv für Grafikworkloads. Der L1-Cache verarbeitet Speichervorgänge (Laden, Speichern) und bietet einen schnellen Datenzugriff mit geringer Latenz.

Gemeinsamer Speicher

Der gemeinsame Speicher ist ein schneller, on-Chip-Speicher, der von den CUDA-Kernen innerhalb eines SM gemeinsam genutzt wird. Er kann als programmierbarer Cache verwendet werden, was eine höhere Bandbreite und einen geringeren Zugriffslatenzen für häufig wiederverwendete Daten ermöglicht. Der gemeinsame Speicher ist in gleichgroße Speichermodule (Bänke) unterteilt, auf die die Kerne gleichzeitig zugreifen können.

Registersatz

Jeder SM hat einen großen Registersatz, der eine niedrige Latenz für Operanden bietet. Der Registersatz ist unter den residenten Threads auf einem SM aufgeteilt und bietet jedem Thread seinen eigenen dedizierten Satz von Registern. Der Zugriff auf ein Register erfordert in der Regel null zusätzliche Taktzyklen pro Befehl, aber Verzögerungen können aufgrund von Register-Read-after-Write-Abhängigkeiten und Register-Speicherbank-Konflikten auftreten.

Warp-Scheduler

Der Warp-Scheduler ist für das Management und die Planung von Warps auf einem SM verantwortlich. Ein Warp ist eine Gruppe von 32 Threads, die gleichzeitig auf den CUDA-Kernen ausgeführt werden.Hier ist die deutsche Übersetzung der Markdown-Datei. Für den Code wurden die Kommentare übersetzt, der Code selbst blieb unverändert.

Der Warp-Scheduler wählt Warps aus, die bereit sind, ausgeführt zu werden, und sendet sie zu den Kernen, was eine hohe Auslastung und Latenzverbergung ermöglicht.

Interconnect-Netzwerk

Das Interconnect-Netzwerk verbindet die SMs mit dem gemeinsamen L2-Cache und den Speichercontrollern der GPU. Es wird typischerweise als Kreuzschienenschalter implementiert, der es mehreren SMs ermöglicht, gleichzeitig auf den L2-Cache und den DRAM zuzugreifen.

Speichercontroller

Die Speichercontroller verarbeiten alle Lese- und Schreibanfragen an den DRAM der GPU. Sie sind dafür verantwortlich, die DRAM-Zugriffsmuster zu optimieren, um die Bandbreitennutzung zu maximieren. Moderne GPUs haben sehr breite DRAM-Schnittstellen (256-Bit bis 4096-Bit) und unterstützen Hochgeschwindigkeitsspeichertechnologien wie GDDR6 und HBM2.

RT-Kerne und Tensor-Kerne

Moderne NVIDIA-GPUs enthalten auch spezialisierte Hardware-Einheiten zur Beschleunigung von Raytracing (RT-Kerne) und KI/Deep Learning (Tensor-Kerne). RT-Kerne beschleunigen die Traversierung der Bounding Volume Hierarchy (BVH) und die Ray-Triangle-Schnitttest-Berechnungen, während Tensor-Kerne hochdurchsätzige Matrix-Multiplikation und Faltungsoperationen bereitstellen.

Diese Hardwarekomponenten arbeiten zusammen, um GPUs in die Lage zu versetzen, eine sehr hohe Rechenleistung und Speicherbandbreite zu erreichen, was sie für parallele Workloads in Grafik, HPC und KI gut geeignet macht. Die hochgradig parallele Architektur und die spezialisierten Hardwareeinheiten moderner GPUs ermöglichen es ihnen, Leistungen zu erbringen, die um Größenordnungen höher sind als die von allgemeinen CPUs bei bestimmten Workloads.

Eine kurze Geschichte der GPUs

Die Geschichte der GPUs kann bis in die Anfänge der 3D-Grafik-Beschleunigung in den 1990er Jahren zurückverfolgt werden:

  • 1990er Jahre: Frühe 3D-Beschleuniger wie 3dfx Voodoo und NVIDIA RIVA TNT tauchten Mitte der 1990er Jahre auf, um die 3D-Grafikverarbeitung vom CPU abzulösen. Dies waren Geräte mit fester Funktion, die für einen bestimmten Satz von Grafik-APIs optimiert waren und keine Programmierbarkeit aufwiesen.

  • 1999: NVIDIA führte die GeForce 256 ein, die erste GPU, die Hardware-Transform und Lighting (T&L) zusätzlich zur Standard-3D-Rendering-Pipeline implementierte.Hier ist die deutsche Übersetzung der Markdown-Datei. Für den Code wurden nur die Kommentare übersetzt, der Code selbst blieb unverändert.

  • 2001: NVIDIA brachte die GeForce 3 auf den Markt, die programmierbare Vertex- und Pixel-Shader einführte und den Weg für realistischere und dynamischere visuelle Effekte ebnete. Dies markierte den Beginn des Übergangs von fest definierten zu programmierbaren Grafikpipelines.

  • 2006: Die Veröffentlichung von NVIDIA's GeForce 8800 GTX war ein wichtiger Wendepunkt, da es der erste GPU war, der das CUDA-Programmiermodell unterstützte. Dies ermöglichte Entwicklern, die GPU für allgemeine Berechnungen (GPGPU) über Grafikanwendungen hinaus zu nutzen. Er verfügte über 128 CUDA-Kerne und konnte über 500 GFLOPS Leistung erreichen.

  • 2008: Apple, AMD, Intel und NVIDIA gründeten die OpenCL-Arbeitsgruppe, um einen offenen Standard für die Parallelverarbeitung auf heterogenen Systemen zu entwickeln. OpenCL bot eine herstellerunabhängige Alternative zu CUDA, obwohl CUDA weiterhin die am meisten genutzte GPGPU-Plattform blieb.

  • 2010: NVIDIA führte die Fermi-Architektur ein, die bis zu 512 CUDA-Kerne, eine einheitliche L1/L2-Cache-Hierarchie, ECC-Speicherunterstützung und verbesserte Doppelpräzisions-Leistung bot. Dies machte GPUs für eine breitere Palette von HPC- und wissenschaftlichen Rechenanwendungen geeignet.

  • 2016: NVIDIA stellte die Pascal-Architektur mit dem Tesla P100 vor, der hochgeschwindigkeits-HBM2-Speicher, bis zu 3584 CUDA-Kerne und spezialisierte FP16-Kerne für Deep Learning bot. Der P100 konnte über 10 TFLOPS Leistung erbringen und festigte GPUs als Plattform der Wahl für KI-Training.

  • 2018: NVIDIA führte die Turing-Architektur ein, die RT-Kerne für Echtzeit-Raytracing und Tensor-Kerne für beschleunigtes KI-Inferencing einführte. Turing markierte einen wichtigen Meilenstein in der GPU-Architektur, da es die Fähigkeiten der GPU über Rasterisierung und GPGPU hinaus auf fortgeschrittene Rendering-Techniken und KI-Beschleunigung erweiterte.

Zusammenfassung

In den letzten zwei Jahrzehnten haben sich GPUs von fest definierten Grafikbeschleunigern zu hochgradig programmierbaren Geräten entwickelt, die für eine Vielzahl von Anwendungen jenseits der reinen Grafik geeignet sind.Leistungsfähige, energieeffiziente Recheneinheiten, die eine entscheidende Rolle in einer Vielzahl von Anwendungen von Spielen und Visualisierung bis hin zu Hochleistungsrechnen und Künstlicher Intelligenz spielen.

Zu den wichtigen architektonischen Innovationen, die diese Transformation ermöglicht haben, gehören:

  • Die Einführung von programmierbarer Schattierung mit Unterstützung für Verzweigungen und Schleifen
  • Vereinheitlichte Shader-Architekturen, die es ermöglichen, die gleichen Verarbeitungseinheiten für verschiedene Schattierungsaufgaben zu verwenden
  • Die Hinzufügung von Unterstützung für allgemeine Programmiermodelle wie CUDA und OpenCL
  • Steigende Energieeffizienz durch umfangreiche Nutzung von Multithreading, um Speicherlatenzen zu verbergen und die arithmetischen Einheiten auszulasten
  • Kontinuierliche Verbesserungen der Speicherbandbreite und die Einführung von Hochgeschwindigkeitsspeichertechnologien wie GDDR6 und HBM2
  • Die Einbindung von Festfunktionseinheiten für Raytracing und Tensor-Verarbeitung, um Rendering und KI-Workloads zu beschleunigen

Wenn wir in die Zukunft blicken, ist klar, dass Spezialisierung und heterogenes Rechnen weiterhin die Schlüsseltreiber für Leistungs- und Effizienzverbesserungen sein werden. GPUs sind gut positioniert, um an der Spitze dieser Trends zu bleiben, da sie auf energieeffizienter Parallelverarbeitung und der Fähigkeit, domänenspezifische Funktionalität bei gleichzeitiger Beibehaltung der allgemeinen Programmierbarkeit zu integrieren, aufbauen. Techniken wie Chiplet-basierte Designs und fortschrittliche Verpackungstechnologien werden es GPUs ermöglichen, ihre Leistung und Funktionalität im Laufe der Zeit weiter zu steigern.

Gleichzeitig wächst die Anwendbarkeit der GPU-Beschleunigung, da immer mehr Workloads in den Bereichen Wissenschaftsrechnen, Datenanalyse und maschinelles Lernen die Art von feingranularer Parallelität aufweisen, in der GPUs hervorragen. Mit ihrer Fähigkeit, diese und andere aufkommende Anwendungen zu beschleunigen, sind GPUs gut positioniert, um eine immer wichtigere Rolle bei der Weiterentwicklung des Rechnens zu spielen. Das Verständnis ihrer Architektur ist der Schlüssel, um ihr volles Potenzial auszuschöpfen.