NVlabs/cuda-oxide
cuda-oxide is an experimental Rust-to-CUDA compiler that lets you write (SIMT) GPU kernels in safe(ish), idiomatic Rust. It compiles standard Rust code directly to PTX — no DSLs, no foreign language bindings, just Rust.
解决的问题
cuda-oxide 允许开发者使用纯 Rust 编写 GPU 内核,而无需依赖 CUDA C++ 或领域特定语言(DSL)。它通过提供一个自定义编译器后端,消除了对外部语言绑定的需求,实现了单源编译——即主机代码和设备代码位于同一文件中,并通过一条命令完成构建。
工作原理
该项目实现了自定义的 rustc 代码生成后端。它通过多阶段流水线转换 Rust 代码:Rust 源码 → Rust MIR → 一种名为 Pliron IR 的自定义 MLIR 类中间表示 → LLVM IR → CUDA PTX。它提供了一套设备端抽象,支持类型安全的索引、共享内存和 warp/cluster 操作,同时提供主机端运行时(cuda-core 和 cuda-async)用于内存管理和内核启动。
适用人群
专为希望使用 Rust 的安全性和表达性构建高性能 GPU 内核的 Rust 开发者设计,也适合在 NVIDIA 硬件(包括 Hopper 和 Blackwell 架构)上工作的研究人员和工程师,他们希望避免 CUDA C++ 的复杂性。
主要亮点
- 单源编译:主机代码和设备代码统一管理于一个文件中,通过
cargo oxide build命令构建。 - 纯 Rust 内核:支持泛型函数的单态化、带捕获的闭包,以及枚举、模式匹配等标准 Rust 特性。
- 全面的 GPU 支持:完全访问 GPU 内建函数,包括 TMA、集群、屏障和原子操作。
- 异步执行:专用的
cuda-async层,支持可组合的异步 GPU 操作。 - 设备互操作性:通过 LTOIR 支持 Rust 与 C++/CCCL 的设备 FFI 互操作。
- 高级硬件支持:包含针对 Blackwell 张量核心和 GEMM 实现的专用示例。
相关
- Dispatch
- 项目
- 项目
- Dispatch
- Dispatch