已关闭
inductor 动态标量图设备编译失败:IndexExpr.expr 引用的孤儿 size var 未 tiling 化 #315
Jett_Woo创建于  9月15日关闭于  19 天前
Jett_Woo成员
9月15日 创建

现象

inductor mean(dim=1) 分解图(truediv(load, index_expr(s44)),除数为运行期 shape 符号)调度与 codegen 均成功,但 AscendC 设备编译失败:

error: use of undeclared identifier 'ks1'
const int64_t scalar_2 = (ks1)/(1);
Duplicate(local_blk_tensor_of_scalar_2[0], static_cast<int64_t>((ks1)/(1)), ...);

报错点离根因隔一个编译阶段(Tiler::Size 替换表缺项 → 裸符号直出)。

根因

IndexExpr.expr = ks1 这类只被 IR 属性引用、不挂任何轴的"孤儿"动态 size var,在 Optimizer::AutoScheduler 的"清空后重建"中丢失:ClearAllSizeVar 清空登记表后,AppendOriginalSizeVar 的扫描清单只覆盖"轴的 size"与"Load/Store/Gather/Nddma 视图表达式",不含 scalar-like 节点(输出视图为空)的 IR 属性。导致 tiling data 结构体缺 ks1 字段、设备符号替换表缺 ks1 映射。Arange.base/step 为同类隐患。

修复

AppendOriginalSizeVar 补扫 IndexExpr.expr 与 Arange.base/step 的自由符号(公共上游一处修复,host 签名与 device 字段/替换表同时受益;常量表达式收集不到自由符号,既有场景零行为变化)。

关联 PR:#2125

验证

  • 新增 UT FrontendShapeVarsTest.CollectsSymbolsReferencedByScalarLikeIrAttrs(忠实复刻 Clear+Append 触发序列,修复前 RED / 修复后 GREEN)
  • optimize_ut 全量 713 用例全绿;codegen 模块(C++ + Python 267 用例)全绿
  • 端到端 codegen:生成的 tiling 结构体含 uint32_t ks1 字段、设备代码为 scalar_2 = (t->ks1)/(1),裸符号 0 处(修复前 2 处)
likedislike
JJett_Woo成员
9月15日 修改标题为 “inductor 动态标量图设备编译失败:IndexExpr.expr 引用的孤儿 size var 未 tiling 化”,原标题为“test-probe”
JJett_Woo成员
9月15日 修改了issue 的描述
JJett_Woo成员
9月15日 添加了label:Bug-Report
JJett_Woo成员
9月15日 将 Jett_Woo 设为负责人
Jett_Woo成员
9月15日 评论:

问题需要修改

likedislike
JJett_Woo成员
9月15日 关联了pull request:fix: 补齐 scalar-like 节点 IR 属性引用的动态 size var 收集
Nexen_NiSongNexen_NiSong成员
19 天前 issue状态由 进行中 改变为 已完成
Nexen_NiSongNexen_NiSong成员
19 天前 关闭了 issue
CANN-robotCANN-robot成员
19 天前 添加了label:resolved