Spoločnosť NVIDIA oznámila vývoj nástroja CUDA Rust, ktorý umožňuje používať jazyk Rust na vývoj jadier vykonávaných na strane GPU. Nástroj zabezpečuje bezpečnosť práce s pamäťou v čase kompilácie a zabraňuje vzniku podmienkových pretekov. V budúcom roku plánujú CUDA Rust uviesť na úroveň vhodnú na vývoj pracovných projektov, podobne ako nástroje CUDA C++ a CUDA Python.
Nástroj CUDA Rust podporuje dva modely vývoja paralelne vykonávaných jadier — SIMT (Single Instruction, Multiple Threads) a Tile. Model SIMT umožňuje na nízkej úrovni definovať logiku jedného vlákna, spúšťať tisíce takýchto vlákien a riadiť ich. Model Tile ponúka vyššiu úroveň abstrakcie, v ktorej sú namiesto explicitného riadenia jednotlivých vlákien definované algoritmy prácou s blokmi dát (tile), pričom všetky manipulácie s vláknami, synchronizácia prístupu, správa pamäte a rozdelenie dát medzi tensorové jadrá preberá kompilátor Tile IR.
Na vývoj v jazyku Rust s využitím modelu SIMT sa vyvíja kompilátor cuda-oxide, ktorý umožňuje kompilovať kód v jazyku Rust, využívajúci štandardný systém typov a model vlastníctva Rust, priamo na inštrukcie na vykonávanie v virtuálnom stroji CUDA PTX (Parallel Thread Execution). Jadrá pre GPU sa vytvárajú na bežnom Rust, ale vykonávajú sa v prostredí no_std a môžu využívať iba funkcie z knižnice libcore a špecializované Rust-abstrakcie, bez prístupu k štandardnej knižnici Rust (libstd).
V CUDA-jadrach na Rust je povolené použitie ochrany prostredníctvom systému typov (safe), používanie blokov unsafe a prístup k nízkoúrovňovým hardvérovým inštrukciám. Na zabezpečenie bezpečnosti sa navrhuje typ DisjointSlice, ktorý zaručuje, že každé vlákno dostane výhradný prístup iba k svojim dátam. Kód cuda-oxide sa distribuuje pod licenciou Apache 2.0.
Na použitie modelu Tail sa navrhuje knižnica cutile-rs, ktorá umožňuje využívať idiomatický jazyk Rust na vytváranie kódu kompilovaného priamo do CUDA-jádier. Cutile-rs uplatňuje v Ruste navrhnuté prísne pravidlá vlastníctva a požičania na kód vykonávaný na GPU. Jadro je formulované ako jednovláknový program pracujúci s blokom údajov, pričom kompilátor sám rozdeľuje výpočty na vlákna a zabezpečuje ich synchronizáciu. Vláknam sa poskytuje zdieľaný prístup k nemenným tenzorom, a pre bezpečný prístup k meniteľným tenzorom sa používajú ich segmentácia na neprekrývajúce sa bloky. Kód cutile-rs je šírený pod licenciou Apache 2.0.
Zdroj: opennet.ru
