展示 HN:cuTile Rust:在 Rust 中安全,无数据竞争的 GPU 核心
cuTile Rust (cutile-rs) 是一个基于 tile 的系统,用于用符合习惯的 Rust 编写内存安全、无数据竞争的 GPU 核心。它扩展了 Rust 的所有权规则,跨越 GPU 启动边界:可变张量在启动前被分割成不相交的部分,不可变张量被共享,而生成的启动器在 GPU 工作进行时保持所有权。相同的模型支持同步启动、异步管道和 CUDA 图回放。#[cutile::module] 宏将每个核心的 Rust 抽象语法树嵌入到主机二进制中;当需要某个核心时,cuTile Rust 通过 CUDA Tile IR 将该 AST JIT 编译成 GPU cubin。当需要更低级的控制时,本地的选择也仍然可用。项目状态 我们很高兴能将这个研究项目发布出来,作为一个示范,说明 GPU 编程如何能够在 Rust 生态系统中实现。软件处于早期阶段,并在积极开发中:在我们改进过程中,您应该期待存在错误、不完整的特性和 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);let ty = load_tile_like(y, z);z.store(tx + ty);}} fn main() -> Result<(), Error> { let x = api::ones::<f32>(&[1024]);let y = api::ones::<f32>(&[1024]);let z = api::zeros::<f32>(&[1024]).partition([128]);let (_z, _x, _y) = kernel::add(z, x, y).sync()?;Ok(()) } #[cutile::module] 宏将 add 转换为 GPU 核心,并生成主机端启动器。主机代码构造懒惰的张量操作,将可变输出分割为 128 元素的块,并调用 .sync() 进行 JIT 编译和执行核心。核心签名将访问规则带入设备代码:z 是独占的可变输出,而 x 和 y 是共享的只读输入。主体加载与输出分区匹配的输入 tiles,将它们相加,并存储结果。启动网格 (8, 1, 1) 从分区推导而来:1024÷128 = 8 tiles。可以通过 cargo run -p cutile-examples --example saxpy 运行类似的示例。有关主机端 API 的更多核心和用例示例可以在这里找到。论文 cuTile Rust 论文《在 GPU 上的无畏并发》可在此处获得。在 NVIDIA B200 上,cuTile Rust 达到每秒 7 TB 的元素级操作和每秒 2 PFlop 的 GEMM,分别约为峰值内存带宽的 91% 和密集型 f16 峰值的 92%。GEMM 结果与 cuBLAS 竞争,而 B200 安全开销的微基准表明,cuTile Rust 在不增加可测量运行时开销的情况下增加了安全性:安全的 Rust 持久 GEMM 在 M=N=K=8192 时达到 2.07 PFlop/s(占 B200 密集 f16 峰值的 92%),误差在 0.3% 以内。论文还评估了 Grout,这是一个与 Hugging Face 合作开发的基于 cuTile Rust 的 Qwen3 推理引擎。在 batch-1 Qwen3 解码中,Grout 在 NVIDIA GeForce RTX 5090 上达到了 171 个 tokens/s 的 Qwen3-4B,且在 B200 上达到了 82 个 tokens/s 的 Qwen3-32B,显示出在内存受限推理任务中具有竞争力的前沿性能,按我们的 HBM Roofline 分析进行测量。与论文评估相关的可重复性材料可以在这里找到。论文中的测量是针对 cuTile Rust 0.2.0 进行的,论文使用的 Grout 版本可以在这里获得。引用 如果您在研究中使用 cuTile Rust,请引用以下论文:@misc { elibol2026fearlessconcurrencygpu,title={在 GPU 上的无畏并发},author={Elibol, Melih 和 Roesch, Jared 和 Gelado, Isaac 和 Buehler, Eric 和 Garland, Michael},year={2026},eprint={2606.15991},archivePrefix={arXiv},primaryClass={cs.PL},url={https://arxiv.org/abs/2606.15991}} 相关项目和参考 Grout:由 Hugging Face 开发的使用 cuTile Rust 构建的 Rust 中的 Qwen 3 推理引擎,作为生产核心调用站点的参考。cuTile Python:使用 CUDA Tile 的 Python 核心编程。TileGym:CUDA Tile 核心示例和调优模式。cuda-oxide: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 降低 tile 基础核心,API 构建围绕张量分区和张量核心导向的操作。设置要求 NVIDIA GPU,计算能力 sm_80 或更高(最低支持架构:sm_80)。sm_100
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡