NVIDIA je napovedala razvoj kompleta orodij CUDA Rust, ki omogoča jeziku Rust razvoj jeder, ki se izvajajo na grafičnem procesorju. Komplet orodij zagotavlja varnost pomnilnika med prevajanjem in preprečuje tekmovalne pogoje. Načrtuje se, da bo CUDA Rust naslednje leto razvit do ravni, primerne za produkcijske projekte, podobno kot kompleta orodij CUDA C++ in CUDA Python.
Orodja CUDA Rust podpirajo dva modela za razvoj vzporednih jeder: SIMT (Single Instruction, Multiple Threads) in Tile. Model SIMT omogoča nizkonivojsko definicijo ene same niti, zagon in upravljanje tisočih takšnih niti. Model Tile ponuja višjo raven abstrakcije, kjer so namesto eksplicitnega upravljanja posameznih niti definirani algoritmi za delovanje na podatkovnih blokih (ploščicah), prevajalnik Tile IR pa obravnava vse manipulacije niti, sinhronizacijo dostopa, upravljanje pomnilnika in distribucijo podatkov po tenzorskih jedrih.
Za razvoj v jeziku Rust z uporabo modela SIMT se razvija prevajalnik cuda-oxide, ki omogoča prevajanje kode v jeziku Rust z uporabo standardnega sistema tipov in modela lastništva Rust neposredno v navodila za izvajanje v virtualni stroj CUDA PTX (Parallel Thread Execution). Jedra grafičnih procesorjev so napisana v običajnem Rustu, vendar se izvajajo v okolju no_std in lahko uporabljajo samo funkcije iz knjižnice libcore in specializirane abstrakcije Rust, brez dostopa do standardne knjižnice Rust (libstd).
Jedra CUDA, napisana v Rustu, omogočajo uporabo zaščite tipov (safe), uporabo nevarnih blokov in dostop do nizkonivojskih strojnih navodil. Za zagotovitev varnosti je predlagan tip DisjointSlice, ki zagotavlja, da ima vsaka nit izključen dostop samo do svojih podatkov. Koda cuda-oxide je licencirana pod licenco Apache 2.0.
Za implementacijo modela Tail je predlagana knjižnica cutile-rs. Omogoča uporabo idiomatskega jezika Rust za ustvarjanje kode, ki se neposredno prevede v jedra CUDA. Cutile-rs uporablja Rustova stroga pravila lastništva in izposoje za kodo, ki se izvaja na grafičnem procesorju. Jedro je implementirano kot enonitni program, ki deluje na podatkovnem bloku, prevajalnik pa samodejno razdeli izračun na niti in zagotovi njihovo sinhronizacijo. Niti imajo deljen dostop do nespremenljivih tenzorjev, spremenljivi tenzorji pa so razdeljeni na disjunktne bloke, da se zagotovi varen dostop. Koda cutile-rs je distribuirana pod licenco Apache 2.0.
Vir: opennet.ru
