AI Pulse

纯Rust写GPU程序成为可能,但还不稳定

cuda-oxide是一个实验性的Rust到CUDA编译器。它通过自定义rustc代码生成后端,将标准Rust代码直接编译为PTX——不需要DSL,也不需要外部语言绑定。项目的定位是SIMT编译器:处理单指令多线程的GPU并行模式,开发者不必关心底层线程调度。

它有上手友好的工具链。用#[cuda_module]属性宏,可以把生成的设备工件嵌入主机二进制,自动生成类型安全的加载函数和启动方法——每个内核对应一个独立的启动方法。同时保留了底层API:load_kernel_modulecuda_launch!宏,用于加载侧载工件或自定义启动代码。

异步执行是另一个特色。允许将GPU工作组合为惰性的DeviceOperation图,跨流池调度,通过.await等待结果。熟悉Rust异步编程的开发者可以像管理异步CPU代码一样管理GPU任务,简化了组合和调度。

项目附带了一个快速入门示例:向量加法内核。开发者需要引入cuda_device crate,使用kernelthreadDisjointSlice等类型,流程接近原生Rust体验。

不过cuda-oxide目前还远未成熟。v0.1.0是早期alpha版本,存在bug,功能不完整,API也可能变化。项目维护者明确表示希望用户尝试并分享反馈,以帮助改进方向。安全性是首要目标,但GPU编程有微妙之处——比如内存层级和并发访问模式。开发者需要阅读安全模型文档,不能完全依赖Rust的安全保证。

使用cuda-oxide需要一定前提。项目文档假设读者熟悉Rust语言,包括所有权、trait和泛型。后续关于异步GPU编程的章节,还假设读者熟悉async/.await和tokio等运行时。如果只懂基础Rust语法,可能还需要补课。

目前有几个问题尚未明确:性能与手写CUDA C++相比如何、支持哪些GPU架构、社区活跃度和维护计划怎样。对于有经验的Rust开发者来说,这是一个值得关注的方向,但短期内不适合直接用于生产环境。

📎 阅读原文 · nvlabs.github.io

📬 订阅 AI Pulse

每天两次更新,不错过重要信号

▲ 回到顶部