NVIDIA annoncerede udviklingen af CUDA Rust-værktøjssættet, som gør det muligt for Rust-sproget at udvikle kerner, der kører på GPU'en. Værktøjssættet sikrer hukommelsessikkerhed under kompilering og forhindrer kapløbsbetingelser. Næste år er det planlagt, at CUDA Rust skal udvikles til et niveau, der er egnet til produktionsprojekter, svarende til CUDA C++ og CUDA Python-værktøjssættene.
CUDA Rust-værktøjskæden understøtter to modeller til udvikling af parallelle kerner: SIMT (Single Instruction, Multiple Threads) og Tile. SIMT-modellen muliggør lavniveaudefinition af en enkelt tråd, lancering og styring af tusindvis af sådanne tråde. Tile-modellen tilbyder et højere abstraktionsniveau, hvor algoritmer til drift på datablokke (tiles) i stedet for eksplicit at styre individuelle tråde defineres, og Tile IR-compileren håndterer al trådmanipulation, adgangssynkronisering, hukommelsesstyring og datadistribution på tværs af tensorkerner.
Til udvikling i Rust-sproget ved hjælp af SIMT-modellen udvikles cuda-oxide-compileren, som tillader kompilering af kode i Rust-sproget ved hjælp af standardtypesystemet og Rust-ejerskabsmodellen direkte til instruktioner til udførelse i virtuel maskine CUDA PTX (Parallel Thread Execution). GPU-kerner er skrevet i almindelig Rust, men kører i et no_std-miljø og kan kun bruge funktioner fra libcore-biblioteket og specialiserede Rust-abstraktioner uden adgang til standard-Rust-biblioteket (libstd).
CUDA-kerner skrevet i Rust tillader brug af typebeskyttelse (sikker), brug af usikre blokke og adgang til hardwareinstruktioner på lavt niveau. For at sikre sikkerheden foreslås typen DisjointSlice, der sikrer, at hver tråd kun har eksklusiv adgang til sine egne data. CUDA-oxide-koden er licenseret under Apache 2.0-licensen.
For at implementere Tail-modellen foreslås cutile-rs-biblioteket. Det muliggør brugen af det idiomatiske sprog Rust til at oprette kode, der kompilerer direkte til CUDA-kerner. Cutile-rs anvender Rusts strenge ejerskabs- og låneregler på kode, der kører på GPU'en. Kernen implementeres som et enkelttrådet program, der opererer på en datablok, og compileren opdeler automatisk beregningen i tråde og sikrer deres synkronisering. Trådene får delt adgang til uforanderlige tensorer, og muterbare tensorer er opdelt i adskilte blokke for at sikre sikker adgang. Cutile-rs-koden distribueres under Apache 2.0-licensen.
Kilde: opennet.ru
