NVIDIA tillkännagav utvecklingen av CUDA Rust-verktygslådan, som gör det möjligt för Rust-språket att utveckla kärnor som körs på GPU:n. Verktygslådan säkerställer minnessäkerhet vid kompileringstid och förhindrar kapplöpningsförhållanden. Nästa år planeras CUDA Rust att utvecklas till en nivå som är lämplig för produktionsprojekt, liknande CUDA C++ och CUDA Python-verktygslådorna.
CUDA Rust-verktygskedjan stöder två modeller för att utveckla parallella kärnor: SIMT (Single Instruction, Multiple Threads) och Tile. SIMT-modellen möjliggör lågnivådefinition av en enda tråd, start och hantering av tusentals sådana trådar. Tile-modellen erbjuder en högre abstraktionsnivå, där istället för att explicit hantera enskilda trådar definieras algoritmer för att arbeta med datablock (tiles), och Tile IR-kompilatorn hanterar all trådmanipulation, åtkomstsynkronisering, minneshantering och datadistribution över tensorkärnor.
För utveckling i Rust-språket med SIMT-modellen utvecklas cuda-oxide-kompilatorn, som möjliggör kompilering av kod i Rust-språket, med hjälp av standardtypsystemet och Rust-ägarmodellen, direkt till instruktioner för exekvering i virtuell maskin CUDA PTX (Parallel Thread Execution). GPU-kärnor skrivs i vanlig Rust, men körs i en no_std-miljö och kan bara använda funktioner från libcore-biblioteket och specialiserade Rust-abstraktioner, utan åtkomst till standardbiblioteket för Rust (libstd).
CUDA-kärnor skrivna i Rust tillåter användning av typskydd (säkert), användning av osäkra block och åtkomst till lågnivåhårdvaruinstruktioner. För att garantera säkerheten föreslås typen DisjointSlice, vilket säkerställer att varje tråd har exklusiv åtkomst till endast sina egna data. CUDA-oxide-koden är licensierad under Apache 2.0-licensen.
För att implementera Tail-modellen föreslås biblioteket cutile-rs. Det möjliggör användning av det idiomatiska språket Rust för att skapa kod som kompileras direkt till CUDA-kärnor. Cutile-rs tillämpar Rusts strikta ägar- och låneregler på kod som körs på GPU:n. Kärnan implementeras som ett enkeltrådat program som arbetar på ett datablock, och kompilatorn delar automatiskt upp beräkningen i trådar och säkerställer deras synkronisering. Trådarna beviljas delad åtkomst till oföränderliga tensorer, och muterbara tensorer är partitionerade i disjunkta block för att säkerställa säker åtkomst. Cutile-rs-koden distribueras under Apache 2.0-licensen.
Källa: opennet.ru
