- Ein grundlegendes Verständnis von GPU-Computing ist für alle Softwareingenieure unerlässlich.
- Dieser Artikel konzentriert sich hauptsächlich auf Nvidia-GPUs und verwendet die Terminologie von Nvidia.
- GPUs sind für massive Parallelverarbeitung und hohen Durchsatz konzipiert, etwa bei Grafik, numerischen Berechnungen und Deep Learning.
Vergleich von CPU und GPU
- CPUs sind für die sequenzielle Ausführung von Anweisungen ausgelegt und enthalten verschiedene Funktionen zur Verringerung der Latenz bei der Befehlsausführung.
- GPUs sind für massive Parallelverarbeitung und hohen Durchsatz ausgelegt und weisen eine mittlere bis hohe Latenz bei der Befehlsausführung auf.
- GPUs können weitaus mehr Operationen als CPUs in deutlich kürzerer Zeit verarbeiten.
# GPU-Architektur
GPU-Compute-Architektur
- Eine GPU besteht aus einem Array von Streaming Multiprocessors (SMs).
- Jeder SM enthält mehrere Streaming-Prozessoren (Kerne oder Threads).
- Ein SM verfügt über eine begrenzte Menge an On-Chip-Speicher (Shared Memory oder Scratchpad), der von allen Kernen gemeinsam genutzt wird.
GPU-Speicherarchitektur
- Eine GPU besitzt mehrere Ebenen unterschiedlicher Speichertypen.
- Jeder SM verfügt über eine große Anzahl von Registern, die zwischen den Kernen gemeinsam genutzt werden.
- Der Constant Cache wird zum Zwischenspeichern konstanter Daten verwendet, die bei der Codeausführung benötigt werden.
- Shared Memory ist ein schneller programmierbarer On-Chip-SRAM mit geringer Latenz.
- Der L1-Cache speichert häufig genutzte Daten aus dem L2-Cache zwischen.
- Der L2-Cache wird von allen SMs gemeinsam genutzt und speichert häufig genutzte Daten aus dem globalen Speicher zwischen.
- Global Memory ist ein DRAM mit hoher Kapazität und hoher Bandbreite, der weit von den SMs entfernt liegt und daher eine hohe Latenz aufweist.
# Das Ausführungsmodell von GPUs verstehen
Kurze Einführung in CUDA-Kernel und Thread-Blöcke
- CUDA ist eine Programmierschnittstelle zum Schreiben von Programmen für Nvidia-GPUs.
- Ein Kernel ist eine Berechnung, die in einer Form ausgedrückt wird, die einer C/C++-Funktion ähnelt und parallel auf der GPU ausgeführt wird.
- Für die Ausführung eines Kernels wird eine Anzahl von Threads gestartet, die als Grid bezeichnet wird.
Schritte der Kernel-Ausführung auf der GPU
- Daten vom Host auf das Device kopieren
- Thread-Blöcke auf SMs planen
- Single Instruction, Multiple Threads (SIMT) und Warps
- Warp-Scheduling und Tolerierung von Latenz
- Ergebnisdaten vom Device zurück in den Host-Speicher kopieren
# Konzepte von Ressourcenaufteilung und Occupancy
- Die Auslastung der GPU-Ressourcen wird mit der Kennzahl „Occupancy“ gemessen; sie bezeichnet das Verhältnis der zugewiesenen Warps zur maximalen Anzahl an Warps, die ein SM unterstützen kann.
- Die Occupancy wird durch die Ausführungsressourcen eines SM, Register, Shared Memory, Thread-Block-Slots und Thread-Slots begrenzt.
- Es ist wichtig, durch Code-Optimierung eine hohe Occupancy aufrechtzuerhalten und gleichzeitig die Latenz zu minimieren.
# Zusammenfassung
- Eine GPU besteht aus mehreren SMs, und jeder SM besitzt mehrere Verarbeitungskerne.
- Global Memory befindet sich weit entfernt auf dem Chip und hat eine hohe Latenz.
- L1- und L2-Caches arbeiten ähnlich wie die L1/L2-Caches einer CPU.
- Jeder SM verfügt über Shared Memory, das zwischen den Kernen gemeinsam genutzt wird.
- Um einen Kernel auf der GPU auszuführen, wird ein Grid aus Threads gestartet.
- Die GPU weist SMs Blöcke zur Ausführung zu, und alle Threads laufen auf demselben SM.
- Die einem SM zugewiesenen Threads werden zusätzlich in Gruppen von 32 zusammengefasst, die als Warps bezeichnet werden.
- Die GPU führt eine dynamische Ressourcenaufteilung zwischen Threads durch, abhängig von den Anforderungen der Threads und den Grenzen des SM.
# Fazit
- GPUs werden heute breit eingesetzt, und ihre Architektur sowie ihr Ausführungsmodell unterscheiden sich grundlegend von CPUs.
- Dieser Artikel behandelt verschiedene Aspekte von GPUs und vermittelt Einblicke darin, warum GPUs so breit eingesetzt werden und wie sie funktionieren.
Meinung von GN⁺
- GPUs sind eine unverzichtbare Technologie für Deep Learning und komplexe numerische Berechnungen, und dieser Artikel hilft dabei, die grundlegende Architektur und das Ausführungsmodell von GPUs zu verstehen.
- Er enthält besonders wichtige Inhalte für Einsteiger unter Softwareingenieuren, die sich für Parallelverarbeitung und High-Performance Computing interessieren.
- Der Artikel vermittelt grundlegendes Wissen über GPU-Programmierung und ist eine interessante Lektüre, die die Neugier auf dieses Gebiet weckt.
1 Kommentare
Hacker-News-Kommentare