Rust + GPU 生态#

cuda-oxide 是多个旨在从 Rust 进行 GPU 计算的活跃项目之一。每个项目 解决的是问题的一个不同侧面——图形着色器、隐式 offload、CUDA 编程、 安全的驱动绑定——整个生态作为整体正在快速前进。本附录简要介绍 cuda-oxide 与相邻项目的关系,以及这些项目彼此之间如何关联。

cuda-oxide 的定位#

项目

方法

目标

范围

cuda-oxide

rustc 代码生成后端

NVIDIA PTX/SASS

用安全的 Rust 实现 CUDA 编程模型

Rust-GPU

rustc → SPIR-V

Vulkan/Metal/DX

通过 SPIR-V 的图形着色器和计算

rust-cuda

rustc → NVVM IR

NVIDIA PTX

NVIDIA GPU 上的 Rust 语言模型

CubeCL

嵌入式 DSL + JIT 运行时

CUDA/ROCm/WGPU

通过 Rust DSL 实现跨供应商计算内核

std::offload

rustc + LLVM offload

NVIDIA/AMD/Intel

CPU 代码的隐式 offload

cudarc

安全的 CUDA 驱动绑定

NVIDIA

CUDA 驱动的宿主端绑定

wgpu

WebGPU API + WGSL/Naga

跨平台

通过着色器语言的可移植计算

"范围"列反映的是每个项目优化的设计重心,而非功能上限。其中多个项目 在边缘存在重叠,单个应用程序可能同时使用其中多个。

cuda-oxide 与 rust-cuda#

最接近的邻居——也是最常与 cuda-oxide 混淆的项目——是 rust-cuda。两个项目都 使用 rustc 代码生成后端来面向 NVIDIA GPU,远看似乎可以互换。但仔细阅读 两个项目后,会发现其设计重心指向不同方向:

  • rust-cuda 的重点是将 Rust 带到 NVIDIA GPU:Rust 人体工学的 async/.await、标准库部分在设备端运行、以及一个将 CUDA 概念抽象化的 Rust 优先编程模型。

  • cuda-oxide 的重点是将 CUDA 引入 Rust:内核编写、设备端内建函数、 SIMT 执行模型以及用安全 Rust 原生表达的 CUDA 编程模型——其精神更接近 用 C++ 编写 __global__ 函数,而非编写碰巧在 GPU 上运行的泛型 Rust 函数。

两个方向都很有价值,我们认为两个项目是互补的。随着两个项目的成熟, 我们一直与 rust-cuda 维护者保持合作,并期望继续如此。

其他相邻项目#

  • Rust-GPU 通过 SPIR-V 面向图形导向的 GPU 编程,覆盖 Vulkan、Metal 和 DirectX。支持计算着色器,但设计重心是图形领域;如果需要跨供应商可移植性 或着色器互操作,Rust-GPU 是正确的工具。

  • CubeCL 是一个嵌入式 DSL:你用 #[cube] 注解 Rust 函数, CubeCL 运行时按需将其 JIT 编译为 CUDA、ROCm/HIP 或 WGSL。它不是 rustc 后端——#[cube] 过程宏将函数体重写为 CubeCL IR, 运行时再将其降层到宿主 GPU 对应的后端。其设计重心是跨供应商可移植性 (单个内核在 NVIDIA、AMD 和 WGPU 上运行),而非完整的 Rust 语言覆盖; 作为交换,CubeCL 放弃了在内核中使用任意 Rust 构造的能力,使用的是 刻意受限的 DSL 表面。CubeCL 是 ML 框架 Burn 背后的计算后端, 后者是其主要展示应用。cuda-oxide 和 CubeCL 在很大程度上是互补的: CubeCL 在你需要通过受控 DSL 让一个内核跨 GPU 供应商运行时适用; cuda-oxide 在你需要在 NVIDIA 硬件上针对完整 CUDA 编程模型编写地道的 安全 Rust 时适用。

  • std::offload 是一个 Rust 语言特性(目前为 nightly),使用 LLVM 的 offload 运行时将 CPU 循环隐式移动到加速器上。编程模型不同:用户编写 CPU 风格的代码,编译器/运行时处理 offload。cuda-oxide 是显式的; offload 是隐式的。

  • cudarc 为 CUDA driver API 提供安全的 Rust 绑定。它是一个宿主端库, 用于 launch 在其他地方编写的内核(通常是 PTX 或 CUDA C++)。cuda-oxide 自带与 cuda-host 的 launch 宏紧密集成的宿主端绑定层(cuda-core), 但 cuda-oxide 生成的 PTX 是可移植的——如果你希望在不依赖 cuda-oxide 其余堆栈的项目中 launch cuda-oxide 内核,cudarc 是一个不错的选择。

  • wgpu 是 WebGPU API 的 Rust 实现——一个对 Vulkan、Metal 和 DirectX 12(以及浏览器中的 WebGPU)的运行时抽象。计算和图形着色器用 WGSL(WebGPU 着色语言)编写,并由 Naga 转换为后端特定代码 (SPIR-V、MSL、HLSL)。处于堆栈的不同层级——wgpu 是运行时 + 着色器 DSL,cuda-oxide 是编译 Rust 自身的 rustc 代码生成后端。

参与项目#

如果你正在构建 Rust + GPU 项目——或正在评估上述哪个项目适合你的需求—— 我们乐于交流。联系 cuda-oxide 团队的最佳方式是通过 GitHub Discussions 或在仓库上提交 issue。