NVIDIA heeft de ontwikkeling aangekondigd van de CUDA Rust-toolkit, waarmee kernels ontwikkeld kunnen worden die op de GPU draaien in de programmeertaal Rust. De toolkit garandeert geheugenveiligheid tijdens het compileren en voorkomt raceomstandigheden. Volgend jaar zal CUDA Rust naar verwachting verder ontwikkeld worden tot een niveau dat geschikt is voor productieprojecten, vergelijkbaar met de CUDA C++- en CUDA Python-toolkits.
De CUDA Rust-toolchain ondersteunt twee modellen voor het ontwikkelen van parallelle kernels: SIMT (Single Instruction, Multiple Threads) en Tile. Het SIMT-model maakt het mogelijk om een enkele thread op laag niveau te definiëren, en duizenden van dergelijke threads te starten en te beheren. Het Tile-model biedt een hoger abstractieniveau, waarbij in plaats van individuele threads expliciet te beheren, algoritmen voor bewerkingen op datablokken (tiles) worden gedefinieerd. De Tile IR-compiler verzorgt vervolgens alle threadmanipulatie, toegangssynchronisatie, geheugenbeheer en datadistributie over de tensorcores.
Voor ontwikkeling in de Rust-taal met behulp van het SIMT-model wordt de cuda-oxide-compiler ontwikkeld. Deze compiler maakt het mogelijk om code in de Rust-taal, met gebruikmaking van het standaard typesysteem en het Rust ownership-model, direct te compileren naar instructies voor uitvoering. virtuele machine CUDA PTX (Parallel Thread Execution). GPU-kernels zijn geschreven in reguliere Rust, maar draaien in een no_std-omgeving en kunnen alleen functies uit de libcore-bibliotheek en gespecialiseerde Rust-abstracties gebruiken, zonder toegang tot de standaard Rust-bibliotheek (libstd).
CUDA-kernels geschreven in Rust maken het gebruik van typebescherming (safe), het gebruik van onveilige blokken en toegang tot hardware-instructies op laag niveau mogelijk. Om de veiligheid te garanderen, wordt het type DisjointSlice voorgesteld, dat ervoor zorgt dat elke thread exclusieve toegang heeft tot alleen zijn eigen gegevens. De cuda-oxide-code is gelicentieerd onder de Apache 2.0-licentie.
Om het Tail-model te implementeren, wordt de cutile-rs-bibliotheek voorgesteld. Deze maakt het mogelijk om met de idiomatische taal van Rust code te schrijven die direct compileert naar CUDA-kernels. Cutile-rs past de strikte eigendoms- en leenregels van Rust toe op code die op de GPU draait. De kernel is geïmplementeerd als een single-threaded programma dat op een datablok werkt, en de compiler splitst de berekening automatisch op in threads en zorgt voor hun synchronisatie. De threads krijgen gedeelde toegang tot onveranderlijke tensors, en veranderlijke tensors worden opgedeeld in afzonderlijke blokken om veilige toegang te garanderen. De cutile-rs-code wordt gedistribueerd onder de Apache 2.0-licentie.
Bron: opennet.ru
