NVIDIA ilmoitti kehittäneensä CUDA Rust -työkalupakin, jonka avulla Rust-kielellä voidaan kehittää näytönohjaimella toimivia ytimiä. Työkalupakki varmistaa muistin turvallisuuden käännösaikana ja estää kilpailutilanteet. Ensi vuonna CUDA Rustia on tarkoitus kehittää tuotantoprojekteihin soveltuvalle tasolle, samalla tavalla kuin CUDA C++- ja CUDA Python -työkalupakkeja.
CUDA Rust -työkaluketju tukee kahta mallia rinnakkaisten ytimien kehittämiseen: SIMT:ää (Single Instruction, Multiple Threads) ja Tile-mallia. SIMT-malli mahdollistaa yksittäisen säikeen matalan tason määrittelyn sekä tuhansien tällaisten säikeiden käynnistämisen ja hallinnan. Tile-malli tarjoaa korkeamman abstraktiotason, jossa yksittäisten säikeiden eksplisiittisen hallinnan sijaan määritellään algoritmit datalohkojen (laattojen) käsittelemiseksi ja Tile IR -kääntäjä hoitaa kaiken säikeiden käsittelyn, käyttöoikeuksien synkronoinnin, muistin hallinnan ja datan jakelun tensoriytimien välillä.
Rust-kielellä SIMT-mallia käyttäen tapahtuvaa kehitystä varten kehitetään cuda-oxide-kääntäjää, jonka avulla Rust-kielinen koodi voidaan kääntää suoraan suoritettavaksi ohjeiksi standardityyppijärjestelmää ja Rust-omistusmallia käyttäen. virtuaalikone CUDA PTX (Parallel Thread Execution). GPU-ytimet kirjoitetaan tavallisella Rustilla, mutta ne toimivat no_std-ympäristössä ja voivat käyttää vain libcore-kirjaston funktioita ja erikoistuneita Rust-abstraktioita ilman pääsyä Rustin vakiokirjastoon (libstd).
Rust-kielellä kirjoitetut CUDA-ytimet sallivat tyyppisuojauksen (safe), epäluotettavien lohkojen käytön ja pääsyn matalan tason laitteisto-ohjeisiin. Turvallisuuden varmistamiseksi ehdotetaan DisjointSlice-tyyppiä, joka varmistaa, että jokaisella säikeellä on yksinomainen pääsy vain omiin tietoihinsa. Cuda-oxide-koodi on lisensoitu Apache 2.0 -lisenssillä.
Tail-mallin toteuttamiseksi ehdotetaan cutile-rs-kirjastoa. Se mahdollistaa Rust-idiomaattisen ohjelmointikielen käytön koodin luomiseen, joka kääntyy suoraan CUDA-ytimiin. Cutile-rs soveltaa Rustin tiukkoja omistus- ja lainaussääntöjä GPU:lla suoritettavaan koodiin. Ydin on toteutettu yksisäikeisenä ohjelmana, joka käsittelee datalohkoa, ja kääntäjä jakaa laskennan automaattisesti säikeisiin ja varmistaa niiden synkronoinnin. Säikeille myönnetään jaettu pääsy muuttumattomiin tensoreihin, ja muuttuvat tensorit jaetaan erillisiin lohkoihin turvallisen käytön varmistamiseksi. Cutile-rs-koodi jaetaan Apache 2.0 -lisenssillä.
Lähde: opennet.ru
