Rust 实现 GPU 卸载:便携安全且快速
GPU Offload in Rust: Portable, Safe, and Fast

高性能 GPU 编程长期面临效率与内存安全的两难抉择。以往在 Rust 中利用其所有权模型保障主机 CPU 安全的同时,若要涉足大规模并行 GPU 环境,往往被迫依赖厂商锁定的 DSL 或退而求其次使用不安全的裸指针。这项研究提出了一种零开销、多厂商通用的 GPU 编译框架,直接构建于 Rust 编译器(rustc)和 LLVM 后端之上。通过利用 Rust 强大的类型系统、所有权机制及严格的别名保证(noalias),该框架高效管理并优化了数据转移。实验在 RAJAPerf 基准测试中显示,基于 rustc 的方案生成的 LLVM IR 具有竞争力,其 GPU 内核性能可与原生手优化的 CUDA 和 HIP C++ 基线相媲美,真正实现了跨厂商的便携、安全与高速。
高性能 GPU 编程传统上迫使人们在执行效率与内存安全之间做出妥协。
- whateverboat
> 该模块正处于积极开发中。一旦合并入上游,它将允许 Rust 开发者在 GPU 上运行 Rust 代码。我们的目标是开发一个 Rust 风格的 GPU 编程接口,默认情况下既安全、便捷又足够快。这包括以高效的方式自动处理数据在 GPU 与主机之间的传输。我们(稍后)还将提供更高级、可能是不安全的接口,以允许更高程度的控制。
我真的很欣赏为此付出的工作和努力。然而,这种方案此前在 C++ 配合 LLVM offload 时并未真正奏效。为什么它对 Rust 就能行得通呢?
- YuechenLi
那么……为什么要绕道 LLVM,而不是让 MIR 直接针对 PTX/HIP C 呢?
如果他们真的想要一个 Rust GPU 的厂商中立方案,那其实已经存在了:你通过 Vulkan 绑定编写 CPU 端代码(包括缓冲、分配、并发等),然后从 HLSL/GLSL/WGSL 等语言中消费 SPIR-V 格式的 compute kernel。就目前的状况而言,他们在这里使用 Rust 的方式,感觉更像是在把它当作 TypeScript 的类型/接口来用,而不是别的什么。
再说一遍,大多数需要在 GPU 上执行的操作的大小在编译前就已经确定了,因此完全有可能在编译时静态分配内存,而不是费尽周折去编写一个本质上是为 GPU 计算设计的 Rust 风格 DSL。
- bicepjai
我所有的代码都用 Rust 写,因为我就是个 Rustacean。在我许多自定义的 LLM 推理引擎项目中,最大的斗争始终围绕着绑定(bindings)。我不想维护和编写绑定;如果使用现有项目提供的绑定,我又得等所有者更新,或者 fork 出来自己维护,这真是个大麻烦。能在 GPU 上运行 Rust 核心代码听起来像是我第一天就会尝试的事情。向团队致敬,我会密切关注。
- Thomashuet
这很有希望,但他们发布代码了吗?我在摘要里找不到任何东西。
- boywitharupee
这主要是为了让异构工作负载的主机二进制文件自包含吗?
另外,这看起来主要针对的是 HPC 受众?