Skip to content

tinsert 新增 ST 用例失败原因汇总 #474

Description

@erhsh

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(同时受阻于算子+后端) 算子校验(优先触发)

根因分析

  1. pto.mte_gm_ubpto.mte_ub_gm 的 level3 IR 格式在 ptoas 前端(level3 parser)可以正常解析——使用了正确的 nburst(...) 语法。
  2. ptoas 将 level3 IR 下发后,生成包含 llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DV intrinsic 的 LLVM IR。
  3. bisheng (CANN 9.0 beta.1) 的 HiIPU Non VF DAG→DAG Instruction Selection pass 未实现此 intrinsic 的 pattern match 规则,导致 Cannot select 致命错误。
  4. 所有涉及 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 通道,因此可以正常编译执行。

五、后续建议

  1. bisheng 修复: 向 HiIPU bisheng 团队反馈 llvm.hivm.MOV.UB.TO.OUT.ALIGN.V2.DV intrinsic 缺失问题,推动在后续 CANN 版本中添加指令选择规则。
  2. Acc→DN 路径: 确认 A5 是否确实不支持 DN 目标布局(从 op verify 信息来看已限定),若 pto-isa 参考实现中有 DN 路径,需在文档中注明仅适用于其他架构。
  3. 测试覆盖: 当 bisheng 修复后,可重新启用已移除的 7 个 Vec→Vec/Vec→Mat 用例。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions