Az NVIDIA bejelentette a CUDA Rust eszközkészlet fejlesztését, amely lehetővé teszi a Rust nyelv számára a GPU-n futó kernelek fejlesztését. Az eszközkészlet biztosítja a memória biztonságát fordítási időben, és megakadályozza a versenyhelyzeteket. A CUDA Rust fejlesztése a tervek szerint jövőre eléri az éles projektekhez alkalmas szintet, hasonlóan a CUDA C++ és a CUDA Python eszközkészletekhez.
A CUDA Rust eszköztár két modellt támogat a párhuzamos kernelek fejlesztéséhez: a SIMT-et (Single Instruction, Multiple Threads) és a Tile-t. A SIMT modell lehetővé teszi egyetlen szál alacsony szintű definícióját, több ezer ilyen szál indítását és kezelését. A Tile modell egy magasabb absztrakciós szintet kínál, ahol az egyes szálak explicit kezelése helyett az adatblokkokon (csempéken) működő algoritmusok vannak definiálva, és a Tile IR fordító kezeli az összes szálkezelést, a hozzáférés-szinkronizálást, a memóriakezelést és az adatok elosztását a tenzormagok között.
A SIMT modellt használó Rust nyelven történő fejlesztéshez a cuda-oxide fordítót fejlesztik, amely lehetővé teszi a Rust nyelvű kód fordítását a szabványos típusrendszer és a Rust tulajdonlási modell használatával, közvetlenül végrehajtási utasításokká. virtuális gép CUDA PTX (Párhuzamos szálvégrehajtás). A GPU kernelek normál Rustban íródnak, de no_std környezetben futnak, és csak a libcore könyvtár függvényeit és speciális Rust absztrakciókat használhatják, a standard Rust könyvtárhoz (libstd) való hozzáférés nélkül.
A Rust nyelven írt CUDA kernelek lehetővé teszik a típusvédelem (biztonságos) használatát, a nem biztonságos blokkok használatát és az alacsony szintű hardveres utasításokhoz való hozzáférést. A biztonság érdekében a DisjointSlice típust javasoljuk, amely biztosítja, hogy minden szál kizárólagos hozzáféréssel rendelkezzen csak a saját adataihoz. A cuda-oxide kód az Apache 2.0 licenc alatt áll.
A Tail modell implementálásához a cutile-rs könyvtárat javasoljuk. Ez lehetővé teszi a Rust idiomatikus nyelv használatát olyan kód létrehozásához, amely közvetlenül CUDA kernelekre fordul. A Cutile-rs a Rust szigorú tulajdonlási és kölcsönzési szabályait alkalmazza a GPU-n futó kódra. A kernel egyszálú programként van implementálva, amely egy adatblokkon működik, és a fordító automatikusan szálakra osztja a számítást, és biztosítja azok szinkronizációját. A szálak megosztott hozzáférést kapnak a megváltoztathatatlan tenzorokhoz, a módosítható tenzorokat pedig diszjunkt blokkokra particionálják a biztonságos hozzáférés biztosítása érdekében. A cutile-rs kód az Apache 2.0 licenc alatt kerül terjesztésre.
Forrás: opennet.ru
