支持的功能特性#
本附录展示 cuda-oxide 的功能矩阵:每项编译器能力、运行时 API 和硬件特性, 以及其当前支持状态。数据来源于编译器/运行时源码和测试套件。
图例: Full(完整)= 已测试且正常工作,Partial(部分)= 可用但在某些方面 有已知不足(在行描述中说明),Planned(计划中)= 在路线图上, N/A = 不适用或无已识别的需求。
编译器:内存模型#
特性 |
状态 |
描述 |
|---|---|---|
HMM / 统一内存管理 |
Full |
GPU 直接读/写宿主内存,无需 |
统一结构体 ABI(无需 |
Full |
设备端结构体内存布局与宿主端精确匹配。编译器查询 rustc 的实际布局,并在 LLVM IR 中用显式填充字节重现。兼容默认的 |
动态布局匹配 |
Full |
编译器查询 rustc 的 |
编译器:类型系统#
特性 |
状态 |
描述 |
|---|---|---|
泛型和单态化 |
Full |
支持带 trait 约束的泛型内核和设备函数。单态化实例从 rustc MIR 中收集。支持 const 泛型。 |
枚举( |
Full |
完整枚举支持,包括判别式提取和 payload 访问。枚举的模式匹配正常工作。 |
结构体构造和字段访问 |
Full |
结构体字面量、字段访问、按值传递和返回值。用户自定义结构体无需注解即可支持。 |
数组类型( |
Full |
静态数组构造、常量索引和运行时索引访问。可变数组自动提升为内存支撑。 |
|
Full |
泛型 SIMD 寄存器类型,具名访问器( |
ABI 标量化 |
Full |
切片在内核边界处被标量化( |
编译器:闭包#
特性 |
状态 |
描述 |
|---|---|---|
移动闭包( |
Full |
按值捕获的闭包。整个闭包结构体作为单个 byval 内核参数推送。 |
引用闭包( |
Full |
非 move 闭包,按引用捕获。闭包结构体(包含宿主指针)仍作为单个 byval 参数传递;GPU 通过 HMM 读取这些指针。 |
宿主到设备闭包 |
Full |
宿主端定义的闭包传递给泛型内核。已测试使用捕获系数的多项式求值。 |
设备内部闭包 |
Full |
完全在设备端创建和使用的闭包,包括传递给设备函数的闭包。 |
编译器:控制流#
特性 |
状态 |
描述 |
|---|---|---|
Match 表达式(整数 switch) |
Full |
对整数的多路匹配。生成条件分支链。 |
枚举 Match |
Full |
对 |
For 循环(range、iterator、enumerate) |
Full |
完整的迭代器脱糖:基于 range、 |
While 循环 / If-Else |
Full |
基本控制流完全支持。 |
Break 和 Continue |
Full |
for/while 循环中的 |
编译器:算术和类型转换#
特性 |
状态 |
描述 |
|---|---|---|
64 位算术运算 |
Full |
完整的 64 位整数算术运算,包括移位、按位操作和描述符字段打包。 |
类型转换(所有类型) |
Full |
IntToInt、IntToFloat、FloatToInt、FloatToFloat、Transmute(bitcast)、PtrToPtr、PtrToInt、IntToPtr、指针强制转换。 |
编译器:互操作#
特性 |
状态 |
描述 |
|---|---|---|
双向 LTOIR 支持 |
Full |
Rust 内核调用 CUDA C++ 设备函数,同时 C++ 调用 Rust 设备函数。通过 NVVM IR → libNVVM → LTOIR → nvJitLink。 |
设备端 FFI( |
Full |
|
MathDx FFI(cuFFTDx / cuBLASDx) |
Full |
cuFFTDx(8/16/32 点线程级 FFT)、cuBLASDx(32x32x32 块级 GEMM)通过 LTOIR。 |
跨 Crate 内核 |
Full |
在库 crate 中定义的内核和设备函数,在二进制 crate 使用点进行单态化。 |
编译器:函数#
特性 |
状态 |
描述 |
|---|---|---|
|
Full |
将函数标记为 GPU 内核入口点( |
|
Full |
可从内核调用的设备端辅助函数。由 |
独立的 |
Full |
在没有任何内核的情况下编译的设备函数。为 C++ 消费生成干净的导出名。 |
多内核模块 |
Full |
单个源文件中的多个 |
编译器:编译管线#
特性 |
状态 |
描述 |
|---|---|---|
统一单源编译 |
Full |
宿主和设备代码在同一文件中。自定义 rustc 代码生成后端拦截代码生成。无需 |
PTX 输出 |
Full |
默认输出:Rust MIR → |
NVVM IR 输出 |
Full |
为 libNVVM 消费提供的替代输出,包含 NVVM 元数据。 |
LTOIR 链接 |
Full |
通过 libNVVM 和 nvJitLink 进行设备端 LTO。 |
浮点数学内建函数(libdevice) |
Full |
Rust |
管线检查 |
Full |
|
cuda-gdb 调试支持 |
Full |
带调试信息构建并使用 |
运行时库:安全性#
特性 |
状态 |
描述 |
|---|---|---|
|
Full |
带边界检查的并行写入输出切片。 |
|
Full |
不透明 witness,仅可由受信任的索引函数构造。 |
|
Full |
编译期屏障生命周期: |
运行时库:原子操作#
特性 |
状态 |
描述 |
|---|---|---|
Device 作用域原子操作 |
Full |
|
Block 作用域原子操作 |
Full |
|
System 作用域原子操作 |
Full |
|
|
Full |
标准库原子类型降层为 PTX |
运行时库:共享内存#
特性 |
状态 |
描述 |
|---|---|---|
静态共享内存 |
Full |
|
动态共享内存 |
Full |
|
分布式共享内存(DSMEM) |
Full |
在集群内直接访问其他块的共享内存。 |
运行时库:线程和同步#
特性 |
状态 |
描述 |
|---|---|---|
线程/块/网格内建函数 |
Full |
|
块级同步 |
Full |
|
异步屏障(mbarrier) |
Full |
Hopper+ 的硬件异步屏障:init、arrive、test_wait、try_wait、inval。 |
集群同步 |
Full |
针对集群中所有块的 |
Fence 操作 |
Full |
用于 TMA 可见性的 |
运行时库:Warp#
特性 |
状态 |
描述 |
|---|---|---|
Warp Shuffle 操作 |
Full |
|
Warp Vote 操作 |
Full |
|
Lane/Warp ID |
Full |
|
运行时库:协作组#
特性 |
状态 |
描述 |
|---|---|---|
类型化 Group 句柄 |
Full |
|
Group 通用 API |
Full |
每个 group 句柄上的 |
Warp Tile 分区 |
Full |
|
Warp 集合操作 |
Full |
|
Warp 归约 / 扫描 |
Full |
|
Block 归约 / 扫描 |
Full |
|
协作内核 Launch |
Full |
|
运行时库:调试#
特性 |
状态 |
描述 |
|---|---|---|
|
Full |
格式化 GPU 输出,支持完整的格式说明符。降层为 |
|
Full |
GPU 运行时断言。条件为假时调用 |
调试内建函数 |
Full |
|
运行时库:内核 Launch#
特性 |
状态 |
描述 |
|---|---|---|
|
Full |
嵌入式模块加载,带类型化同步/异步 launch 方法。 |
|
Full |
较低级别的 launch,显式模块加载和封装器。 |
|
Full |
Occupancy 提示:每块最大线程数、每 SM 最小块数。 |
|
Full |
编译期集群维度。在 PTX 中生成 |
运行时库:TMA#
特性 |
状态 |
描述 |
|---|---|---|
TMA 批量张量拷贝(1D–5D) |
Full |
|
TMA 多播 |
Full |
单次 TMA 加载广播到集群中的所有 CTA。完全多播需 sm_100a。 |
TMA Commit/Wait 组 |
Full |
|
尚未实现#
特性 |
状态 |
备注 |
|---|---|---|
内联汇编( |
Planned |
变通方案:使用内置内建函数或向 |
FP8 / MX 数据类型 |
Planned |
Blackwell 路线图项目。无架构限制。 |
动态分发( |
N/A |
使用泛型和静态分发。尚未发现对此的实际需求。 |
堆分配( |
N/A |
CUDA 有设备端堆(内核中的 |
|
N/A |
使用 |
Panic / Unwinding |
N/A |
Panic 路径存在于 MIR 中,但编译器会剥离 |
标准库( |
N/A |
|
纹理内存 |
N/A |
考虑到 Hopper+ 上 TMA 的可用性,优先级较低。 |