| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: 完善 IndirectLoad SIMD/SIMT codegen 与回归测试 Co-authored-by: xiebangrui<xiebangrui@huawei.com> # message auto-generated for no-merge-commit merge: !1828 merge IL into develop fix: 完善 IndirectLoad SIMD/SIMT codegen 与回归测试 Created-by: xiebangrui2025 Commit-by: xiebangrui Merged-by: cann-robot Description: ## 描述 完善 IndirectLoad 的 SIMD/SIMT/SK 调度与 regbase codegen,实现 SIMD/SIMT 地址计算和调用路径整理,修正 strided 参数生成中的类型转换问题,并修复 SIMD 场景下对公共 SIMT helper 的误判。 同步扩展 IndirectLoad 的 codegen/E2E 回归覆盖,涵盖广播、非连续布局、索引预处理、后融合 Reduce、embedding、LayerNorm、分叉拓扑及多种 SIMD/SIMT 组合;同时更新线上测试脚本,使线上集合与本地构建入口保持一致。 ## 变更类型 - [x] Bug 修复 - [x] 新功能 - [ ] 代码风格更新 - [x] 重构(IndirectLoad SIMD/SIMT codegen 结构整理) - [x] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的 Issue 无。 ## 如何测试 1. 构建 aihac_codegen、test_main 及相关 v35 IndirectLoad codegen/E2E target,统一使用 -j 20。 2. 运行 IndirectLoad API UT,包含 SIMD strided 参数和 uint32_t 输入类型回归用例。 3. 运行 IndirectLoad codegen 集合:修复后的 indirect_load_rank4_axis1_full_prefix_bessel_k0_sum_simd_codegen_v2 通过,相关 70 个 codegen target 中 69 个通过。 4. 运行 indirect_load_rank4_axis1_full_prefix_bessel_k0_sum_simd_e2e_v2:生成代码编译和模拟器执行通过。 当前剩余的 indirect_load_user_add_gather_codegen_v2 失败来自双 IndirectLoad 图尚未被调度器支持(ValidateSingleIndirectLoadNode 明确报错),与本次 SIMD/SIMT codegen 修复无关。 ## 核对清单 - [x] 代码遵循项目代码风格 - [x] 已完成限定范围 pre-commit 检查 - [x] 已完成 OAT 合规检查 - [x] 已完成相关 UT 和 E2E 自测 - [ ] 文档内容更新 See merge request: cann/graph-autofusion!1828 | 9 天前 | |
feat: support IndexExpr and Arange autofusion Co-authored-by: Jett_Woo<wujinteng1@huawei.com> # message auto-generated for no-merge-commit merge: !1961 merge index-expr-device-validation-pr into develop feat: support IndexExpr and Arange autofusion Created-by: Jett_Woo Commit-by: Jett_Woo Merged-by: cann-robot Description: # Pull Request ## 描述 支持 IndexExpr 和 Arange 自动融合,补充 ASCIR/Python 接口、调度与 codegen 支持,并完善设备验证、UT 和 Backend E2E 用例。Arange 仅保留连续物理布局,数学上的非单位 step 仍受支持。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] Bug 修复 - [x] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [x] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 已完成 IndexExpr/Arange 相关 C++ 定向 UT,12 passed。 2. 已完成 device-validation Python 定向测试,259 passed;Ascend950 fused 精度验证有效 133 个 cell,其中 131 个通过,reduce_mask 的两个既有通用 Reduce codegen 问题仍按实测结果保留。 3. 已完成相关构建目标编译验证,构建并行度限制为 -j 8。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 本 PR 基于远端 develop 分支新建。未包含 docs/、tool/、temp/、验证日志或生成产物。 See merge request: cann/graph-autofusion!1961 | 1 天前 | |
【PR】: AF日志易用性整改 Co-authored-by: s00357600sgd<shenguodong1@huawei.com> # message auto-generated for no-merge-commit merge: !1864 merge autofusion_log_daily_develop into develop 【PR】: AF日志易用性整改 Created-by: s003576sgd Commit-by: s00357600sgd Merged-by: cann-robot Description: # Pull Request ## 描述 整改工具扫描的日志中存在的拼写错误、中文、缺少度量单位等低级问题,并排查类似问题统一修改 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1864 | 8 天前 | |
【PR】: AF日志易用性整改 Co-authored-by: s00357600sgd<shenguodong1@huawei.com> # message auto-generated for no-merge-commit merge: !1864 merge autofusion_log_daily_develop into develop 【PR】: AF日志易用性整改 Created-by: s003576sgd Commit-by: s00357600sgd Merged-by: cann-robot Description: # Pull Request ## 描述 整改工具扫描的日志中存在的拼写错误、中文、缺少度量单位等低级问题,并排查类似问题统一修改 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1864 | 8 天前 | |
【PR】: broadcast backward revert Co-authored-by: czways<chengzhiwei5@huawei.com> # message auto-generated for no-merge-commit merge: !1912 merge revert-mr-1830-1788227232888-auto into develop 【PR】: broadcast backward revert Created-by: czways Commit-by: czways Merged-by: cann-robot Description: broadcast backward revert # Pull Request ## 描述 请清晰准确地描述本次 Pull Request 的意图和变更内容。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1912 | 5 天前 | |
feat: support IndexExpr and Arange autofusion Co-authored-by: Jett_Woo<wujinteng1@huawei.com> # message auto-generated for no-merge-commit merge: !1961 merge index-expr-device-validation-pr into develop feat: support IndexExpr and Arange autofusion Created-by: Jett_Woo Commit-by: Jett_Woo Merged-by: cann-robot Description: # Pull Request ## 描述 支持 IndexExpr 和 Arange 自动融合,补充 ASCIR/Python 接口、调度与 codegen 支持,并完善设备验证、UT 和 Backend E2E 用例。Arange 仅保留连续物理布局,数学上的非单位 step 仍受支持。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] Bug 修复 - [x] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [x] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 已完成 IndexExpr/Arange 相关 C++ 定向 UT,12 passed。 2. 已完成 device-validation Python 定向测试,259 passed;Ascend950 fused 精度验证有效 133 个 cell,其中 131 个通过,reduce_mask 的两个既有通用 Reduce codegen 问题仍按实测结果保留。 3. 已完成相关构建目标编译验证,构建并行度限制为 -j 8。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 本 PR 基于远端 develop 分支新建。未包含 docs/、tool/、temp/、验证日志或生成产物。 See merge request: cann/graph-autofusion!1961 | 1 天前 | |
【fix】: 适配A6 && schedule线程级数据竞争防护 Co-authored-by: wang-yan-male<wangyan220@huawei.com> # message auto-generated for no-merge-commit merge: !1886 merge develop into develop 【fix】: 适配A6 && schedule线程级数据竞争防护 Created-by: WangYanMale Commit-by: wang-yan-male Merged-by: cann-robot Description: # Pull Request ## 描述 适配A6 && schedule线程级数据竞争防护 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1886 | 5 天前 | |
【PR】: fix reduce layer norm Co-authored-by: chengzhiwei<chengzhiwei5@huawei.com> # message auto-generated for no-merge-commit merge: !1891 merge develop into develop 【PR】: fix reduce layer norm Created-by: czways Commit-by: chengzhiwei Merged-by: cann-robot Description: # Pull Request Inductor LayerNorm 双链多引用断图方向不一致导致 SortSubGraphsByDependency 依赖环编译失败 ## 描述 请清晰准确地描述本次 Pull Request 的意图和变更内容。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> Closes #293 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 # PR #1891 修改说明:fix reduce layer norm > PR 链接:<https://gitcode.com/cann/graph-autofusion/pull/1891> > 关联 Issue:<https://gitcode.com/cann/graph-autofusion/issues/293>(Closes #293) > 分支:czways/develop → cann/graph-autofusion@develop > 当前版本:head f0329e47(2026-09-01 更新,**已移除 tiling 相关修改**,ATT GetCacheReuseInfo 修复由他人另行交付) > 变更规模:3 个文件,+209 / -16 > 完整根因推演与复盘:见 autofuse/bugshot/tmp/root_cause_derivation.md --- ## 1. 问题现象 Inductor 场景执行 LayerNorm 融合用例 tc_af_inductor_layernorm_backend_0193(输入 shape=(128,6,23),模型为两条 LayerNorm 路径 + 三路输出:sum(layernorm(x.transpose(0,1)))、mean(layernorm(x))、abs(layernorm(x)))时,Autofuse Optimize 阶段在 SortSubGraphsByDependency 报 sorted[4] != total[7],拓扑排序卡死,整体编译以 Optimize fail ret 1343225857 中断。 7 个子图中只排出 4 个,子图 1 与子图 3 互相等待——本 PR 修复该依赖环的根因。 > 历史备注:根因修复后曾暴露下游 ATT tiling cache 的 GroupLevelCache body/tail 编译失败(f8cf01e 休眠缺陷)。该二级问题**不在本 PR 修复范围内**,已由他人另行修复交付;本 PR 现只包含 Optimize 断图根因修复。 ## 2. 根因分析 ### 2.1 图结构前提 Inductor 将整个模型融合为单张 HintGraph,含两条几乎镜像的 LayerNorm 计算链(A 链 = transpose 后 LN,B 链 = 原始输入 LN),两链之间无直接数据边,但共享同一批输入节点:broadcast2(÷23 常量)、broadcast8(beta 权重)、broadcast9(gamma 权重)、scalar1(eps)。 ### 2.2 断图机制 GenerateGeneralCase 依次执行三个断图 pass(ReducePartitionPostFusion → PartitionNorm → ReducePartitionMultipleCitations)。断开一条边的标准产物是 4 个新节点: producer → Store → Ws_pre ~~(同名,之间无边)~~ Ws_post → Load → consumer 写侧句柄与读侧句柄是**两个不同节点、同一个名字**,运行时靠同名配对传递内存。**剪哪条边就是在决定"谁供谁"**——pre 落在生产侧子图,post 落在消费侧子图,形成一条"生产方必须先执行"的跨子图依赖。 ### 2.3 故障机制:断图方向不一致制造真实依赖环 ReducePartitionMultipleCitations(修复前)对每个多输出共享节点独立决策:"保留第一个遍历到的 consumer 方向,断开其余"。由于各节点 consumer 遍历顺序不同,方向互相矛盾: | 共享节点 | 保留的 consumer | 剪断侧 | 产生的跨链依赖 | |---|---|---|---| | broadcast2(÷23) | A 链 truediv | B 链 truediv1 | A 供 B(子图1→子图3) | | broadcast8(beta) | B 链 mul3 | A 链 mul5 | B 供 A(子图3→子图1) | | broadcast9(gamma) | B 链 add2 | A 链 add3 | B 供 A(子图3→子图1) | 子图依赖图: 0 ──→ 4 ──→ 1 ⇄ 3 ──→ 6 ← 1⇄3 双向依赖即环 2 ──→ 5 ──↗ 原图是无环 DAG;环完全由断图方向不一致制造,且每条依赖边都对应真实 workspace 数据流(非名称匹配假依赖),无法在排序层补救。 ### 2.4 已证伪的备选方案(避免重走弯路) | 方案 | 结论 | |---|---| | 修改 Workspace 节点名消除同名 | 证伪:同名是 buffer 复用的有意设计,改名破坏 allocator 映射 | | 忽略 Workspace 依赖 / 在 HasDataDependency 加特判 | 证伪:本 case 依赖边全部真实,特判可致 consumer 先于 producer 执行 | | SCC 缩点合并环上子图 | 回退:可让排序通过,但改变子图融合粒度、跳过 R-core 模板,治标不治本 | | 仅把 GetOutNodes() 换成 GetOutDataNodes() | 证伪:断图后 synthetic Load 节点(如 mean_Load)确实拥有多个数据输出,API 切换挡不住,必须按节点类型过滤 | | 每节点独立取最小 Reduce ID | 证伪:局部最优不等于全局一致,各节点方向仍可互相打架 | ## 3. 修复思路与实现 ### 3.1 共享引用链统一 anchor(断图方向全局裁决) ReducePartitionMultipleCitations(reduce_schedule_case_generator.cpp/.h)重写为两阶段,并拆分为三个职责单一的函数: ReducePartitionMultipleCitations 主流程(单 Reduce 早退) ├─ CollectCitationGroups 阶段一:图改写前收集 citation ├─ BuildCitationGroupAnchors 阶段二 a:Union-Find 合并 + 选 anchor └─ PartitionCitationGroups 阶段二 b:统一方向断图 + 去重 **阶段一:收集 citation**(先于任何本 pass 内的断边,避免被自己改写过的图污染) 1. 多输出起点过滤:!IsLoad && !IsStore && !IsOps<Workspace> && GetOutDataNodes().size() > 1——显式排除 synthetic 节点(断图产物 Store/Load/Ws 虽确实有多个数据输出,但不是用户图的真实共享节点); 2. FindOutputReduce **仅沿数据边**(GetOutNodes() → GetOutDataNodes())递归探测每个输出最终流到的 Reduce,形成 citation 三元组 (source, citation, reduce);不处理控制边是正确选择——下游依赖矩阵(HasDataDependency)本身只按数据边推导,方向决策必须与被保护的约束同构; 3. citation 按 (reduce ID, citation ID) 升序排序——保证后续决策确定,不依赖容器遍历顺序(对应编码红线"图改写结果必须确定")。 **阶段二 a:共享链合并与 anchor 选取** 1. Union-Find:任意两个 citation 组若共享同一 Reduce,合并为同一条共享引用链。本图 7 个共享节点(scalar1、b2、b8、b9、rsqrt、rsqrt1、add3)因都同时流到 sum2/sum3 被合并成一条链; 2. 每链取**最小 Reduce ID** 为唯一 anchor(本图 sum2=41 < sum3=51 → anchor=sum2)。取最小 ID 非性能偏好,是要一个**确定、可复现**的裁决规则。 **阶段二 b:统一方向断图** - 规则全链唯一:citation.reduce == anchor 的路径**保留原始数据边**;其余路径统一调用 PartitionByNode 断开。所有断边方向一致把非 anchor 侧(sum3 侧)隔离为纯消费侧,依赖图在构造上不可能成环; - **(source, reduce) 对去重**:PartitionByNode(src, dst) 只剪断 src→dst 单边(实现含 peer == dst_node 守卫,不改道 src 其余出边)。修复前的旧实现通过 reduce_nodes 集合隐式按 (source, reduce) 去重——首个 Reduce 方向保留直连,每个新出现的 Reduce 只切一次;按 (source, citation) 边去重会切掉同一 source 流向同一非 anchor Reduce 的全部 citation 边,切分边集合较旧实现扩大、属行为变更,故对齐旧语义(每个非 anchor Reduce 只切一条 citation 边,其余保持直连,行为保守且不引入额外跨分量依赖)。 ### 3.2 与旧实现的行为对比 | 维度 | 旧实现 | 新实现 | |---|---|---| | 多输出起点判定 | GetOutNodes().size() > 1(含控制边、含 synthetic 节点) | 仅数据边出度 > 1,排除 Load/Store/Workspace | | 下游 Reduce 探测 | 沿控制边也可达 | 仅沿数据边 | | 断边方向 | 每节点独立,由遍历顺序决定(未定义,可成环) | 共享链合并 + 最小 Reduce ID anchor 全局裁决(构造性无环) | | 去重语义 | (source, reduce) 隐式去重 | (source, reduce) 显式去重(对齐) | | 断边原语 | PartitionByNode 族 | **未改**(Workspace 命名/buffer 复用/codegen ABI 保持) | ### 3.3 真实图验证(2026-08-31 bugshot 回归) 修复后 [TEMP_REDUCE] 插桩日志(验证时临时添加,PR 已清理)逐条确认: - 9 个多输出节点中**无任何 Load/Store/Workspace** 起点——synthetic 过滤生效; - 7 个 citation 组 Union-Find 合并为一条链,anchor 统一为 sum2(41); - 全部 6 条断边(b2→truediv、b9→add3、b8→mul5、rsqrt→broadcast11、add3→sum3、scalar1→add)**方向一致**断向 sum3 侧——对照修复前 b2→truediv1 断向 sum2 侧的方向反转,反向依赖对消除; - 原始 1 ⇄ 3 环消失,SortSubGraphsByDependency 通过。 ## 4. 变更文件清单 | 文件 | 变更 | |---|---| | autofuse/optimize/task_generator/reduce_schedule_case_generator.cpp | ReducePartitionMultipleCitations 重写(拆分三函数);FindOutputReduce 数据边化;新增 <map>/<numeric>/<set> 头 | | autofuse/optimize/task_generator/reduce_schedule_case_generator.h | 新增 Citation/CitationGroups 类型与三个函数声明(均在 private: 段,无 ABI 影响) | | autofuse/tests/ut/optimize/task_generator/test_reduce_schedule_case_generator.cpp | 新增 2 条 UT(见下) | > 注:本 PR 早期版本曾包含 ATT GetCacheReuseInfo 统一过滤(tiling_code_generator.cpp + att_generator_unittest.cpp 2 条 UT),因该问题已由他人修复,为避免重复交付已移除(2026-09-01,head 70cc7e5d → f0329e47)。 ## 5. 测试设计 | 用例 | 覆盖点 | |---|---| | TestReduce_Multi_Cita_Multi_Out_NoDependencyCycle | 双 Reduce 交叉引用链(shared0/shared1 两级多输出、sum1/sum0 双 Reduce)——真正进入新算法路径(单 Reduce 图在 IsOnlyHasOneOrLessReduce 早退);断言调度成功 + kCommon 模板 + 两组 workspace 断点对恰各一对 | | TestReduce_Multi_Cita_SameReduce_NoDuplicatePartition | 同一 source 多条 citation 流向同一 Reduce 的场景,断言 workspace 断点对数量符合预期。**注**:按图构造 sum0 先创建(ID 更小)→ anchor=sum0,实际仅切 branch2(sum1 侧唯一 citation)一条边,(source, reduce) 与 (source, citation) 两种去重键结果相同——去重路径本身未被该用例区分,属残留覆盖缺口;建议补"非 anchor 侧 ≥2 条 citation"构造 | **已执行的验证**: | 验证项 | 结果 | |---|---| | optimize UT(ReduceScheduleCaseGeneratorTest 全套含新增 2 条) | ✅ 通过 | | optimize ST(多 citation 多输出归一化拓扑强化用例) | ✅ 通过 | | 真实 bugshot:Optimize 拓扑排序(原故障点) | ✅ 通过(0831 回归,环消除) | | 真实 bugshot:host C++ 编译(asc_tiling.py) | ⏳ 依赖 ATT 侧修复(他人交付)验证 | | 真实 bugshot:设备端三路输出数值精度 | ⏳ 待执行 | ## 6. 性能影响 - 编译期:一次 citation 收集 + O(组数²×组内 citation) 的共享 Reduce 探测(组数与本图规模为个位数)+ 集合判重,均为编译期常数开销;FindOutputReduce 无 memo,重汇聚宽图存在重复子遍历(可观测但非运行时问题) - 运行时:零新增分支;断边原语未改,生成的 kernel 代码结构不变 - 运行时性能变化点:切分方向确定化会改变部分存量图(多输出节点流向多 Reduce 的形态)的分图结构,融合粒度/性能特征可能与历史版本不同(方向为切分面收窄、更保守)——**非 LayerNorm 场景的性能基线对比是合入前建议项** ## 7. 遗留与后续 1. ATT GetCacheReuseInfo 修复由他人交付后,在真实 bugshot 环境联合重跑:确认 asc_tiling.py host C++ 编译通过 → 设备端三路输出精度校验通过(E2E 闭环); 2. E2E 全绿后关闭 Issue #293 并归档 bugshot 分析文档; 3. 测试覆盖补强:新增"同一 source ≥2 条 citation 流向同一非 anchor Reduce"用例,真正触达 (source, reduce) 去重与并查集合并路径; 4. (可选)FindOutputReduce 增加节点级 memo(node → 首个可达 reduce)与 visited 保护:重汇聚图上避免重复子遍历,总复杂度降为 O(V+E),同时消除理论上的递归栈溢出风险(阶段一无图改写,memo 安全); 5. (既有问题,非本 PR 引入,建议另立 issue)PartitionByNode 对多输出口 source 会为每个 out_anchor 建 Store/Ws 写链——dst 未连接的端口产生无读者的悬空写链;本 PR 场景 source 均单口未触发。 See merge request: cann/graph-autofusion!1891 | 4 天前 | |
【PR】:[feat] [autofuse] Migrate autofuse from ge to graph-autofusion. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !301 merge master_af into master 【PR】:[feat] [autofuse] Migrate autofuse from ge to graph-autofusion. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 从 ge 仓解耦autofuse组件,从ge仓的compiler/graph/optimize/autofuse目录迁移至本仓autofuse目录,未来在本仓独立发包和演进,ge 仓的集成方式不变。 迁移内容主要包括自动融合范围识别、自动算子代码生成、Auto Tiling优化、动态shape及混合精度等特性。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.上板验证inductor+af单片段流程pass 2.上板验证inductor+af整网流程pass ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!301 | 4 个月前 | |
style: 统一 Autofuse 代码格式 Co-authored-by: Ling-DT<lingxing@huawei.com> # message auto-generated for no-merge-commit merge: !921 merge style/clang-format-autofuse-20260611 into develop style: 统一 Autofuse 代码格式 Created-by: ling-DT Commit-by: Ling-DT Merged-by: cann-robot Description: # Pull Request ## 描述 基于 cann/graph-autofusion:develop 最新提交 46a23b0,使用仓库根目录 .clang-format 对 autofuse/ 目录内受版本管理的 C/C++/AscendC 源文件执行统一格式化。 本 PR 仅包含 autofuse/ 目录格式化变更;super_kernel/ 目录格式化变更按要求暂留本地,未提交到本 PR。 格式化工具:clang-format 18.1.8,参数:--style=file。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [x] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 无。 ## 如何测试 描述测试此变更的步骤和前提条件: 1. /tmp/opencode/clang-format-18-venv/bin/clang-format -i --style=file <autofuse C/C++/AscendC files> 2. git diff --cached --check 3. git diff --name-only HEAD~1..HEAD | cut -d/ -f1 | sort | uniq -c 确认 PR 提交仅包含 autofuse/。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 本 PR 为纯格式化变更,不涉及功能逻辑、接口、构建脚本或打包内容修改。 See merge request: cann/graph-autofusion!921 | 2 个月前 | |
【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !1790 merge develop_transpose_one_set_axis into develop 【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 给ascgraph新增图级schedInfo,同时提供对外的getter/setter接口,为后续将node级schedInfo收编成图级schedInfo做铺垫。 当前新增图级接口之后,在schedule的入口处先将图级的schedInfo下发给node级schedInfo,保持内部逻辑先不动,等后续node级schedInfo全部收编完成后再一把切换。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. inductor+af流程,前端保持老流程不动,所有inductor+af用例和网络均不受影响,验证兼容性 2. inductor+af流程,前端将设置node级sched.axis接口改为直接设置图级sched.axis接口,所有inductor+af用例和网络仍不受影响,验证新接口无问题 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1790 | 4 天前 | |
fix:【 ABI约束】保证后端生成AutofuseTiling时使用前端的符号和顺序 Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1753 merge fix/frontend-shape-abi-sync into develop fix:【 ABI约束】保证后端生成AutofuseTiling时使用前端的符号和顺序 Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 动态 shape 场景下,前端调用 AutofuseTiling(s0, s1, ...) 获取 tiling 解。后端经过 ASC 图序列化、优化和 impl graph 生成后,可能丢失原始前端 shape symbol,导致前后端对动态/静态 shape 的判断和 AutofuseTiling ABI 不一致: - 后端 impl graph 残留符号较少,可能生成无 shape 参数或参数不完整的 AutofuseTiling; - 前端仍按原始 ASC 图的完整符号列表调用; - 前端按照数字后缀自然排序,后端按照字符串排序,对于ks0, ks1, ks2, ks10的符号,前后端的顺序就会出现不一致; - host 调用时函数参数布局错位,最终触发 coredump/SegFault。 此外,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; - 内部 tiling data 生成仍保持原有逻辑:IsStaticSchedResult() 继续基于 impl graph 的 origin_vars 判断,避免因前端额外 symbol 生成过多 tiling data; - IsFrontendStaticSchedResult() 仅用于对外 ABI 的静态/动态接口判断,保证函数签名与前端调用一致。 ### 2.3 代码流程图 mermaid 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.* - 增加原始 ASC 图 frontend symbol 捕获、ksN 排序和直接表达式 symbol 恢复; - autofuse/optimize/optimize.cpp - 在优化前保存 frontend symbol metadata; - autofuse/common/schedule_result.h、common_utils.* - 增加 frontend symbol 字段、兼容访问器和 frontend ABI 静态判定; - autofuse/codegen/codegen_tiling*.cpp - 对外接口相关代码使用 frontend symbol;内部 tiling data 静态逻辑保持 origin_vars; - 测试文件 - 增加 frontend symbol 优先级、回退、自然排序、ASC 表达式 symbol 恢复及端到端 ABI 顺序验证。 ## 4. 测试用例说明 ### 本地验证 - cmake --build build --target optimize_ut -j 8:通过; - cmake --build build --target pgo_add_abs_inductor_test_codegen -j 8:通过; - 相关 E2E 目标代码编译通过;本地直接运行受已有 CANN 动态库混装影响,出现 libascir.so 未定义符号,非本次代码编译错误。 ### 远端流水线 - 流水线:#1044214; - 提交:694862c4; - 结果:success; - ST_Test_autofuse_ascendc_api:通过; - PR 当前已恢复 ci-pipeline-passed label。 ### 新增/覆盖用例 - FrontendShapeVarsTakePrecedenceOverImplVars:impl graph 丢失符号时仍保持前端完整列表; - FrontendShapeVarsFallbackToOriginVars:旧结果兼容回退; - NormalizeKsNamesUsesNaturalOrder:验证 ks10/ks2/ks0/ks1 排序; - CollectsOriginalAscGraphSymbolsBeforeOptimization:验证原始 ASC 图符号捕获; - CollectsSymbolsEmbeddedInAxisExpressions:验证轴表达式直接使用 Symbol("s0"); - FrontendShapeAbiKeepsNaturalKsOrderWhenImplDropsSymbols:端到端验证 AutofuseTiling 签名和顺序。 ## 5. 核对清单 - [x] 已定位动态 shape 前后端 ABI 不一致根因 - [x] 已保持内部 tiling data 生成逻辑不变 - [x] 已补充符号恢复、排序和 ABI 回归测试 - [x] 已执行 clang-format、pre-commit 和 OAT 检查 - [x] 远端 ST_Test_autofuse_ascendc_api 已通过 - [ ] 未执行 /workspace/CANN-DevTool/att_gene bbit 验证:该路径不存在,实际目录为 /workspace/CANN-DevTools/att_generalization ## 6. 其他信息 - 本次修复不需要修改前端调用约定;后端从原始 ASC 图恢复完整 symbol 并统一顺序。 - 未修改 /workspace/CANN-DevTools 工作区中的既有用户改动。 - 未新增 tiling data,只修正对外接口使用的 shape symbol 集合和顺序。 See merge request: cann/graph-autofusion!1753 | 18 天前 | |
【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !1790 merge develop_transpose_one_set_axis into develop 【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 给ascgraph新增图级schedInfo,同时提供对外的getter/setter接口,为后续将node级schedInfo收编成图级schedInfo做铺垫。 当前新增图级接口之后,在schedule的入口处先将图级的schedInfo下发给node级schedInfo,保持内部逻辑先不动,等后续node级schedInfo全部收编完成后再一把切换。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. inductor+af流程,前端保持老流程不动,所有inductor+af用例和网络均不受影响,验证兼容性 2. inductor+af流程,前端将设置node级sched.axis接口改为直接设置图级sched.axis接口,所有inductor+af用例和网络仍不受影响,验证新接口无问题 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1790 | 4 天前 | |
feat: support IndexExpr and Arange autofusion Co-authored-by: Jett_Woo<wujinteng1@huawei.com> # message auto-generated for no-merge-commit merge: !1961 merge index-expr-device-validation-pr into develop feat: support IndexExpr and Arange autofusion Created-by: Jett_Woo Commit-by: Jett_Woo Merged-by: cann-robot Description: # Pull Request ## 描述 支持 IndexExpr 和 Arange 自动融合,补充 ASCIR/Python 接口、调度与 codegen 支持,并完善设备验证、UT 和 Backend E2E 用例。Arange 仅保留连续物理布局,数学上的非单位 step 仍受支持。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] Bug 修复 - [x] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [x] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 已完成 IndexExpr/Arange 相关 C++ 定向 UT,12 passed。 2. 已完成 device-validation Python 定向测试,259 passed;Ascend950 fused 精度验证有效 133 个 cell,其中 131 个通过,reduce_mask 的两个既有通用 Reduce codegen 问题仍按实测结果保留。 3. 已完成相关构建目标编译验证,构建并行度限制为 -j 8。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 本 PR 基于远端 develop 分支新建。未包含 docs/、tool/、temp/、验证日志或生成产物。 See merge request: cann/graph-autofusion!1961 | 1 天前 | |
【质量加固】显式声明部分 lambda 捕获列表 Co-authored-by: wzx_0826<wzx_0826@163.com> # message auto-generated for no-merge-commit merge: !1756 merge quality-hardening-autofuse into develop 【质量加固】显式声明部分 lambda 捕获列表 Created-by: wzx_0826 Commit-by: wzx_0826 Merged-by: cann-robot Description: ## 变更说明 本 PR 用于参与 issue #238 的“质量加固”活动。 本次在 autofuse 目录内对 10 处 C++ lambda 默认捕获进行显式捕获声明,避免使用 [&] 默认捕获模式。 See merge request: cann/graph-autofusion!1756 | 18 天前 | |
feat: 支持静态Shape根据ub大小过滤非法template Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !964 merge feat/static-ub-template-filter into develop feat: 支持静态Shape根据ub大小过滤非法template Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 描述 ### 一、主要解决的问题 Autofuse 在 schedule 模板生成后,所有模板会进入 ATT 生成 tiling func 和 solver 阶段。部分模板在所有可调 tile 取最小值 1、动态轴取 1 时的最小 UB 占用已超过平台 UB 上限,属于必然无解模板,但仍消耗后续编译资源。 本 PR 在 BufQueAllocator().AllocBufQue() 之后新增 StaticUbTemplateFilter,提前丢弃必然无解的模板,减少无效编译开销。同时将 ATT 与 Schedule 共用的 UB 表达式构建逻辑抽取到 autofuse/common/ub_expr/,保证两端使用同一份 UB 表达式来源。 ### 二、修改方案 #### 2.1 新增 StaticUbTemplateFilter(optimize 层) - 在 optimize.cpp 的 AllocBufQue 之后调用 StaticUbTemplateFilter().Filter() - 遍历 FusedScheduledResult 中每个 ScheduledResult 的 schedule group/impl graph - 通过公共 AscGraphUbExprBuilder 构建 UB 表达式上下文 - 对 tile inner axis 替换为 1、动态轴替换为 1,执行静态求值得到 min_ub_usage - min_ub_usage > platform_info.ub_size 时丢弃模板 - 平台信息不可用或求值失败时保留模板,不做激进过滤 - 全部模板被过滤时沿用现有无候选模板失败路径 #### 2.2 新增公共 UB 表达式层(common/ub_expr) - ub_expr_types.h:定义 UbExprContext、UbExprBuildResult、UbExprCmp 等公共类型 - asc_graph_ub_expr_builder.{h,cpp}:基于 AscGraph 构建 UB 表达式上下文,覆盖 Queue/Buffer/TmpBuffer size 表达式、container 命名、tile 变量、动态轴变量等 - ub_expr_utils.{h,cpp}:从 UbExprContext 获取原始 UB 表达式 #### 2.3 扩展 PlatformContext - 新增 TryGetInitializedPlatformInfo:无副作用读取已初始化的平台信息,不触发 runtime 初始化 - 新增 TryGetUbSizeOverride:支持上层通过 SetPlatformInfo 注入 UB size(soc_ver 为空时) - 保持 GetPlatformInfo/SetPlatformInfo 既有行为不变 #### 2.4 ATT 侧适配 - gen_model_info.cpp:新增 RefreshCommonUbExprContext,基于公共 AscGraphUbExprBuilder 刷新 UB 表达式上下文,替换旧的 container 表达式 - ub_named_expr_builder.{h,cpp}:ATT 内部命名化 UB 表达式构建,复用公共 BuildUbExpr 获取原始表达式 - axes_reorder_solver_gen.cpp:适配公共 UB 表达式接口 #### 2.5 测试覆盖 - 新增 UT:test_static_ub_template_filter(过滤器正向/异常/边界)、test_ub_expr_utils(BuildUbExpr)、test_platform_context(新接口) - 新增 ATT UT:test_gen_model_info(UB 刷新)、test_axes_reorder_gen(命名化 UB 表达式) - 更新 runtime stub 适配新接口 - 已有 ST/UT 适配:optimize_st、optimize_st_v2、test_optimizer_v2、test_python_ascir ### 三、代码修改流程图 mermaid flowchart TD A[Optimize 生成 schedule 模板] --> B[BufQueAllocator::AllocBufQue] B --> C[StaticUbTemplateFilter::Filter] C --> D{PlatformInfo 可用且 ub_size > 0?} D -- 否 --> E[跳过过滤, 保留全部模板] D -- 是 --> F[遍历 ScheduledResult] F --> G[AscGraphUbExprBuilder::Build] G --> H[UbExprUtils::BuildUbExpr] H --> I[tile=1, 动态轴=1 替换] I --> J{静态求值成功?} J -- 否 --> K[WARNING, 保留模板] J -- 是 --> L{min_ub > ub_size?} L -- 是 --> M[丢弃模板] L -- 否 --> N[保留模板] M --> O[继续后续流程] N --> O K --> O E --> O style C fill:#90EE90,stroke:#006400,stroke-width:2px style G fill:#90EE90,stroke:#006400,stroke-width:2px style H fill:#90EE90,stroke:#006400,stroke-width:2px ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue ## 如何测试 ### 一、测试用例说明 #### 1.1 单元测试 - test_static_ub_template_filter:覆盖平台信息可用/不可用、UB 超限/未超限、表达式求值失败、全部模板被过滤等场景 - test_ub_expr_utils:覆盖 BuildUbExpr 正向和空表达式场景 - test_platform_context:覆盖 TryGetInitializedPlatformInfo 和 TryGetUbSizeOverride - test_gen_model_info:覆盖 UB 表达式刷新 - test_axes_reorder_gen:覆盖命名化 UB 表达式构建 #### 1.2 系统测试 - optimize_st、optimize_st_v2:验证 optimize 全流程包含 UB 过滤 - test_optimizer_v2:v35 optimize 流程适配 - test_python_ascir:Python ASCIR 测试适配 ### 二、构建命令 bash sh build.sh -u --module=autofuse_framework -j 8 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 ### 验证方法 - 静态 shape 场景:构造 UB 超限模板,验证被正确过滤 - 动态 shape 场景:动态轴取 1 后 UB 超限模板被过滤 - 平台信息不可用:验证跳过过滤,保留全部模板 - 表达式求值失败:验证 WARNING 日志和模板保留 ### 注意事项 - 本 PR 仅做必要条件过滤(保守过滤),不替换 ATT 最终 UB solver - 不修改对外 ABI/API,不新增 Python 绑定 - 不引入新的用户配置项或环境变量 - 不触发 runtime platform 初始化 ### 提交记录 | Commit | 描述 | 修改文件数 | 修改行数 | |--------|------|-----------|----------| | 15856eb | feat: add static ub template filter | 28 | +1790/-56 | | a8bd396 | test: cover named ub expr builder | 2 | +17/-0 | | aedf707 | fix: preserve platform info semantics for ub filter | 5 | +52/-12 | ### 修改文件清单 | 文件路径 | 修改类型 | 说明 | |---------|---------|------| | autofuse/optimize/static_ub_template_filter.h | 新增 | 静态 UB 模板过滤器头文件 | | autofuse/optimize/static_ub_template_filter.cpp | 新增 | 过滤器实现:遍历模板、求值、剪枝 | | autofuse/common/ub_expr/ub_expr_types.h | 新增 | UbExprContext/UbExprBuildResult 等公共类型 | | autofuse/common/ub_expr/asc_graph_ub_expr_builder.h | 新增 | AscGraph UB 表达式构建器头文件 | | autofuse/common/ub_expr/asc_graph_ub_expr_builder.cpp | 新增 | Queue/Buffer/TmpBuffer UB 表达式构建实现 | | autofuse/common/ub_expr/ub_expr_utils.h | 新增 | UB 表达式工具类头文件 | | autofuse/common/ub_expr/ub_expr_utils.cpp | 新增 | BuildUbExpr 实现 | | autofuse/common/platform_context.cpp | 修改 | 新增 TryGetInitializedPlatformInfo/TryGetUbSizeOverride | | autofuse/inc/common/platform_context.h | 修改 | 新增无副作用平台信息读取接口 | | autofuse/optimize/optimize.cpp | 修改 | AllocBufQue 后调用 StaticUbTemplateFilter | | autofuse/att/gen_model_info/gen_model_info.cpp | 修改 | 基于公共 UB builder 刷新 context | | autofuse/att/.../ub_named_expr_builder.h | 新增 | ATT 命名化 UB 表达式头文件 | | autofuse/att/.../ub_named_expr_builder.cpp | 新增 | ATT 命名化 UB 表达式实现 | | autofuse/att/.../axes_reorder_solver_gen.cpp | 修改 | 适配公共 UB 表达式接口 | | autofuse/tests/... (16 files) | 新增/修改 | UT/ST 测试用例和 runtime stub 适配 | See merge request: cann/graph-autofusion!964 | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 9 天前 | ||
| 1 天前 | ||
| 8 天前 | ||
| 8 天前 | ||
| 5 天前 | ||
| 1 天前 | ||
| 5 天前 | ||
| 4 天前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 4 天前 | ||
| 18 天前 | ||
| 4 天前 | ||
| 1 天前 | ||
| 18 天前 | ||
| 1 个月前 |