CUDA-Oxide:Nvidia 官方的 Rust-to-CUDA 编译器

TL;DR · AI 摘要
Nvidia 推出 cuda-oxide,一个实验性的 Rust-to-CUDA 编译器,支持安全的 GPU 编程。
核心要点
- cuda-oxide 是一个实验性的 Rust-to-CUDA 编译器。
- 支持 GPU 编程的安全性和异步执行。
- v0.1.0 版本处于早期测试阶段,可能存在不稳定性。
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- cuda-oxide
- 简介
- 基本概念
- 功能概述
- 核心机制
- Rust-to-CUDA 编译
- PTX 输出
- 项目状态
- 稳定性
- 功能限制
- 快速开始
- 安装指南
- 示例运行
- 为什么选择 cuda-oxide
- Rust 的优势
- GPU 安全性
金句 / Highlights
值得收藏与分享的关键句。
cuda-oxide 是一个实验性的 Rust-to-CUDA 编译器,支持安全的 GPU 编程。
支持 GPU 编程的安全性和异步执行。
v0.1.0 版本处于早期测试阶段,可能存在不稳定性。
标题:cuda-oxide 书 — cuda-oxide
来源 URL:https://nvlabs.github.io/cuda-oxide/index.html
发布时间:Mon, 11 May 2026 17:21:47 GMT
Markdown 内容:

cuda-oxide 是一个实验性的 Rust-to-CUDA 编译器,允许你在安全(ish)、惯用的 Rust 中编写(SIMT)GPU 内核。它可以直接将标准 Rust 代码编译为 PTX——没有领域特定语言(DSL),没有外部语言绑定,只有 Rust。
注意
本书假设您熟悉 Rust 编程语言,包括所有权、特征(traits)和泛型。后续关于异步 GPU 编程的章节还假定您了解 async/.await 和像 tokio 这样的运行时。
如果您需要复习,请参阅 《Rust 编程语言》、《Rust 示例》 或 《异步编程书》。
项目状态[#](https://nvlabs.github.io/cuda-oxide/index.html#project-status "链接到此标题")
v0.1.0 版本是一个早期的 alpha 阶段:期待发现 bug、功能不完整以及 API 更改,因为我们努力改进它。希望您能尝试并分享您的使用体验,帮助我们塑造其发展方向。
🚀 快速开始[#](https://nvlabs.github.io/cuda-oxide/index.html#quick-start "链接到此标题")
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);
}安装 先决条件 后,可以使用 cargo oxide run vecadd 构建和运行。
注意
#[cuda_module] 将生成的设备构件嵌入到主机二进制文件中,并为每个内核生成一个类型化的 kernels::load 函数以及一个启动方法。当您需要加载特定的旁路构件或构建自定义启动代码时,仍然可以使用较低级别的 load_kernel_module 和 cuda_launch! API。
为什么选择 cuda-oxide?[#](https://nvlabs.github.io/cuda-oxide/index.html#why-cuda-oxide "链接到此标题")
🦀 Rust 在 GPU 上
使用 Rust 的类型系统和所有权模型编写 GPU 内核。安全性是首要目标,但 GPU 有其复杂性——阅读有关 安全性模型 的内容。
💎 一个 SIMT 编译器
不是一个 DSL。一个定制的 rustc 编译后端,将纯 Rust 编译为 PTX。
⚡ 异步执行
将 GPU 工作组合成惰性的 DeviceOperation 图表。跨流池调度。使用 .await 等待结果。