tinsert 新增 ST 用例失败原因汇总
日期: 2026-06-03
涉及分支: PTOAS.tinsert
CANN 版本: cann-9.0.0-beta.1 (bisheng LLVM 15.0.5)
目标架构: A5
一、总览
| 类别 |
数量 |
根源 |
| 算子/架构限制 |
1 (acc2vec_dn) |
A5 的 pto.tinsert ckernel 不支持 Acc→DN 路径 |
| 编译器后端缺陷 |
7 (所有 Vec→Vec/Vec→Mat 路径) |
bisheng 缺少 llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DV intrinsic 的代码选择规则 |
二、算子层限制(1个)
acc2vec_dn_f32_16x16
- 目标路径: Acc → Vec DN (COL_MAJOR + NONE_BOX)
- 错误信息:
error: 'pto.tinsert' op expects A5 acc->vec tinsert dst to use
ND(row_major/none_box) or NZ(col_major/row_major) layout
- 原因: A5 架构的
pto.tinsert op 校验器限定 Acc→Vec 目标仅支持 ND/NZ 布局,不支持 DN。pto-isa 参考实现中的 DN split 路径在 A5 上不可用。
- 结论: 算子不支持(A5 架构限制),非框架问题。
三、编译器后端问题(7个)
共同症状
所有使用 pto.mte_gm_ub(GM→UB)或 pto.mte_ub_gm(UB→GM)的 level3 IR 内核,在 ptoas 前端通过解析后,由 bisheng 进行 LLVM 代码生成时崩溃:
fatal error: error in backend: Cannot select: intrinsic
%llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DV
失败用例清单
| # |
用例名 |
目标路径 |
失败阶段 |
| 1 |
vec2vec_nd_f32_8x8 |
Vec→Vec ND f32 (8×8→16×16 @4,0) |
bisheng 代码生成 |
| 2 |
vec2vec_nd_f16_16x16_idx8x16 |
Vec→Vec ND f16 (16×16→32×32 @8,16) |
bisheng 代码生成 |
| 3 |
vec2vec_scalar_f32_5_7 |
Vec→Vec ND Scalar (valid_shape=1×1 @5,7) |
bisheng 代码生成 |
| 4 |
vec2vec_nz_f32_16x32 |
Vec→Vec NZ f32 (16×32→32×32 @0,0) |
bisheng 代码生成 |
| 5 |
vec2mat_nz_f32_16x32 |
Vec→Mat NZ (ub→cbuf→ub) |
bisheng 代码生成 |
| 6 |
vec2mat_nd_f32_16x32_idx0x0 |
Vec→Mat ND (ub→cbuf→ub) |
bisheng 代码生成 |
| 7 |
acc2vec_dn_f32_16x16 |
Acc→Vec DN(同时受阻于算子+后端) |
算子校验(优先触发) |
根因分析
pto.mte_gm_ub 和 pto.mte_ub_gm 的 level3 IR 格式在 ptoas 前端(level3 parser)可以正常解析——使用了正确的 nburst(...) 语法。
- ptoas 将 level3 IR 下发后,生成包含
llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DV intrinsic 的 LLVM IR。
- bisheng (CANN 9.0 beta.1) 的 HiIPU Non VF DAG→DAG Instruction Selection pass 未实现此 intrinsic 的 pattern match 规则,导致
Cannot select 致命错误。
- 所有涉及 ubuf ↔ GM 搬运的场景(Vec→Vec、Vec→Mat 的数据流均依赖 ubuf DMA)全部受阻。
结论
框架/编译器后端缺陷:bisheng LLVM 的指令选择表缺少对齐版 UB 外移 intrinsic 的支持。这是 bisheng CANN 9.0 beta.1 版本的已知缺陷,需 bisheng 团队在后续版本中添加对应的 SelectionDAG pattern。
四、已通过的用例(7个)
| # |
用例名 |
路径 |
结果 |
| 1 |
acc2mat_f16_16x16 |
Acc→Mat NZ |
compile-only ✓ |
| 2 |
acc2mat_f16_32x32 |
Acc→Mat NZ |
compile-only ✓ |
| 3 |
acc2mat_bf16_16x16 |
Acc→Mat NZ |
compile-only ✓ |
| 4 |
acc2mat_f32_16x16 |
Acc→Mat NZ |
compile-only ✓ |
| 5 |
acc2vec_nd_f16_16x16 |
Acc→Vec ND |
compare passed ✓ |
| 6 |
acc2vec_nd_f32_16x16 |
Acc→Vec ND |
compare passed ✓ |
| 7 |
acc2vec_nz_f32_16x16 |
Acc→Vec NZ |
compare passed ✓ |
这些数据流经由 L0C→GM(使用 mte_l0c_gm),不依赖 ubuf DMA 通道,因此可以正常编译执行。
五、后续建议
- bisheng 修复: 向 HiIPU bisheng 团队反馈
llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DV intrinsic 缺失问题,推动在后续 CANN 版本中添加指令选择规则。
- Acc→DN 路径: 确认 A5 是否确实不支持 DN 目标布局(从 op verify 信息来看已限定),若 pto-isa 参考实现中有 DN 路径,需在文档中注明仅适用于其他架构。
- 测试覆盖: 当 bisheng 修复后,可重新启用已移除的 7 个 Vec→Vec/Vec→Mat 用例。
tinsert 新增 ST 用例失败原因汇总
日期: 2026-06-03
涉及分支: PTOAS.tinsert
CANN 版本: cann-9.0.0-beta.1 (bisheng LLVM 15.0.5)
目标架构: A5
一、总览
acc2vec_dn)pto.tinsertckernel 不支持 Acc→DN 路径llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DVintrinsic 的代码选择规则二、算子层限制(1个)
acc2vec_dn_f32_16x16pto.tinsertop 校验器限定 Acc→Vec 目标仅支持 ND/NZ 布局,不支持 DN。pto-isa 参考实现中的 DN split 路径在 A5 上不可用。三、编译器后端问题(7个)
共同症状
所有使用
pto.mte_gm_ub(GM→UB)或pto.mte_ub_gm(UB→GM)的 level3 IR 内核,在 ptoas 前端通过解析后,由 bisheng 进行 LLVM 代码生成时崩溃:失败用例清单
vec2vec_nd_f32_8x8vec2vec_nd_f16_16x16_idx8x16vec2vec_scalar_f32_5_7vec2vec_nz_f32_16x32vec2mat_nz_f32_16x32vec2mat_nd_f32_16x32_idx0x0acc2vec_dn_f32_16x16根因分析
pto.mte_gm_ub和pto.mte_ub_gm的 level3 IR 格式在 ptoas 前端(level3 parser)可以正常解析——使用了正确的nburst(...)语法。llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DVintrinsic 的 LLVM IR。Cannot select致命错误。结论
框架/编译器后端缺陷:bisheng LLVM 的指令选择表缺少对齐版 UB 外移 intrinsic 的支持。这是 bisheng CANN 9.0 beta.1 版本的已知缺陷,需 bisheng 团队在后续版本中添加对应的 SelectionDAG pattern。
四、已通过的用例(7个)
acc2mat_f16_16x16acc2mat_f16_32x32acc2mat_bf16_16x16acc2mat_f32_16x16acc2vec_nd_f16_16x16acc2vec_nd_f32_16x16acc2vec_nz_f32_16x16这些数据流经由 L0C→GM(使用
mte_l0c_gm),不依赖 ubuf DMA 通道,因此可以正常编译执行。五、后续建议
llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DVintrinsic 缺失问题,推动在后续 CANN 版本中添加指令选择规则。