Företaget NVIDIA har tillkÀnnagivit utvecklingen av CUDA Rust-verktyget, som möjliggör anvÀndning av sprÄket Rust för att utveckla kÀrnor som körs pÄ GPU-sidan. Verktyget sÀkerstÀller minnessÀkerhet vid kompilering och förhindrar uppkomsten av tÀvlingsförhÄllanden. Under nÀsta Är planerar de att ta CUDA Rust till en nivÄ som Àr lÀmplig för utveckling av arbetsprojekt, jÀmförbar med CUDA C++ och CUDA Python-verktygen.
CUDA Rust-verktyget stöder tvĂ„ utvecklingsmodeller för parallellt exekverande kĂ€rnor â SIMT (Single Instruction, Multiple Threads) och Tile. SIMT-modellen gör det möjligt att pĂ„ lĂ„g nivĂ„ definiera logiken för en enskild trĂ„d, köra tusentals sĂ„dana trĂ„dar och hantera dem. 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 datablokkar (tile), och alla manipulationer med trĂ„dar, Ă„tkomstdelning, minneshantering och distribution av data till tensor-kĂ€rnor sköts av kompilatorn Tile IR.
För utveckling i Rust med anvÀndning av SIMT-modellen utvecklas kompilatorn cuda-oxide, som möjliggör kompilering av Rust-kod som anvÀnder det inbyggda typesystemet och Rusts Àgarmodell direkt till instruktioner för körning i en virtuell maskin CUDA PTX (Parallel Thread Execution). KÀrnor för GPU:n skapas i vanlig Rust, men körs i en no_std-miljö och kan endast anvÀnda funktioner frÄn biblioteket libcore och specialiserade Rust-abstraktioner, utan tillgÄng till Rusts standardbibliotek (libstd).
I CUDA-kÀrnor pÄ Rust tillÄts anvÀndning av typ-skydd (safe), anvÀndning av osÀkra block (unsafe) och tillgÄng till lÄgnivÄ hÄrdvaruinstruktioner. För att sÀkerstÀlla sÀkerhet föreslÄs typen DisjointSlice, som garanterar att varje trÄd fÄr exklusiv Ätkomst till endast sina egna data. Koden för cuda-oxide distribueras under Apache 2.0-licensen.
För att tillÀmpa Tail-modellen erbjuds biblioteket cutile-rs, som möjliggör att anvÀnda det idiomatiska sprÄket Rust för att skapa kod som kompileras direkt till CUDA-kÀrnor. Cutile-rs tillÀmpar de strikta Àgar- och lÄneprinciperna som föreslÄs i Rust pÄ koden som körs pÄ GPU. KÀrnan utformas som ett trÄdlöst program som arbetar med en datablok, och kompilatorn delar automatiskt upp berÀkningarna i trÄdar och sÀkerstÀller deras synkronisering. TrÄdarna fÄr gemensam Ätkomst till oförÀnderliga tensorer, och för sÀker Ätkomst till förÀnderliga tensorer delas de upp i icke-överlappande block. Koden för cutile-rs distribueras under Apache 2.0-licensen.
KĂ€lla: opennet.ru
