NVIDIA je predstavila CUDA Rust za razvoj GPU kernel-a na jeziku Rust.

Podjetje NVIDIA je napovedalo razvoj orodij CUDA Rust, ki omogočajo uporabo jezika Rust za razvoj jeder, ki se izvajajo na GPU-ju. Orodje zagotavlja varnost dela s pomnilnikom v fazi kompilacije in preprečuje nastanek stanj dirke. V naslednjem letu načrtujejo, da bo CUDA Rust dosegla raven, primerno za razvoj delovnih projektov, podobno orodjem CUDA C++ in CUDA Python.

Orodje CUDA Rust podpira dva modela razvoja paralelno izvajajočih jeder — SIMT (Single Instruction, Multiple Threads) in Tile. Model SIMT omogoča nizko ravni določanje logike enega toka, zagon tisočih takih tokov in upravljanje z njimi. Model Tile ponuja višjo raven abstrakcije, kjer namesto eksplicitnega upravljanja s posameznimi tokovi opredelimo algoritme delovanja z bloki podatkov (tile), medtem ko prevajalnik Tile IR poskrbi za vse manipulacije s tokovi, sinhronizacijo dostopa, upravljanje pomnilnika in razporeditev 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, ki uporablja standardni sistem tipov in model lastništva Rust, neposredno v ukaze za izvajanje v virtualni napravi CUDA PTX (Parallel Thread Execution). Jedra za GPU so ustvarjena v običajnem Rustu, vendar se izvajajo v okolju no_std in lahko uporabljajo le funkcije iz knjižnice libcore in specializirane Rust-abstrakcije, brez dostopa do standardne knjižnice Rust (libstd).

V CUDA-jedrih na Rustu je dovoljeno uporabljati zaščito prek sistema tipov (safe), uporabo blokov unsafe in dostopanje do nizko ravninskih strojnih navodil. Za zagotavljanje varnosti je predlagan tip DisjointSlice, ki zagotavlja, da vsak tok prejme izključni dostop le do svojih podatkov. Koda cuda-oxide se distribuira pod licenco Apache 2.0.

Za uporabo modela Tail je na voljo knjižnica cutile-rs, ki omogoča uporabo idiomatskega jezika Rust za ustvarjanje kode, ki se neposredno prevaja v CUDA-jedra. Cutile-rs uporablja stroga pravila lastništva in izposojanja, predlagana v Rustu, za kodo, ki se izvaja na GPU. Jedro je zasnovano kot enotna nit, ki deluje z enoto podatkov, medtem ko prevajalnik sam razdeli izračune na niti in zagotavlja njihovo sinhronizacijo. Nitim je omogočen skupni dostop do nespremenljivih tenzorjev, za varen dostop do spremenljivih tenzorjev pa se uporablja njihovo deljenje na nepovezane bloke. Koda cutile-rs je na voljo pod licenco Apache 2.0.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster