NVIDIA 正把 Rust 從「呼叫 CUDA 的主機端語言」,推進到能直接撰寫 GPU 核心的第一級工具。這次公布的並非單一編譯器,而是兩條互補路線:保留執行緒控制權的 SIMT,以及由編譯器安排執行緒與資料配置的 Tile。官方同時坦言,兩個專案仍處早期階段,不能把這項宣布解讀為 CUDA C++ 已有成熟替代品。原始資料見 NVIDIA 技術部落格:https://developer.nvidia.com/blog/introducing-cuda-rust-two-tracks-for-writing-gpu-kernels/
被補上的最後一段 Rust GPU 鏈條
來源事實:NVIDIA 指出,Rust 已進入 AI 推論引擎、服務基礎設施與驅動程式,但過去即使主機端以 Rust 管理記憶體、排程工作,實際在 GPU 上執行的 kernel 往往仍須改用 CUDA C++ 等語言。新的 CUDA Rust 路徑讓 kernel 能由 Rust 編譯至 PTX,減少主機端與裝置端分屬不同語言、型別系統和建置流程的斷裂。
作者觀點:真正重要的不是「Rust 語法也能跑 GPU」,而是所有權資訊能否跨越非同步的 kernel launch 邊界。GPU 工作提交後,CPU 可能繼續執行;若緩衝區仍被主機端改寫,單靠一般函式簽章不足以證明安全。這也是此次設計比傳統語言綁定更值得注意之處。
兩條路線,交換的是控制權
SIMT 路線的 cuda-oxide 延續 CUDA 程式設計者熟悉的思維:描述單一執行緒做什麼,再啟動大量執行緒。它以自訂 rustc codegen backend 攔截標記為 kernel 的函式,經 Rust MIR、Pliron、LLVM IR 編譯為 PTX;其餘主機程式仍走標準 Rust 後端。輸出緩衝區使用 DisjointSlice,把一個可變借用拆成各執行緒互不重疊的片段;launch contract 則核對維度、block 大小與裝置限制。
這條路保留執行緒索引、共享記憶體與配置策略,適合需要貼近硬體調校的核心,但複雜度也最高。專案儲存庫將其明確標為實驗性 early alpha,並警告可能有功能缺漏、錯誤與 API 破壞性變動:https://github.com/NVlabs/cuda-oxide
Tile 路線的 cutile-rs 則要求開發者描述一塊資料要完成的運算。可變張量先被切成不重疊分區,每個 tile 取得自己的寫入範圍;實際用多少 GPU 執行緒、如何映射,交由 CUDA Tile IR 編譯器決定。kernel 的 Rust AST 會嵌入主機程式,首次使用時再 JIT 編譯成 GPU cubin。專案說明亦確認,其所有權模型可涵蓋同步執行、非同步 pipeline 與 CUDA Graph replay:https://github.com/nvlabs/cutile-rs
合理推論:對多數張量運算,Tile 是較可能形成高階預設介面的路線;SIMT 則像必要的逃生門,留給共享記憶體、warp 行為或特殊存取模式的細緻調校。這也符合 NVIDIA「優先考慮 Tile、需要控制時再降到 SIMT」的建議。不過此處的可攜性主要是跨 NVIDIA GPU 世代,而不是跨 AMD、Intel 或其他加速器。
安全承諾解決了什麼
CUDA 官方記憶體模型指出:兩個可能同時執行的動作若衝突、至少一方寫入,又缺乏適當同步,即構成資料競爭並導致未定義行為:https://docs.nvidia.com/cuda/cuda-programming-guide/05-appendices/cuda-cpp-memory-model.html。CUDA Rust 的核心價值,是把部分原本靠人工審查、測試或運氣才會發現的別名與越界問題,提前變成編譯錯誤。
但「記憶體安全」不能等同「kernel 一定正確」。Tile 大幅縮小可犯錯的表面,仍無法自動保證數值穩定、演算法正確、形狀語意合理或效能最佳;SIMT 的共享記憶體目前仍須使用 unsafe。原子操作的作用域、同步障礙與外部函式介面也不會因換成 Rust 就消失。換言之,Rust 可建立更強的護欄,不能取消 GPU 並行程式設計本身的難度。
為何現在值得注意
第一,兩條路徑都把主機與裝置程式納入 Cargo 工作流,降低維護兩套語言、兩套封裝的成本。第二,NVIDIA 已表態將持續發展至 2027 年以後,並規劃與 CUDA C++、CUDA Python 互通。第三,Tile 路線已不只有向量加法示範:Hugging Face 的 Grout 儲存庫確認其 Qwen3 推論核心採用 cuTile Rust 0.2.0,首次執行會把 kernel 由 MLIR 編譯至 PTX、再產生 CUBIN:https://github.com/huggingface/grout
研究論文另在 B200 上報告元素運算約 7 TB/s、GEMM 約 2 PFlop/s,並以 Grout 測試端到端 Qwen3 推論:https://arxiv.org/abs/2606.15991。這些結果證明安全抽象未必必然付出巨大效能代價,但仍是特定硬體、工作負載與研究團隊產生的結果,不能直接外推到所有模型或 GPU。
容易忽略的成熟度與維運成本
cutile-rs 可使用穩定版 Rust,環境相對單純;cuda-oxide 則依賴固定 nightly、Clang/libclang、CUDA 與 LLVM。更值得警惕的是版本漂移:NVIDIA 文章中的示範列出較早的固定 nightly 與 CUDA 12.x 門檻,但查閱中的專案 README 已列出不同 nightly、CUDA 13.0 以上及相應驅動需求。這不是單純安裝麻煩,而是 CI 映像、可重現建置、資安更新與長期維護都必須承擔的供應鏈成本。
作者觀點:NVIDIA 的商業邏輯也很清楚。當 AI 系統層逐漸採用 Rust,若 kernel 仍必須離開 Rust 生態,其他編譯器或硬體後端便有切入空間;把安全型別、Cargo 體驗與 Tile 編譯器接到 CUDA,可降低既有客戶轉向 Rust 的摩擦,也讓新一代系統軟體繼續圍繞 CUDA。對開發者是生產力投資,對 NVIDIA 則同時是生態系防禦。
對台灣產業與人才的實際意義
對台灣 AI 伺服器、邊緣運算與系統軟體團隊,短期影響不太可能是立即改寫既有 CUDA C++ 核心,而是先在新推論元件、資料前後處理、內部效能工具及安全敏感的非同步執行層試用。人才需求也可能由「會寫 Rust」進一步變成同時理解所有權、GPU 記憶體模型、PTX 與效能分析的人。學校與企業若要布局,值得從小型 kernel、測試與基準環境開始,而非直接押注生產遷移。
後續應觀察的指標
- 兩個專案何時移除 early-stage/alpha 警語,能否提供穩定版本與相容政策。
cuda-oxide是否擺脫固定 nightly,以及共享記憶體能否縮小unsafe範圍。- CUDA C++、Python 與 Rust 的互通是否涵蓋同一 stream、張量所有權、函式庫及除錯工具。
- 除研究基準外,是否出現更多長期維護的真實推論引擎與可重現效能資料。
- API、CUDA Toolkit 與驅動版本變動速度,是否降到企業能穩定納入 CI/CD 的程度。
CUDA Rust 現階段最合理的定位,是一個方向已清楚、工程仍在快速變動的工具鏈轉折點。它尚未改寫 GPU 市場,卻開始改寫一個更基礎的問題:開發者是否必須在效能、底層控制與可驗證安全之間三選二。