
Rust已经进入AI推理引擎、驱动和Agent运行时,GPU内核却常常还要退回C++或其他语言。9月8日,NVIDIA公开CUDA Rust方向,推出cuda-oxide与cutile-rs两条路线,让开发者用Rust直接写GPU内核并编译到PTX或CUDA Tile IR。目标不只是统一语言,还要利用所有权与类型检查,在代码运行前拦下最难复现的并行内存错误。
cuda-oxide对应传统SIMT模型:开发者描述单个线程做什么,再启动成千上万个线程。它以自定义rustc后端拦截内核函数,经Rust MIR、Pliron与LLVM生成PTX,主机代码和设备代码可以放在同一文件。开发者保留对线程索引、块大小和共享内存的细粒度控制。
cutile-rs站在更高层。程序处理的是数据Tile,不直接决定每个真实线程如何映射,编译器通过CUDA Tile IR在运行时编译。NVIDIA建议默认先考虑Tile,因为源码较少绑定具体架构;只有需要手动管理线程和内存时再下沉到SIMT。
工具门槛也不同。cuda-oxide需要Linux、计算能力8.0以上GPU、CUDA 12或更新版本、clang、LLVM以及固定nightly Rust;cutile-rs则要求Linux、CUDA 13.3、计算能力8.0以上GPU和Rust 1.89稳定版,不需自带LLVM。
数千线程无固定顺序访问同一缓冲区时,一处别名写入可能只在特定负载或硬件上爆发。cuda-oxide用DisjointSlice把输出缓冲区拆成线程独占片段,并用启动契约校验维度、块大小和实时设备限制;没有契约的内核只能走unsafe启动。
cutile-rs则让可变张量先分区,每个Tile只拥有自己的子张量。若同一输出又被作为输入传入,Rust的移动与借用规则会直接拒绝编译。它把安全性沿张量所有权跨过启动边界,但代价是把线程映射与部分优化空间交给编译器。
这并不意味着GPU程序从此没有错误。数值精度、越界逻辑、同步假设、性能回退和第三方内核仍需测试;SIMT路径的共享内存目前也仍要求unsafe。Rust消除的是部分内存与别名错误,不是所有并行故障。
cutile-rs已发布到crates.io,并被Hugging Face的Grout推理引擎和mistral.rs采用;cuda-oxide仍处早期alpha。两者覆盖不完整,API会变化,SIMT还要固定nightly工具链。NVIDIA计划继续推进与CUDA C++、CUDA Python互操作,避免开发者选择Rust后被锁在独立生态里。
团队现在更适合做局部验证:选择一个边界清楚的算子,对比现有CUDA实现的正确性、编译时间、吞吐、延迟、显存和维护成本。若直接把关键生产内核整体迁移,工具链锁定和接口变动可能抵消语言安全带来的收益。
CUDA Rust的意义不是宣布C++过时,而是承认AI系统层正在被Rust重写,GPU内核不能永远成为语言边界。SIMT与Tile双路线让团队在控制力和可移植性之间选择,也把部分运行时竞态提前变成编译错误。
接下来要看的是三个指标:真实推理算子的性能差距、跨代GPU的源码稳定性,以及unsafe代码占比能否持续下降。若互操作和工具链成熟,Rust团队将少维护一层外部内核包装;但在生产就绪之前,最稳妥的策略仍是小范围替换、双实现对照和可回滚部署。
