NVIDIA发布CUDA Rust:支持SIMT与Tile双模型的GPU内核安全编译
NVIDIA正式推出CUDA Rust,通过开源项目cuda-oxide(SIMT模型)和cutile-rs(Tile模型),使Rust成为可原生编写、编译并验证GPU内核的首选语言。两者均利用Rust所有权机制在编译期捕获内存别名错误。cutile-rs已投入Hugging Face Grout与mistral.rs实际使用,而cuda-oxide尚处早期Alpha阶段,二者均未确认可用于生产环境。
NVIDIA推动Rust成为GPU内核一等开发语言
NVIDIA宣布启动CUDA Rust计划,旨在将Rust确立为编写GPU内核的“一等语言”。此前,Rust代码虽可调用CUDA内核,但内核主体通常需用C++或PTX手写。CUDA Rust填补了这一空白,依托NVlabs推出的两个开源项目——面向传统SIMT编程模型的cuda-oxide,以及面向新一代Tile模型的cutile-rs,首次实现Rust源码到GPU可执行代码的端到端原生编译,并借助Rust所有权系统在编译期拦截内存别名等典型GPU并发错误。
双模型并行:SIMT与Tile各司其职
CUDA Rust的两条技术路径,对应CUDA已有的两种编程范式。SIMT(单指令多线程) 模型沿袭CUDA C++与numba-cuda的传统:开发者定义单一线程行为,由运行时启动成千上万线程并行执行。Tile模型则更抽象:开发者描述一个数据块(tile)上的计算逻辑,由Tile IR编译器自动完成线程映射、内存布局与调度优化。NVIDIA官方推荐优先采用Tile模型,仅在需精细控制线程行为或内存访问时选用SIMT。两套工具链均规划支持跨语言互操作,选择Rust不会导致与现有C++或Python生态割裂。
cuda-oxide:基于Rust MIR与Pliron的SIMT内核编译器
cuda-oxide是一个定制化的rustc代码生成后端。它将标记`#[kernel]`的函数,经由Rust中间表示(MIR)、社区Pliron IR框架及LLVM IR,最终编译为PTX汇编。NVIDIA在Pliron之上构建了GPU专用方言。其运行依赖Linux系统、计算能力8.0+的GPU、CUDA 12.x+、clang with libclang,以及一个锁定的nightly工具链(nightly-2026-04-03)。配套工具`cargo oxide doctor`用于环境检查,`cargo oxide new`可一键生成含主机与设备代码的向量加法示例。
安全性设计体现在内核签名中:输入参数`a`与`b`为普通共享切片,输出`c`则必须是`DisjointSlice<f32>`类型——该类型确保每个线程独占访问其对应元素;若使用普通`&mut [f32]`,则所有线程需同时持有同一可变借用,直接被Rust拒绝。`c.get_mut(idx)`返回`Option`,越界访问转为可控分支。`#[launch_contract]`属性声明块形状,生成的`prepare_vecadd`方法会在安全启动前校验启动配置。
cutile-rs:面向Tile模型的稳定版Rust GPU编译方案
cutile-rs工作在更高抽象层级:每个tile块作为单一逻辑线程,在一个子张量上执行一次内核体,真实GPU线程数量由编译器动态决定。`#[cutile::module]`宏将内核AST嵌入宿主二进制,并在首次调用时通过CUDA Tile IR即时编译(JIT)。其部署门槛更低:仅需计算能力8.0+、CUDA 13.3、稳定版Rust 1.89+及Linux系统,无需nightly工具链或定制LLVM。
初始化只需`cargo new`后`cargo add cutile`。主机端`.partition([128])`调用一次性完成三件事:为每个tile分配独占的128元素数据块、固定网格大小为1024/128=8个tile、提供编译时常量`B`(tile宽度)。输入张量支持`-1`作为动态维度,于启动时解析。生成的启动器接管所有张量所有权,并在GPU执行完毕后返还。所有调用(如`.partition()`)在`.sync_on(&stream)`前均为惰性描述,构成一条延迟执行链。
编译器如何捕获危险别名?
在SIMT路径下,若将输出缓冲区`c_dev`同时作为内核输入传入,编译器报错`[E0502]:cannot borrow c_dev as mutable because it is also borrowed as immutable`;在Tile路径下,同类误用触发`[E0382]:use of moved value: z`。cuda-oxide在每次启动调用点进行检查;cutile-rs则将所有权语义贯穿启动边界,NVIDIA称其提供“更强的保障”。Tile模型完全屏蔽共享内存与线程索引接口,从源头杜绝误用;SIMT保留这些底层控制权,但当前cuda-oxide中共享内存仍需`unsafe`块。
本文为企业智脑(优秘智能)编译整理自公开资讯,信息与观点以原文为准,仅供参考。