GPU编程一直是C/C++的领地。想写CUDA内核?你得学CUDA C++、用nvcc编译器、处理各种内存管理陷阱。但NVIDIA Labs最近开源的 cuda-oxide 项目可能改变这一切——它让你直接用Rust写GPU内核,编译器帮你把Rust翻译成PTX。
什么是CUDA-oxide?
CUDA-oxide 是一个实验性的 Rust-to-CUDA 编译器,由 NVIDIA Labs(NVlabs)开发并开源。它的核心理念是:让开发者用安全、地道的Rust代码编写SIMT GPU内核,编译器自动将其编译为PTX汇编,不需要任何DSL或语言绑定。
项目地址:github.com/NVlabs/cuda-oxide
文档:nvlabs.github.io/cuda-oxide
编译流程
CUDA-oxide 的编译管线如下:
- 使用
#[cuda_module]和#[kernel]宏标注Rust模块和函数 - 编译器从Rust源码提取 MIR(Mid-level IR)
- 通过 Pliron IR(类似MLIR的中间表示)进行GPU特化
- 最终通过 LLVM 的 NVPTX 后端生成 PTX 代码
整个流程用 cargo oxide 子命令驱动,包括 cargo oxide run、cargo oxide build、cargo oxide debug 等。
代码示例:向量加法
下面是一个用CUDA-oxide写的GPU向量加法示例:
use cuda_device::{cuda_module, kernel, thread, DisjointSlice};
use cuda_core::{CudaContext, DeviceBuffer, LaunchConfig};
#[cuda_module]
mod kernels {
use super::*;
#[kernel]
fn vecadd(a: &[f32], b: &[f32], mut c: DisjointSlice<f32>) {
let idx = thread::index_1d();
let i = idx.get();
if let Some(c_elem) = c.get_mut(idx) {
*c_elem = a[i] + b[i];
}
}
}
fn main() {
let ctx = CudaContext::new(0).unwrap();
let stream = ctx.default_stream();
let module = kernels::load(&ctx).unwrap();
let a = DeviceBuffer::from_host(&stream, &[1.0f32; 1024]).unwrap();
let b = DeviceBuffer::from_host(&stream, &[2.0f32; 1024]).unwrap();
let mut c = DeviceBuffer::<f32>::zeroed(&stream, 1024).unwrap();
module.vecadd(&stream, LaunchConfig::for_num_elems(1024), &a, &b, &mut c).unwrap();
let result = c.to_host_vec(&stream).unwrap();
assert_eq!(result[0], 3.0);
}
这段代码定义了一个GPU内核 vecadd,使用Rust的切片引用和 DisjointSlice 来保证GPU上的内存安全。主机端代码负责创建CUDA上下文、分配设备缓冲区、启动内核并读取结果。
安装要求
| 依赖 | 版本要求 | 说明 |
|---|---|---|
| 操作系统 | Linux(Ubuntu 24.04测试) | 不支持Windows |
| NVIDIA GPU | Ampere+(sm_80+) | 驱动545+ |
| CUDA Toolkit | 12.x+ | 需要nvcc和cuda.h |
| LLVM | 21+ | 需要NVPTX后端 |
| Clang | 21+ | 用于bindgen |
| Rust | Nightly(pinned) | nightly-2026-04-03 |
安装步骤:
# 安装cargo-oxide
cargo install --git https://github.com/NVlabs/cuda-oxide.git cargo-oxide
# 验证环境
cargo oxide doctor
# 运行示例
cargo oxide run vecadd
高级特性
- GPU安全模型:在GPU代码中支持Rust的所有权和借用检查
- 异步GPU编程:DeviceOperation模型、组合器、流管理
- 共享内存:GPU Shared Memory支持
- Warp级编程:Warp-Level原语
- TMA:Tensor Memory Accelerator支持
- 闭包和泛型:GPU上也能用闭包和泛型
现状与限制
CUDA-oxide 目前是 v0.1.0,处于早期实验阶段。有以下限制:
- 仅支持Linux,不支持Windows
- 需要最新的LLVM 21和Rust Nightly
- 仅支持Ampere及以上架构的GPU
- 文档虽然完整,但生态工具还在早期
简评
对Rust开发者来说,这是一个重大信号——NVIDIA官方在推动Rust进入GPU编程领域。虽然还是实验性项目,但编译管线的设计思路很清晰,文档质量也很高。如果你的团队已经在用Rust做系统级开发,CUDA-oxide值得关注和试用。对于AI/ML开发者,这意味着未来可能用纯Rust栈从训练到推理全链路覆盖。
















暂无评论内容