Hacker News Best

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

8.5内容质量
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 版本处于早期测试阶段,可能存在不稳定性。

结构提纲

按章节快速跳转。

  1. 介绍 cuda-oxide 的基本概念和功能。

  2. cuda-oxide 如何将 Rust 代码编译为 PTX。

  3. 当前版本的稳定性和功能限制。

  4. 如何安装和运行 cuda-oxide 示例。

  5. Rust 在 GPU 编程中的优势和特点。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • cuda-oxide
    • 简介
      • 基本概念
      • 功能概述
    • 核心机制
      • Rust-to-CUDA 编译
      • PTX 输出
    • 项目状态
      • 稳定性
      • 功能限制
    • 快速开始
      • 安装指南
      • 示例运行
    • 为什么选择 cuda-oxide
      • Rust 的优势
      • GPU 安全性

金句 / Highlights

值得收藏与分享的关键句。

#Nvidia#Rust#GPU#CUDA#编译器
打开原文

标题: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 "链接到此标题")

rust
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_modulecuda_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 等待结果。