Gerade hat NVIDIA CUDA die größte Aktualisierung in seiner Geschichte erhalten!
Vor einigen Stunden wurde offiziell die NVIDIA CUDA Toolkit 13.1 veröffentlicht. Der Hersteller NVIDIA hat erklärt: „Dies ist die größte Aktualisierung in 20 Jahren.“
NVIDIA Social Media
Diese größte und umfassendste Aktualisierung seit der Entstehung der CUDA-Plattform im Jahr 2006 beinhaltet Folgendes:
Die Veröffentlichung von NVIDIA CUDA Tile, ein von NVIDIA entwickeltes, auf Tiles basierendes Programmiermodell, das es ermöglicht, die Spezialhardware, einschließlich Tensor Cores, zu abstrahieren.
Die Runtime API-Exposition von Green Contexts (d.h. die sogenannte Green Context, ein leichtgewichtiger, parallel planbarer Kontext oder Ausführungsumgebung, wird externen Aufrufern zur Verfügung gestellt.)
Doppel- und einfache Genauigkeitssimulation in NVIDIA cuBLAS.
Ein komplett neu geschriebener CUDA-Programmierleitfaden, speziell für CUDA-Einsteiger und fortgeschrittene Programmierer entwickelt.
Im Folgenden werfen wir einen genaueren Blick darauf.
CUDA Tile
CUDA Tile ist die zentralste Aktualisierung der NVIDIA CUDA Toolkit 13.1. Es ist ein auf Tiles basierendes Programmiermodell, das es ermöglicht, Algorithmen auf einer höheren Ebene zu schreiben und die Details der Spezialhardware (z.B. Tensor Cores) zu abstrahieren.
NVIDIA Social Media
Interpretation der Kernkonzepte von CUDA Tile
Der NVIDIA-Blog erklärt: Mit CUDA Tile können Entwickler GPU-Kernfunktionen auf einer höheren Ebene als SIMT (Single Instruction, Multiple Threads) schreiben.
Bei der gegenwärtigen SIMT-Programmierung geben Entwickler in der Regel Kernfunktionen an, indem sie die Daten aufteilen und den Ausführungsweg jedes Threads definieren.
Mit CUDA Tile können Entwickler die Abstraktionsebene ihres Codes erhöhen und direkt Datenblöcke namens „Tile“ angeben. Sie müssen nur die mathematischen Operationen angeben, die auf diesen Tiles ausgeführt werden sollen. Der Compiler und die Laufzeitumgebung entscheiden dann automatisch, wie die Arbeitslast am besten auf die einzelnen Threads verteilt wird.
Dieses Tile-Modell versteckt die unteren Details der Ansteuerung von Spezialhardware wie Tensor Core und das Tile-Code wird zukunftsfähig für kommende GPU-Architekturen sein.
CUDA 13.1 enthält zwei Komponenten für die Tile-Programmierung:
CUDA Tile IR: Eine neue virtuelle Befehlssatzarchitektur (ISA) für die Programmierung von NVIDIA GPUs.
cuTile Python: Eine neue domänenspezifische Sprache (DSL) zum Schreiben von auf Arrays und Tiles basierenden Kernfunktionen in Python.
Untere Details
Der kompilierte Tile-Pfad kann in den gesamten Softwarestack integriert werden und entspricht dem SIMT-Pfad.
Dies ist die erste Version dieser Software, und es gelten die folgenden Hinweise:
CUDA Tile wird nur für Produkte der NVIDIA Blackwell-Serie (Rechenleistung 10.x und 12.x) unterstützt. Künftige CUDA-Versionen werden die Unterstützung für weitere Architekturen erweitern.
Derzeit liegt der Fokus der Entwicklung auf der Tile-Programmierung für KI-Algorithmen. NVIDIA hat angekündigt, dass in kommenden CUDA-Versionen weitere Funktionen hinzugefügt und die Leistung verbessert werden wird.
NVIDIA plant, in einer kommenden CUDA-Version eine C++-Implementierung einzuführen.
Warum sollte man für GPUs die Tile-Programmierung einführen?
CUDA bietet Entwicklern die Single Instruction, Multiple Threads (SIMT)-Hardware und das dazugehörige Programmiermodell. Dieses Modell erfordert (und erlaubt es auch), dass Entwickler die Ausführung ihres Codes mit maximaler Flexibilität und Präzision auf feiner Ebene steuern können. Die Schreibung von leistungsstarkem Code erfordert jedoch oft einen großen Aufwand, insbesondere wenn man verschiedene GPU-Architekturen unterstützen muss.
Obwohl es viele Bibliotheken gibt (z.B. NVIDIA CUDA-X und NVIDIA CUTLASS), die Entwicklern helfen sollen, die Leistung auszuschöpfen, führt CUDA Tile eine neue Art der GPU-Programmierung auf einer höheren Ebene als SIMT ein.
Mit der Entwicklung der Rechenlasten, insbesondere im Bereich der KI, sind Tensoren zu einem Grunddatentyp geworden. NVIDIA hat spezielle Hardware für die Verarbeitung von Tensoren entwickelt, wie z.B. die NVIDIA Tensor Core (TC) und die NVIDIA Tensor Memory Accelerator (TMA), die jetzt ein fester Bestandteil jeder neuen GPU-Architektur sind.
Je komplexer die Hardware wird, desto mehr braucht man Software, um diese Fähigkeiten zu nutzen. CUDA Tile abstrahiert die Tensor Core und das dazugehörige Programmiermodell, sodass der mit CUDA Tile geschriebene Code mit der aktuellen und zukünftigen Tensor Core-Architektur kompatibel ist.
Das auf Tiles basierende Programmierparadigma erlaubt es Entwicklern, Algorithmen zu schreiben, indem sie Datenblöcke (d.h. Tiles) angeben und dann die auf diesen Tiles auszuführenden Berechnungen definieren. Entwickler müssen nicht auf Elementebene die Ausführungsdetails des Algorithmus festlegen: Der Compiler und die Laufzeitumgebung übernehmen diese Aufgabe.
Die folgende Abbildung zeigt den konzeptionellen Unterschied zwischen dem mit CUDA Tile eingeführten Tile-Modell und dem CUDA SIMT-Modell.
Konzeptioneller Unterschied zwischen Tile-Modell und CUDA SIMT-Modell
Das Tile-Modell (links) teilt die Daten in mehrere Blöcke auf, und der Compiler ordnet diese Blöcke den Threads zu. Das Single Instruction, Multiple Threads (SIMT)-Modell (rechts) ordnet die Daten gleichzeitig Blöcken und Threads zu.
Dieses Programmierparadigma ist in Sprachen wie Python weit verbreitet, in denen Bibliotheken wie NumPy es Entwicklern ermöglichen, Datentypen wie Matrizen anzugeben und dann mit einfachem Code Batch-Operationen auszuführen.
CUDA-Software-Aktualisierung
Im Folgenden sind weitere wichtige Softwareverbesserungen in dieser CUDA-Version aufgeführt:
Laufzeitunterstützung für Green Contexts
Green Contexts in CUDA sind eine Art von leichtgewichtigen Kontexten, die als Alternative zu den herkömmlichen CUDA-Kontexten dienen können und Entwicklern eine feinere Steuerung der GPU-Ressourcen ermöglichen, indem sie den GPU-Speicher und die Ressourcen aufteilen können.
Seit CUDA 12.4 sind sie in der Treiber-API verfügbar; ab dieser Version sind Green Contexts auch in der Laufzeit-API offiziell verfügbar.
Mit Green Contexts können Benutzer unabhängige Partitionen der GPU-Ressourcen definieren und verwalten, hauptsächlich die Streaming Multiprocessors (SM). Sie können eine bestimmte Anzahl von SMs einem bestimmten Green Context zuweisen und dann CUDA-Kernel in den von diesem Context verwalteten Ressourcen starten und Streams verwalten, die nur in diesem Context laufen.
Ein typischer Anwendungsfall ist: Wenn Ihr Programm Teile hat, die sehr empfindlich auf Latenzzeiten reagieren und vor allen anderen GPU-Aufgaben priorisiert werden müssen. Indem Sie für diesen Code einen eigenen Green Context erstellen und SM-Ressourcen zuweisen, während Sie die restlichen SMs einem anderen Green Context zuweisen, der andere Aufgaben bearbeitet, können Sie sicherstellen, dass immer genügend SMs für die Hochprioritätsberechnungen zur Verfügung stehen.
CUDA 13.1 führt auch eine noch anpassbarere split()-API ein. Entwickler können mit dieser Schnittstelle SM-Partitionen erstellen, die zuvor mehrere API-Aufrufe erforderten, und die Arbeitswarteschlangen konfigurieren, um falsche Abhängigkeiten zwischen verschiedenen Green Contexts zu reduzieren, wenn Aufgaben übermittelt werden.
Weitere Informationen zu diesen Funktionen und zu Green Contexts finden Sie im CUDA-Programmierleitfaden.
Link zum CUDA-Programmierleitfaden: https://docs.nvidia.com/cuda/cuda-programming-guide/04-special-topics/green-contexts.html
Aktualisierung des CUDA Multi-Process Service (MPS)
CUDA 13.1 bringt mehrere neue Funktionen und Verbesserungen für den Multi-Process Service. Die vollständigen Informationen zu diesen neuen Funktionen finden Sie in der MPS-Dokumentation. Hier sind einige Highlights:
Partitionierung mit Optimierung der Speicherlokalität
Die Partitionierung mit Optimierung der Speicherlokalität (Memory locality optimization partition, MLOPart) ist eine Funktion, die auf NVIDIA Blackwell-Serien-GPUs (Rechenleistung 10.0 und 10.3, Architekturversionsnummern) und neueren GPUs verfügbar ist.
Diese Funktion ermöglicht es Benutzern, CUDA-Geräte zu erstellen, die speziell für die Optimierung der Speicherlokalität ausgelegt sind. MLOPart-Geräte werden von demselben physischen GPU abgeleitet, erscheinen jedoch als mehrere unabhängige Geräte, von denen jedes weniger Rechenressourcen und weniger verfügbaren Speicher hat.
Auf GPUs mit Rechenleistung 10.0 und 10.3 enthält jedes GPU zwei Partitionen.
Wenn Sie MLOPart auf einem GPU aktivieren, erscheint jede Partition als eigenständiges CUDA-Gerät mit eigenen Rechen- und Speicherressourcen.
Derzeit wird MLOPart nur für die NVIDIA B200- und NVIDIA B300-Serien unterstützt. In kommenden CUDA-Versionen wird die Unterstützung für die NVIDIA GB200- und NVIDIA GB300-Serien hinzugefügt werden.
Statische Partitionierung der Streaming Multiprocessors (SM)
Als Alternative zur bestehenden dynamischen Ressourcenbereitstellung im MPS ist die statische Partitionierung der Streaming Multiprocessors (SM) eine Funktion für NVIDIA Ampere-Architekturen (Rechenleistung 8.0) und neuere GPUs, die MPS-Clients eine Möglichkeit bietet, exklusive SM-Partitionen zu erstellen.
Dieser Modus wird aktiviert, indem der MPS-Steuerdaemon mit der Option -S oder --static-partitioning gestartet wird. Sein Hauptzweck ist es, eine deterministische Ressourcenzuweisung bereitzustellen und die Isolation zwischen MPS-Clients zu verbessern. Die Basis-Einheit der Partitionierung ist ein „Chunk“ (Block), dessen Größe je nach GPU-Architektur variiert – beispielsweise enthält ein Chunk auf unabhängigen GPUs ab Hopper (Rechenleistung 9.0) 8 SMs.
Doppel- und einfache Genauigkeitssimulation in cuBLAS
Obwohl dies streng genommen keine Aktualisierung von CUDA 13.1 ist, hat die Aktualisierung von cuBLAS in der NVIDIA CUDA Toolkit 13.0 neue APIs und Implementierungen eingeführt, um die Leistung der Matrixmultiplikation mit doppelter Genauigkeit (FP64) zu verbessern.
Dies wird erreicht, indem auf den Tensor Cores von GPU-Architekturen wie der NVIDIA GB200 NVL72 und der NVIDIA RTX PRO 6000 Blackwell Server Edition eine Gleitkomma-Simulation (FP) durchgeführt wird.
Entwicklertools
Entwicklertools sind ein wichtiger Bestandteil der CUDA-Plattform. Diese Veröffentlichung bringt mehrere Innovationen und Funktionsverbesserungen, darunter:
Leistungsanalyse-Tool für CUDA Tile-Kernfunktionen
Eine neue Spalte „Result Type“ (Ergebnistyp) auf der Zusammenfassungsseite, um Tile-Kernfunktionen von SIMT-Kernfunktionen zu unterscheiden.
Ein neuer Abschnitt „Tile Statistics“ (Tile-Statistiken) auf der Detailseite, der die Tile-Dimensionen und die Auslastung wichtiger Pipelines zusammenfasst.
Unterstützung auf der Quellcode-Seite, um Metriken auf den Quellcode von cuTile-Kernfunktionen auf höherer Ebene abzubilden.
Quellcode-Seite
Nsight Compute-Analyse, die insbesondere den Abschnitt „Tile Statistics“ in der Analyseausgabe zeigt
Diese Veröffentlichung von Nsight Compute unterstützt auch die Analyse von CUDA-Graph-Knoten in Geräte-starter Graphs und verbessert die Navigation auf der Quellcode-Seite, indem klickbare Links für vom Compiler und vom Benutzer generierte Labels bereitgestellt werden.
Patchen zur Kompilierzeit
Die NVIDIA Compute Sanitizer 2025.4 unterstützt nun das Patchen zur Kompilierzeit für den NVIDIA CUDA-Compiler (NVCC) über die Compileroption -fdevice-sanitize=memcheck. Dieses Patchen verbessert die Erkennung von Speicherfehlern und erhöht die Leistung des Compute Sanitizer.
Das Instrumentieren zur Kompilierzeit integriert die Fehlersuche direkt in den NVCC, was eine schnellere Ausführung ermöglicht und durch eine erweiterte Basis- und Bereichsanalyse (base-and-bounds analysis) auch verstecktere Speicherprobleme (z.B. unzulässiger