已合并
fix:【 ABI约束】保证后端生成AutofuseTiling时使用前端的符号和顺序 #1753
zhang_shengjie创建于 15 天前
fix:【 ABI约束】保证后端生成AutofuseTiling时使用前端的符号和顺序 #1753
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhang_shengjie 的贡献)15 天前 创建了 pull request,commit 88849361
zhang_shengjie
15 天前 评论:
15 天前 评论:
compile


Zzhang_shengjie
15 天前 virtual merging failed, update merge request[project_id: 8005834, iid: 1753, target_commit_sha: 8884936169b7bb297a62cf7a117bf660c5e2cd9f], message: Conflict detected
15 天前 virtual merging failed, update merge request[project_id: 8005834, iid: 1753, target_commit_sha: 8884936169b7bb297a62cf7a117bf660c5e2cd9f], message: Conflict detected
Zzhang_shengjie
15 天前 virtual merging failed, update merge request[project_id: 8005834, iid: 1753, target_commit_sha: 8884936169b7bb297a62cf7a117bf660c5e2cd9f], message: Conflict detected
15 天前 virtual merging failed, update merge request[project_id: 8005834, iid: 1753, target_commit_sha: 8884936169b7bb297a62cf7a117bf660c5e2cd9f], message: Conflict detected
zhang_shengjie
15 天前 评论:
15 天前 评论:
compile


此处折叠了101条消息 查看更多
wangxiaotian995
12 天前 评论:
12 天前 评论:
/lgtm


12 天前 添加了label:lgtm
12 天前 添加了label:approved
12 天前 合入了pull request
Pull Request
1. 主要解决的问题
动态 shape 场景下,前端调用
AutofuseTiling(s0, s1, ...)获取 tiling 解。后端经过 ASC 图序列化、优化和 impl graph 生成后,可能丢失原始前端 shape symbol,导致前后端对动态/静态 shape 的判断和AutofuseTilingABI 不一致:AutofuseTiling;ks0, ks1, ks2, ks10的符号,前后端的顺序就会出现不一致;此外,ASC 图可能通过
CreateAxis(..., Symbol("s0"))直接保存 shape symbol,而不注册到GetAllSizeVar()。如果只读取GetAllSizeVar(),会错误生成零动态参数的接口。2. 修改方案
2.1 前端 ABI 符号捕获与排序
RemoveDanglingNodes等可能改写或丢失符号之前,从原始 ASC 图捕获前端 shape symbol;SizeVar以及轴、repeat、stride 等表达式中的自由符号,覆盖Symbol("sN")直存场景;ksN按数字后缀自然排序:ks0, ks1, ks2, ks10;非ksN符号保持确定性字符串排序;frontend_shape_vars_collected区分“前端确实没有动态符号”和“旧结果未采集元数据”。2.2 对外接口与内部 tiling data 分离
AutofuseTiling、Inductor/Pgo 入口、shape 参数、缓存 key 和静态 shape 接口使用完整前端 symbol 列表;GetFrontendShapeVars()作为兼容访问入口,旧结果回退到origin_vars;IsStaticSchedResult()继续基于 impl graph 的origin_vars判断,避免因前端额外 symbol 生成过多 tiling data;IsFrontendStaticSchedResult()仅用于对外 ABI 的静态/动态接口判断,保证函数签名与前端调用一致。2.3 代码流程图
flowchart TD A[原始 ASC 图] --> B[收集 SizeVar 和表达式自由符号] B --> C[ksN 自然排序/去重] C --> D[frontend_shape_vars] D --> E[对外 AutofuseTiling ABI 和静态判定] D --> F[shape 参数、Pgo、cache key] G[优化后的 impl graph origin_vars] --> H[内部 tiling data 静态/动态判定]3. 代码修改流程
autofuse/common/ascgraph_info_complete.*ksN排序和直接表达式 symbol 恢复;autofuse/optimize/optimize.cppautofuse/common/schedule_result.h、common_utils.*autofuse/codegen/codegen_tiling*.cpporigin_vars;4. 测试用例说明
本地验证
cmake --build build --target optimize_ut -j 8:通过;cmake --build build --target pgo_add_abs_inductor_test_codegen -j 8:通过;libascir.so未定义符号,非本次代码编译错误。远端流水线
#1044214;694862c4;ST_Test_autofuse_ascendc_api:通过;ci-pipeline-passedlabel。新增/覆盖用例
FrontendShapeVarsTakePrecedenceOverImplVars:impl graph 丢失符号时仍保持前端完整列表;FrontendShapeVarsFallbackToOriginVars:旧结果兼容回退;NormalizeKsNamesUsesNaturalOrder:验证ks10/ks2/ks0/ks1排序;CollectsOriginalAscGraphSymbolsBeforeOptimization:验证原始 ASC 图符号捕获;CollectsSymbolsEmbeddedInAxisExpressions:验证轴表达式直接使用Symbol("s0");FrontendShapeAbiKeepsNaturalKsOrderWhenImplDropsSymbols:端到端验证AutofuseTiling签名和顺序。5. 核对清单
6. 其他信息
/workspace/CANN-DevTools工作区中的既有用户改动。