Tvrtka NVIDIA najavila je razvoj alata CUDA Rust, koji omogućuje korištenje jezika Rust za razvoj jezgri izvršavanih na strani GPU-a. Alat osigurava sigurnost u radu s memorijom tijekom faze kompilacije i sprječava pojavu stanja utrke. Sljedeće godine planiraju dovesti CUDA Rust do razine koja je pogodna za razvoj radnih projekata, sličnih alatima CUDA C++ i CUDA Python.
Alat CUDA Rust podržava dva modela razvoja paralelno izvršavanih jezgri — SIMT (Single Instruction, Multiple Threads) i Tile. Model SIMT omogućuje na niskoj razini određivanje logike jednog toka, pokretanje tisuća takvih tokova i upravljanje njima. Model Tile nudi višu razinu apstrakcije, gdje se umjesto eksplicitnog upravljanja pojedinačnim tokovima definiraju algoritmi djelovanja s blokovima podataka (tile), a sve manipulacije s tokovima, sinkronizaciju pristupa, upravljanje memorijom i raspodjelu podataka po tenzorskim jezgama preuzima kompajler Tile IR.
Za razvoj na jeziku Rust s korištenjem modela SIMT, razvija se kompajler cuda-oxide, koji omogućuje kompiliranje koda na jeziku Rust, koji koristi standardni sustav tipova i model vlasništva Rust, izravno u instrukcije za izvršavanje u virtualnoj mašini CUDA PTX (Parallel Thread Execution). Jezgre za GPU se kreiraju na običnom Rust-u, ali se izvršavaju u okruženju no_std i mogu koristiti samo funkcije iz knjižnice libcore i specijalizirane Rust-apstrakcije, bez pristupa standardnoj knjižnici Rust (libstd).
U CUDA-jesgrenama na Rustu dopuštena je primjena zaštite kroz sustav tipova (safe), korištenje blokova unsafe i pristup niskonivonim hardverskim instrukcijama. Za osiguranje sigurnosti predložen je tip DisjointSlice, koji jamči da svaki tok dobiva ekskluzivni pristup samo svojim podacima. Kod cuda-oxide distribuira se pod licencom Apache 2.0.
Za primjenu Tail modela, predložena je biblioteka cutile-rs koja omogućava korištenje idiomatskog jezika Rust za kreiranje koda koji se izravno prevodi u CUDA jezgre. Cutile-rs primjenjuje stroga pravila vlasništva i posudbe predložena u Rust-u za kod koji se izvršava na GPU-u. Jezgra se oblikuje kao jednonitna programska jedinica koja obrađuje blok podataka, a sam kompajler dijeli izračune na niti i osigurava njihovu sinhronizaciju. Nitima se omogućava zajednički pristup nepromjenjivim tenzorima, dok se za siguran pristup promjenjivim tenzorima koristi njihovo dijeljenje na nepodudarne blokove. Kod cutile-rs distribuira se pod licencom Apache 2.0.
Izvor: opennet.ru
