Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

附录 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_f32ub_reduce_maxtile_matmul_f16)。
    • Registered(identity stub):751/998(75%)。主体只有 load → barrier → store —— 转译器解析了 C++ 签名并产生了通过编译门槛的内核,但尚未降级其中的计算 intrinsic。形状、dtype、内核 ABI 都是真实的;主体是占位。
  • 这是编译通过门槛覆盖 —— 每个内核都能通过 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 按类别的内核清单

分类总数TranspiledRegistered说明
ops_cv41536计算机视觉原语(缩放、色彩转换、背景替换、自定义混合等)
ops_legacy343106237CANN 传统库的逐元素一/二元算子(exp、abs、add、mul、逻辑、各数据类型变体)
ops_math15552103数学与特殊函数(三角、双曲、erf、gamma、幂运算、各数据类型变体)
ops_nn30681225神经网络算子(激活、归一化、池化、损失、优化器、索引、归约、缩放)
ops_oam303算子适配(OAM)桥接内核
ops_transformer1503147Attention、matmul、Flash Attention、MoE、MLA、量化线性等变体
总计998247751

“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 个内核
← 请从左侧列表中选择内核

已收录 998 个内核。绿色 = 已转译,灰色 = 已注册(待补充源码)。

返回 第 9 章:自动化转译