NVIDIA har annonceret udviklingen af værktøjet CUDA Rust, som giver mulighed for at bruge Rust-sproget til at udvikle kerner, der udføres på GPU-siden. Værktøjet sikrer, at hukommelsessikkerhed opretholdes på compileringstidspunktet og forhindrer tilstande med race conditions. I det kommende år planlægges CUDA Rust at blive gjort klar til udvikling af arbejdsmæssige projekter, ligesom værktøjerne CUDA C++ og CUDA Python.
CUDA Rust-værktøjet understøtter to modeller for udvikling af parallelt kørende kerner - SIMT (Single Instruction, Multiple Threads) og Tile. SIMT-modellen giver mulighed for på lavt niveau at definere logikken for en enkelt tråd, køre tusinder af sådanne tråde og styre dem. Tile-modellen tilbyder et højere abstraktionsniveau, hvor algoritmer for operationer på datasæt (tile) defineres i stedet for eksplicit at styre individuelle tråde, og alle manipulationer med tråde, synkronisering af adgang, hukommelseshåndtering og datasdistribution til tensor kerner håndteres af compileren Tile IR.
Til udvikling med Rust-sproget under SIMT-modellen udvikles compileren cuda-oxide, som muliggør kompilering af Rust-kode, der anvender det indbyggede typesystem og ejer-modellen i Rust, direkte til instruktioner til udførelse i virtuelle maskiner CUDA PTX (Parallel Thread Execution). Kerner til GPU'er skabes i almindelig Rust, men køres i et no_std-miljø og kan kun bruge funktioner fra libcore-biblioteket og specialiserede Rust-abstraktioner, uden adgang til Rust's standardbibliotek (libstd).
I CUDA-kerner skrevet i Rust tillades anvendelse af sikkerhedsbeskyttelse via typesystemet (safe), brug af unsafe blokke og adgang til lavniveaus hardwareinstruktioner. For at sikre sikkerhed foreslås typen DisjointSlice, der garanterer, at hver tråd får eksklusiv adgang til sine egne data. Koden i cuda-oxide distribueres under Apache 2.0-licensen.
Til anvendelse af Tail-modellen tilbydes biblioteket cutile-rs, som muliggør brugen af idiomatisk Rust-sprog til at skabe kode, der kan kompileres direkte til CUDA-kerner. Cutile-rs anvender de strenge ejer- og låne-regler, der foreslås i Rust, til kode, der kører på GPU'en. En kerne designes som et en-trådet program, der arbejder med en datablok, og kompilerer selv opdelingen af beregninger til tråde og sikrer deres synkronisering. Trådene får delt adgang til immutable tensorer, og for sikker adgang til mutable tensorer anvendes deres opdeling i ikke-overlappende blokke. Koden cutile-rs distribueres under Apache 2.0-licensen.
Kilde: opennet.ru
