CUDA Rust — sada s dva puta za nativni razvoj GPU jezgri u Rustu
Public- 09 Sep, 2026

U rujnu 2026. NVIDIA je objavila da se okreće nativnom GPU programiranju u Rustu. CUDA C++ i CUDA Python zreli su industrijski alati, ali se sistemski sloj umjetne inteligencije — pogonski programi za inferenciju, infrastruktura za posluživanje, upravljački programi i runtime okruženja agenata — neprestano mijenja i sve se češće piše u Rustu, koji cijele klase pogrešaka hvata već u fazi kompilacije, ne žrtvujući pritom performanse. I sama NVIDIA dio je tog pomaka: upravljački program Nova Linux napisan je u Rustu, NVIDIA Dynamo izgrađena je na Rust jezgri, a NVTX ima Rust poveznice. Iznimka je ostala GPU jezgra, budući da su se jezgre mogle pokretati iz Rusta, ali ih se obično moralo pisati u nekom drugom jeziku. CUDA Rust zatvara tu prazninu, omogućujući pisanje jezgri u Rustu i njihovo nativno prevođenje u PTX, umjesto omatanja koda iz tuđih izvora.

Postoje dva načina korištenja Rusta, koji odgovaraju dvama putovima koje sam CUDA već ima. SIMT je poznati model iz CUDA C++ ili numba-cuda: opisujete što radi jedna nit i pokrećete ih na tisuće. Tile je noviji model programiranja, dostupan također u C++ i Pythonu, gdje izražavate što radi jedan tile podataka, a svime ostalim upravlja prevodilac Tile IR. NVIDIA-ine smjernice savjetuju da se najprije posegne za Tileom, jer prevodilac sam odlučuje kako se tileovi preslikavaju na svaku arhitekturu, a vaš izvorni kod ostaje slobodan od odluka specifičnih za arhitekturu; na SIMT se spuštate kada trebate tu razinu kontrole ili želite sami upravljati memorijom i nitima. Odabir jezika odvojen je od odabira modela, a međujezična interoperabilnost je planirana, tako da prelazak na Rust ne zaključava vrata drugim frontendovima.

SIMT put je cuda-oxide, prilagođeni codegen pozadinski modul za rustc. On presreće kompilaciju, provodi funkcije #[kernel] kroz Rust MIR, Pliron IR okvir i LLVM IR sve do PTX-a, a sve ostalo prosljeđuje standardnom pozadinskom modulu. GPU dijalekti nad Plironom pripadaju NVIDIA-i, a svaka transformacija ostaje u Rustu sve dok standardni LLVM pozadinski modul ne preuzme posao. Zahtjevi uključuju Linux, GPU s compute capability 8.0 ili višim, CUDA toolkit 12.x ili noviji, clang s njegovim libclang zaglavljima i fiksirani nightly lanac alata. Cargo podnaredba cargo-oxide upravlja izgradnjom, a cargo oxide doctor provjerava lanac alata. Projekt se generira kroz cargo oxide new, a prvi cargo oxide run gradi codegen pozadinski modul, tako da kasnija pokretanja koriste predmemoriju.
Tile put je cutile-rs, koji radi na razini više: računanja izvodite nad tileovima, a ne nad skalarima. Svaki tile blok izvodi tijelo jezgre jednom kao jedinstvenu logičku nit nad jednim pod-tenzorom podataka, a prevodilac odlučuje koliko stvarnih GPU niti ga podržava. Makro #[cutile::module] ugrađuje AST jezgre u binarnu datoteku domaćina i JIT-kompilira ga kroz CUDA Tile IR pri prvom pristupu jezgri. Zahtjevi su lakši nego kod SIMT puta: GPU s compute capability 8.0 ili višim, CUDA 13.3, stabilni Rust 1.89 ili noviji i Linux, bez nightly lanca alata i bez vlastitog LLVM-a. Budući da je cutile objavljen, jednostavno pokrenete cargo add cutile, bez ikakvog kloniranja.

Oba puta iznose isti argument o sigurnosti u pogledu memorije. U SIMT primjeru promjenjivi izlazni međuspremnik je DisjointSlice<f32>, namjenski izgrađen tip koji svakoj niti daje isključivi pristup vlastitom elementu, jer &mut [f32] ima pogrešan oblik kada bi svaka nit trebala isto promjenjivo posuđivanje. Pokretanje se provjerava, a ne uzima zdravo za gotovo: deklaracija #[launch_contract] provjerava se u odnosu na LaunchConfig1D i stvarne limite uređaja, a jezgre bez ugovora izlažu samo sirove unsafe metode pokretanja. Na strani Tilea particioniranje svakom tile bloku daje po jedan zapisivi pod-tenzor koji se ne može preklapati s drugim blokovima, a ta je isključivost upravo ono što &mut već jamči. Prosljeđivanje izlaznog međuspremnika jezgre kao jednog od njezinih vlastitih ulaza ne kompilira se, čime se hvataju utrke alijasiranja koje bi inače prošle testove, a zatim isplivale u produkciji.