附录 G:CANN 8.5 内核覆盖 — 998 个内核
本附录记录 ascendc-to-rs 转译器对 CANN 8.5 内置内核的覆盖情况。
- 998 个 CANN 内核名称 —— 这是真正驱动
ascendc-to-rs的算子批次,每个条目对应一份转译器输出ops_<category>__<name>.rs。 - 两级保真度:
- Transpiled(真实计算主体):247/998(25%)。Rust 主体在
alloc/load/pipe_barrier/store样板之外至少包含一个计算 intrinsic(如ascend_add_f32、ub_reduce_max、tile_matmul_f16)。 - Registered(identity stub):751/998(75%)。主体只有 load → barrier → store —— 转译器解析了 C++ 签名并产生了通过编译门槛的内核,但尚未降级其中的计算 intrinsic。形状、dtype、内核 ABI 都是真实的;主体是占位。
- Transpiled(真实计算主体):247/998(25%)。Rust 主体在
- 这是编译通过门槛覆盖 —— 每个内核都能通过 Rust → MLIR → AscendC →
bisheng在 Ascend 910B2 上生成有效kernel.acl.o。相对参考 CANN 实现的数值一致性为独立门槛(仍在推进中)。 - 可重现: 下方交互式浏览器由
blog/mdbook/scripts/appg_build_cbdata.py脚本从仓库内转译语料benchmarks/cann_kernels/ops_*__*.rs重新生成。任何一次重新转译后重新运行该脚本,即可同步更新分类表和内嵌的 CB_DATA。
里程碑 — 2026-04-20: 真实
ascendc-to-rs批次中全部 998/998 个内核产生有效kernel.acl.o(编译门槛通过)。其中 247/998 携带非 identity 主体;剩余 751/998 为 identity stub,等待rustc_codegen_mlir的 intrinsic 降级工作。标签:ascendc-to-rs-998-working。
关于分类方案: 本附录使用
ascendc-to-rs管线真实产出的批次分类(ops_cv,ops_legacy,ops_math,ops_nn,ops_oam,ops_transformer)。此前草稿展示的是由 8 个合成类别(ops_index/ops_optimizer/ops_reduce/ops_resize)组成的目录,与真实测试集无任何内核重叠 —— 2026-04-20 已替换。
G.1 按类别的内核清单
| 分类 | 总数 | Transpiled | Registered | 说明 |
|---|---|---|---|---|
| ops_cv | 41 | 5 | 36 | 计算机视觉原语(缩放、色彩转换、背景替换、自定义混合等) |
| ops_legacy | 343 | 106 | 237 | CANN 传统库的逐元素一/二元算子(exp、abs、add、mul、逻辑、各数据类型变体) |
| ops_math | 155 | 52 | 103 | 数学与特殊函数(三角、双曲、erf、gamma、幂运算、各数据类型变体) |
| ops_nn | 306 | 81 | 225 | 神经网络算子(激活、归一化、池化、损失、优化器、索引、归约、缩放) |
| ops_oam | 3 | 0 | 3 | 算子适配(OAM)桥接内核 |
| ops_transformer | 150 | 3 | 147 | Attention、matmul、Flash Attention、MoE、MLA、量化线性等变体 |
| 总计 | 998 | 247 | 751 |
“Transpiled” = 主体包含 alloc/load/barrier/store 之外的计算 intrinsic。“Registered” = 主体是 identity stub(load → barrier → store),通过编译门槛但尚未表达原始 C++ 的计算。ops_transformer 距离完全保真最远(3/150 Transpiled)——它们含有复杂的内循环(attention softmax、flash-attention tiling、matmul),转译器尚未对其下降;legacy / math / nn 类别好得多,因为其逐元素主体已经通过当前 intrinsic 下降。关闭这一差距是 rustc_codegen_mlir 的 intrinsic 下降任务,而非转译器前端的任务。
G.2 交互式内核浏览器
选择类别和内核查看 AscendC C++ 源码与转译后的 Rust 代码。点击按钮可在 Playground 中打开。
已收录 998 个内核。绿色 = 已转译,灰色 = 已注册(待补充源码)。
返回 第 9 章:自动化转译