NVIDIA宣布正在開發CUDA Rust工具包,該工具包使Rust語言能夠開發在GPU上運行的核心。此工具包在編譯時確保記憶體安全,並防止競爭條件出現。明年,CUDA Rust計劃發展到與CUDA C++和CUDA Python工具包類似的水平,以適用於生產項目。
CUDA Rust 工具鏈支援兩種平行核心開發模型:SIMT(單指令多執行緒)和 Tile。 SIMT 模型允許對單一執行緒進行底層定義,並啟動和管理數千個這樣的執行緒。 Tile 模型提供更高層次的抽象,它無需明確管理單個線程,而是定義用於操作資料區塊(Tile)的演算法,Tile IR 編譯器負責處理所有線程操作、存取同步、記憶體管理以及跨張量核心的資料分發。
為了使用 SIMT 模型進行 Rust 語言開發,正在開發 cuda-oxide 編譯器,它允許使用標準類型系統和 Rust 所有權模型,將 Rust 程式碼直接編譯成可在 .NET 中執行的指令。 虛擬機 CUDA PTX(並行執行緒執行)。 GPU 核心是用普通的 Rust 編寫的,但在 no_std 環境中運行,只能使用 libcore 庫中的函數和專門的 Rust 抽象,而無法存取標準 Rust 庫 (libstd)。
用 Rust 編寫的 CUDA 核心允許使用類型保護(safe)、使用 unsafe 程式碼區塊以及存取底層硬體指令。為了確保安全性,我們提出了 DisjointSlice 類型,以確保每個執行緒只能獨佔存取自己的資料。 cuda-oxide 程式碼採用 Apache 2.0 授權。
為了實現 Tail 模型,我們提出了 cutile-rs 函式庫。該函式庫支援使用 Rust 慣用語言編寫可直接編譯為 CUDA 核心的程式碼。 cutile-rs 將 Rust 嚴格的所有權和借用規則應用於 GPU 上執行的程式碼。核心被實作為一個單線程程序,操作一個資料塊,編譯器會自動將計算拆分為多個線程並確保線程同步。執行緒共享對不可變張量的存取權限,而可變張量則被分割為不相交的資料區塊以確保安全存取。 cutile-rs 程式碼以 Apache 2.0 授權發布。
來源: opennet.ru
