Rust CUDA 專案,一個旨在使 Rust 成為使用 NVIDIA CUDA 工具包進行 GPU 計算的一級語言的雄心勃勃的計劃,在多年停滯後已經重新啟動。這一發展出現在 Rust 社群一直在尋求可靠的 GPU 程式設計解決方案之際,不同專案的結果參差不齊。
該專案旨在提供將 Rust 編譯為 PTX 程式碼的工具以及使用現有 CUDA 庫的庫。然而,社群討論揭示了在其不活躍期間出現的重大挑戰和競爭解決方案。
專案歷史和當前狀態
根據使用者評論,Rust CUDA 專案歷史坎坷。多年來,它一直處於使用者描述為不可用且無人維護的狀態,需要特定的、幾年前的 Rust 編譯器(rustc)和 CUDA 變體才能正常執行。最近的重啟公告標誌著專案復興的嘗試,儘管似乎還沒有與當前版本的 Rust 和 CUDA 相容的官方釋出版本。
這段停滯期在生態系統中創造了一個空白,其他專案試圖填補這一空白。該專案的結構相當廣泛,包括多個 crate,包括 rustc_codegen_nvvm(針對 NVVM IR 的 rustc 後端)、cuda_std(用於 GPU 端函式)、cudnn(用於深度神經網路)和 cust(用於 CPU 端 CUDA 功能)等。
來自 Cudarc 的競爭
在 Rust CUDA 專案不活躍期間,另一個名為 Cudarc 的庫在社群中獲得了顯著的關注。多位使用者報告在專業環境中成功使用 Cudarc,稱讚其與最新 Rust 和 CUDA 版本的相容性。
「總結,作為在多個專案中使用 Rust 進行 CUDA 開發的人:Cudarc 庫得到積極維護,執行良好。然而,它不允許共享主機和裝置資料結構;你將使用庫提供的函式將資料[反]序列化為位元組流。適用於任何(至少是過去幾年內的)CUDA 版本和 GPU。」
主要區別似乎是 Cudarc 需要在主機和裝置資料結構之間進行序列化,而 Rust CUDA 專案旨在允許主機和 GPU 之間共享型別。這種區別代表了即時可用性和更無縫程式設計體驗之間的根本權衡。
平臺獨立性問題
社群內的一個重要爭論集中在專案對 NVIDIA CUDA 的專注上。一些使用者認為,將 Rust GPU 程式設計與單一供應商的技術繫結會創造一個限制更廣泛採用不同硬體平臺的死衚衕。
CUDA 的支持者指出其優越的工具生態系統,包括 IDE 整合、圖形除錯和豐富的庫。他們認為,像 OpenCL、Vulkan 計算著色器和 SYCL 這樣的替代方案缺乏 CUDA 提供的多語言支援和開發者體驗。
其他人則提倡平臺獨立的方法,這種方法可以在 NVIDIA、AMD、Intel 和 Apple 硬體上工作,建議 Rust 應該針對一箇中間表示,然後可以編譯到各種 GPU 架構。這種方法將跨平臺相容性置於 CUDA 提供的專門最佳化之上。
Rust GPU 計算主要選項
-
Rust CUDA 專案
- 狀態:在沉寂多年後最近重啟
- 目標:允許主機和 GPU 之間共享資料結構
- 元件:rustc_codegen_nvvm、cuda_std、cudnn、cust、gpu_rand、optix
- 許可證:雙重許可,包括 Apache 2.0 和 MIT
-
Cudarc
- 狀態:積極維護中
- 相容性:適用於最新的 Rust 和 CUDA 版本
- 限制:需要在主機和裝置資料之間進行序列化
- GitHub:https://github.com/coreylowman/cudarc
-
其他相關專案
- rust-gpu:編譯器後端,用於將 Rust 編譯為著色器的 SPIR-V
- glassful (2016):Rust 的子集,可編譯為 GLSL
- inspirv-rust (2017):實驗性的 Rust MIR → SPIR-V 編譯器
- nvptx (2018):使用 LLVM PTX 後端
- accel (2020):使用 nvptx 機制的高階庫
- risl (2020):實驗性的 Rust → SPIR-V 編譯器
行業採用和未來前景
社群討論揭示了關於 NVIDIA 對 Rust 潛在興趣的有趣見解。一位使用者提到了與 CUDA 核心計算庫團隊的某人的對話,暗示在未來 5 年內,NVIDIA 可能會支援 Rust 作為程式設計 CUDA GPU 的語言。另一位使用者指出,NVIDIA 已經在其高吞吐量低延遲推理框架 Dynamo 中使用 Rust,儘管公共 API 是基於 Python 的。
為什麼 NVIDIA 沒有在 Rust 生態系統中投入更多資源的問題仍然懸而未決,有些人認為該公司可能在等待看到足夠的商業價值後才會投入資源。
隨著專案重啟,其維護者正在積極尋求貢獻者,承認前方有很多工作要做,而且他們都有日常工作。這次復興的成功可能取決於建立足夠的社群動力來克服之前使專案停滯的技術挑戰。
對於今天需要在 Rust 中使用 GPU 計算能力的開發者,社群共識似乎傾向於在實際應用中使用 Cudarc,同時關注 Rust CUDA 專案在實現其更雄心勃勃的主機-裝置無縫整合目標方面的進展。