GPU Offload in Rust: Portable, Safe, and Fast
Rust编译器现在能自己生成GPU代码了,而且不用放弃内存安全
过去GPU编程只能在快但危险的CUDA/C++和安全但用不了GPU的Rust之间二选一。这篇论文把GPU卸载功能直接内置进Rust编译器(rustc)和LLVM,在保留Rust内存安全保证的同时,让代码能跑在NVIDIA和AMD的GPU上。用RAJAPerf基准测试实测显示,生成的GPU内核性能可以和手写的CUDA、HIP代码相媲美。
METAL MEDIA 解读图
Rust编译器现在能自己生成GPU代码了,而且不用放弃内存安全
- 01提供三种接口:面向普通用户的全自动数据传输、对接cuBLAS/rocBLAS等厂商库的接口、以及面向专家的手动内存控制接口,以应对不同场景需求
- 02提出名为Region的安全抽象,让多个GPU线程可以安全地同时写入同一数组的不同部分,无需使用unsafe代码,解决了Rust'同一时刻只能有一个可变引用'的限制在并行内核中的冲突
- 03设计了两阶段编译流程,把主机(CPU)和设备(GPU)的编译过程分开,避免CPU专属指令混入GPU代码,该流程直接集成进rustc和LLVM的Offload基础设施
- 04在AMD MI250X和NVIDIA H100/RTX等GPU上测试,单个内核的执行时间可与原生CUDA/HIP竞争,但整体程序运行时间因主机与设备间数据传输方式的差异,从比原生快32%到慢46%不等
- 05一个未经优化的简单实现在MI250X上比优化版本慢400多倍,说明论文提出的数据传输优化至关重要
他们做了什么
- 提供三种接口:面向普通用户的全自动数据传输、对接cuBLAS/rocBLAS等厂商库的接口、以及面向专家的手动内存控制接口,以应对不同场景需求
- 提出名为Region的安全抽象,让多个GPU线程可以安全地同时写入同一数组的不同部分,无需使用unsafe代码,解决了Rust'同一时刻只能有一个可变引用'的限制在并行内核中的冲突
- 设计了两阶段编译流程,把主机(CPU)和设备(GPU)的编译过程分开,避免CPU专属指令混入GPU代码,该流程直接集成进rustc和LLVM的Offload基础设施
- 在AMD MI250X和NVIDIA H100/RTX等GPU上测试,单个内核的执行时间可与原生CUDA/HIP竞争,但整体程序运行时间因主机与设备间数据传输方式的差异,从比原生快32%到慢46%不等
- 一个未经优化的简单实现在MI250X上比优化版本慢400多倍,说明论文提出的数据传输优化至关重要
| host.o |
|---|
| .text / .rodata |
| .llvm.offloading |
| llvm_offload_entries |
为什么重要
高性能计算和科学计算领域长期依赖C/C++/CUDA等内存不安全的语言,因为Rust此前难以高效对接GPU,这项工作打破了这种权衡。它让开发者可以用一套不绑定特定硬件厂商、又有安全检查的方式实现GPU加速,而不必被锁定在某个厂商的不安全API里。
本文术语
- noalias · 告诉编译器某个指针不会与其他指针指向同一块内存的提示信息,有助于优化
- MIR · Rust编译器内部使用的一种中间代码表示形式
- LLVM Offload · LLVM中负责把计算任务从CPU转移到GPU执行的底层基础设施
- RAJAPerf · 用于比较CPU/GPU性能的一套基准测试程序
- unsafe代码块 · Rust中关闭编译器自动安全检查、由程序员自行承担风险的代码区域
论文原文摘要(英文)
arXivLabs is a framework that allows collaborators to develop and share new arXiv features directly on our website. Both individuals and organizations that work with arXivLabs have embraced and accepted our values of openness, community, excellence, and user data privacy. arXiv is committed to these values and only works with partners that adhere to them. Have an idea for a project that will add value for arXiv's community? Learn more about arXivLabs.
在 arXiv 阅读最新论文
- SWE-bench Science: Can Coding Agents Resolve Engineering Tasks in Science?让AI编程助手去修复真实科学软件,连最强的那个也有一半以上任务没做对
- FlashPrefill V2: Block-Sparse Prefill Attention for Long-Context LLM Serving把稀疏注意力从论文原型变成能真正上线服务的加速方案
- PolicyGuide: From Guarding One Action to Guiding the Whole Workflow for Policy-Compliant LLM Agents让客服AI坐席不只是拦住一个危险动作,而是把整个流程走对
- EXIMO: VLM Guided Exploration of VLA Policies不用人工遥控演示,让会说话的AI来教机械臂做新家务
- EnvHarness: Awakening Static Worlds for Agent Learning不重新搭建训练环境,而是给现有环境套一层可插拔组件,针对每个智能体的具体弱点重新塑形
- Bounded Sovereignty and the Control Tax: Pricing AI Oversight When the Deployer Does Not Own the Model租用AI而非拥有AI的机构,安全监管能力只剩一半
- Beyond Imitation: Filtering On-Policy Distillation by Reasoning ProgressAI模仿老师模型学习时,会误伤本来推理正确的步骤,新方法专门过滤掉这种误伤
- PersonalBench: Measuring the Authorship Gap in LLM Personalization让AI模仿某人的文风,结果发现它始终摆脱不了自己的腔调