Show HN:cuTile Rust:Rust 中安全、无数据竞争的 GPU 内核

2026-06-17 1 阅读 melihelibol
cuTile Rust ( cutile-rs ) 是一个基于图块的系统,用于用惯用的 Rust 编写内存安全、无数据竞争的 GPU 内核。它将 Rust 的所有权规则扩展到了 GPU 启动边界:可变张量在启动前被分割成不相交的部分,共享不可变张量,生成的启动器在 GPU 工作进行时保留所有权。同一模型支持同步启动、异步管道和 CUDA 图形重播。 #[cutile::module] 宏为主机二进制文件中的每个内核嵌入捕获的 Rust AST;当需要内核时,cuTile Rust JIT 会通过 CUDA Tile IR 将该 AST 编译到 GPU cubin 中。当需要较低级别的控制时,本地选择退出仍然可用。项目状态 我们很高兴发布这个研究项目,以演示如何在 Rust 生态系统中提供 GPU 编程。该软件处于早期阶段,正在积极开发中:在我们努力改进它的过程中,您应该会遇到错误、不完整的功能和 API 损坏。话虽这么说,我们希望您有兴趣在工作中尝试它,并通过提供有关您的体验的反馈来帮助确定其方向。如果您有兴趣做出贡献,请查看 CONTRIBUTING.md。快速入门使用 cutile :: prelude :: * ; # [ cutile :: module ] mod kernel { use cutile :: core :: * ; # [ cutile ::entry ( ) ] fn add < const B : i32 > ( z : & mut Tensor < f32 , { [ B ] } > , x : & Tensor < f32 , { [ - 1 ] } > , y : & Tensor < f32 , { [ - 1 ] } > , ) { let tx = load_tile_like ( x , z );让 ty = load_tile_like ( y , z ) ; z 。存储(tx+ty); } } fn main () -> 结果 < () , Error > { let x = api :: Ones :: < f32 > ( & [ 1024 ] ) ;让 y = api :: Ones :: < f32 > ( & [ 1024 ] ) ;让 z = api::zeros:: (&[1024]) 。分区([128]);让(_z,_x,_y)=内核::添加(z,x,y)。同步()? ; Ok ( ( ) ) } #[cutile::module] 宏将 add 转换为 GPU 内核并生成主机端启动器。主机代码构造惰性张量操作,将可变输出划分为 128 个元素的块,并调用 .sync() 进行 JIT 编译并执行内核。内核签名将访问规则带入设备代码中:z 是独占的可变输出,而 x 和 y 是共享的只读输入。主体加载与输出分区匹配的输入图块,将它们相加,然后存储结果。发射网格 (8, 1, 1) 是从分区推断出来的:1024÷128 = 8 个图块。通过 Cargo run -p cutile-examples --example saxpy 运行类似的示例。更多内核和主机端 API 的使用示例可以在这里找到。论文 cTile Rust 论文《GPU 上的无畏并发》可在此处获取。在 NVIDIA B200 上,cuTile Rust 的逐元素操作达到 7 TB/s,GEMM 达到 2 PFlop/s,分别约为峰值内存带宽的 91% 和密集 f16 峰值的 92%。 GEMM 结果与 cuBLAS 具有竞争力,并且 B200 安全开销微基准测试表明 cuTile Rust 增加了安全性,而无需可测量的运行时开销:安全 Rust 持久性 GEMM 在 M=N=K=8192 处达到 2.07 PFlop/s(B200 密集 f16 峰值的 92%),与相应低级 Tile IR 变体的 0.3% 以内。该论文还评估了 Grout,这是一款与 Hugging Face 合作使用 cuTile Rust 构建的 Qwen3 推理引擎。在第 1 批 Qwen3 解码中,Grout 在 NVIDIA GeForce RTX 5090 上达到了 Qwen3-4B 的 171 个令牌/秒,在 B200 上的 Qwen3-32B 达到了 82 个令牌/秒,通过我们的 HBM 屋顶线分析测量,在内存受限推理任务上显示出具有竞争力的最先进性能。此处提供了论文评估的再现性工件。面向纸张的测量是针对 cuTile Rust 0.2.0 进行的,用于纸张的 Grout 版本可在此处获取。引用 如果您在研究中使用 cuTile Rust,请引用论文:@misc { elibol2026fearlessconcurrencygpu , title = { Fearless Concurrency on the GPU } , 作者 = { Elibol, Melih and Roesch, Jared and Gelado, Isaac and Buehler, Eric and Garland, Michael } ,year = { 2026 } , eprint = { 2606.15991 } , archivePrefix = { arXiv } , PrimaryClass = { cs.PL } , url = { https://arxiv.org/abs/2606.15991 } } 相关项目和参考 Grout :Hugging Face 的 Rust 中的 Qwen 3 推理引擎,使用 cuTile Rust 构建,可用作生产内核调用站点的参考。 cuTile Python:使用 CUDA Tile 进行 Python 内核编程。 TileGym:CUDA Tile 内核示例和调整模式。 cuda-oxy :NVlabs 实验性 Rust-to-CUDA 编译器,用于在 Rust 中编写 SIMT 风格的 GPU 内核。 CUDA Tile IR 文档:CUDA Tile IR 参考文档。 CUDA 文档:CUDA 工具包文档。 Rust NVPTX 后端:rustc 为 NVIDIA GPU 生成 PTX 的目标支持。 cuTile Rust 的目标是通过 CUDA Tile IR 降低的基于图块的内核,其 API 围绕张量分区和面向张量核心的操作构建。设置要求 具有计算能力 sm_80 或更高的 NVIDIA GPU(最低支持架构: sm_80 )。 SM_100