NVIDIA stellte CUDA Rust für die Entwicklung von GPU-Kernels in Rust vor

Das Unternehmen NVIDIA hat die Weiterentwicklung des Toolkits CUDA Rust angekündigt, das die Verwendung der Sprache Rust für die Entwicklung von Kernen ermöglicht, die auf der GPU-Seite ausgeführt werden. Das Toolkit sorgt bereits beim Kompilieren für Speichersicherheit und verhindert das Auftreten von Race Conditions. Im kommenden Jahr soll CUDA Rust auf ein Niveau gebracht werden, das sich für die Entwicklung produktiver Projekte eignet – vergleichbar mit CUDA C++ und CUDA Python.

Das CUDA Rust-Toolkit unterstützt zwei Modelle für die Entwicklung paralleler ausgeführter Kerne – SIMT (Single Instruction, Multiple Threads) und Tile. Das SIMT-Modell ermöglicht es, die Logik eines einzelnen Threads auf niedriger Ebene zu definieren, Tausende solcher Threads zu starten und zu verwalten. Das Tile-Modell bietet eine höhere Abstraktionsebene, bei der anstelle der expliziten Steuerung einzelner Threads Algorithmen für die Verarbeitung von Datenblöcken (Tiles) definiert werden. Alle Operationen mit Threads, die Synchronisation des Zugriffs, das Speichermanagement und die Verteilung von Daten auf die Tensor-Kerne übernimmt der Tile IR-Compiler.

Für die Entwicklung in Rust auf Basis des SIMT-Modells wird der Compiler cuda-oxide weiterentwickelt, mit dem sich Rust-Code unter Verwendung des nativen Typsystems und des Ownership-Modells von Rust direkt in Anweisungen zur Ausführung in virtuellen Maschine CUDA PTX (Parallel Thread Execution) kompilieren lässt. GPU-Kerne werden in gewöhnlichem Rust erstellt, laufen jedoch in einer no_std-Umgebung und können nur Funktionen aus der Bibliothek libcore sowie spezielle Rust-Abstraktionen verwenden, ohne Zugriff auf die Standardbibliothek von Rust (libstd).

In CUDA-Kernen auf Rust ist sowohl die Verwendung von Schutzmechanismen über das Typsystem (safe) als auch der Einsatz von unsafe-Blöcken und der Zugriff auf Low-Level-Hardwareanweisungen zulässig. Für die Sicherheit wird der Typ DisjointSlice vorgeschlagen, der garantiert, dass jeder Thread exklusiven Zugriff nur auf seine eigenen Daten erhält. Der Code von cuda-oxide wird unter der Lizenz Apache 2.0 veröffentlicht.

Für den Einsatz des Tail-Modells wird die Bibliothek cutile-rs vorgeschlagen, die es ermöglicht, die idiomatische Sprache Rust zur Erstellung von Code zu verwenden, der direkt in CUDA-Kernel kompiliert wird. Cutile-rs wendet die in Rust vorgesehenen strengen Regeln für Ownership und Borrowing auf Code an, der auf der GPU ausgeführt wird. Der Kernel wird als Single-Thread-Programm gestaltet, das mit einem Datenblock arbeitet, während der Compiler die Berechnungen selbst in Threads aufteilt und deren Synchronisierung sicherstellt. Den Threads wird gemeinsamer Zugriff auf unveränderliche Tensoren gewährt, und für den sicheren Zugriff auf veränderliche Tensoren wird deren Aufteilung in nicht überlappende Blöcke verwendet. Der Code von cutile-rs wird unter der Apache-2.0-Lizenz veröffentlicht.

Quelle: opennet.ru

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster