Společnost Nvidia publikováno první vydání sady nástrojů CUDA-oxid, který umožňuje vytvářet paralelní jádra GPU v jazyce Rust CUDA SIMT (Jedna instrukce, více vláken). Projekt umožňuje kompilovat kód Rust pomocí standardního typového systému a model vlastnictví Rust, přímo v instrukcích pro spuštění ve virtuálním stroji CUDA PTX (nvidia.com) (Paralelní provádění vláken) bez použití zprostředkujících doménově specifických jazyků (DSL) a vazeb.
Kód sady nástrojů je napsán v Rustu a distribuovány pod licencí Apache 2.0. První vydání je prezentováno jako počáteční alfa verze.
Sada nástrojů obsahuje:
- Backend pro generování kódu pro kompilátor rustc, který umožňuje kompilovat funkce s "#[jádro]" do paralelních jader GPU v reprezentaci CUDA PTX. Kompilace používá standardní transformační řetězec založený na frameworku rustc. Pliron: Rust → MIR → Pliron IR → LLVM IR → PTX.
- Jednotný systém pro sestavování komponent běžících na hostitelském systému a na GPU, který se redukuje na provádění příkazů „cargo oxide build“ a „cargo oxide run“.
- Sada abstrakcí Rust, které lze použít v jádrech na straně GPU. K dispozici jsou například funkce pro indexování, využití sdílené paměti a bariér, atomické operace a synchronizaci skupin vláken. TMA (nvlabs.github.io) (Akcelerátor tenzorové paměti). Je možné volat vazby pro nízkoúrovňové instrukce specifické pro architekturu Blackwell (například rozšířené maticové operace).
- Vytvořte balíčky s hostitelskými běhovými komponentami CUDA, které umožňují správu paměti, spouštění jader na GPU a asynchronní interakci s funkcemi založenými na GPU.
- Soubor příkladů jádra demonstrujících funkce jako manipulace s vektory, násobení matic (GEMM), atomické operace, asynchronní provádění a integrace knihoven. MathDx, používání generik a uzávěrů, interakce s CUDA jádry v C++/CCCL.
Jádra GPU se vytvářejí v běžném Rustu (ne v dialektu), ale spouštějí se v daném prostředí. no_std a lze používat pouze funkce z knihovny libcore a dříve zmíněné specializované abstrakce Rust, bez přístupu ke standardní knihovně Rust (libstd). Mezi podporované typy patří primitivní typy (u8..u64, f32, f64, bool), struktury, výčty, n-tice, pole ([T; N]) a slices (&[T]), operátory match / if / if let, smyčky for a while, iterátory (.iter(), .enumerate()), uzávěry a generika. Nejsou podporovány typy String, Vec a Box, makra format!, panic! a println!, objekty Trait a funkce standardní knihovny implementované prostřednictvím volání operačního systému (práce se soubory, I/O a síťové operace).
K dispozici Tři úrovně zabezpečení jádra CUDA v Rustu: ochrana typového systému (bezpečné), použití nebezpečných bloků a přístup k nízkoúrovňovým hardwarovým instrukcím. Výkon implementace násobení matic založené na CUDA-oxidu (GEMM SoL) na GPU B200 dosahuje 868 bilionů operací za sekundu, což je 58 % výkonu optimalizované knihovny. cuBLAS.
Zdroj: linux.org.ru
