| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【PR】: [fix] [autofuse] remove 'external' in headers' paths. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !1241 merge develop_rm_external into develop 【PR】: [fix] [autofuse] remove 'external' in headers' paths. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 删除文件路径中的'external'字样,避免外部误认为此路径下的文件为对外头文件。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. ci流水线pass 2. RDV pass ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1241 | 3 个月前 | |
fix: 符号表达式反序列化健壮性修复、tile对齐占位符合法化与Broadcast int64放开 Co-authored-by: xiebangrui<xiebangrui@huawei.com> # message auto-generated for no-merge-commit merge: !2164 merge master into develop fix: 符号表达式反序列化健壮性修复、tile对齐占位符合法化与Broadcast int64放开 Created-by: xiebangrui2025 Commit-by: xiebangrui Merged-by: cann-robot Description: ## 描述 本 PR 为单 commit,包含四项内容: **1. 符号表达式反序列化三段式/Exp-Sqrt往返/替换环检测修复**(同步 cann/ge PR 5005,适配本仓 af 命名空间) - ExpressionImpl::Deserialize 三段式重写:完整解析(IsAtEnd 拒绝截断串)、字节相等直通、规范树比较语义等价接受,修复 guard 序列化因 SymEngine 规范打印重排负系数 Add 项被误拒返回空、上层集合比较解引用空表达式的问题 - 补齐 Exp(x)/Sqrt(x) 序列化-反序列化 token 注册与解析,单参函数统一走分发表派发 - CheckReplacementCycle 重写:逐表达式枚举自由符号解析替换根并与对方根比较,覆盖复合表达式对盲区与间接环 - 附带 expression robustness UT 及其 CMake 注册(与 PR #2159 引入版本逐字一致) **2. tile内轴运行时对齐占位符改名为合法标识符并新增ST用例** - cube 融合 tile 内轴运行时占位符 align 由 Symbol("get_g_basen_basem_align()") 改名为合法标识符:轴属性经 CopyAttrFrom/CloneAscGraphs 拷贝时走 SerializeAttr -> DeserializeAttr 中转,带函数调用语法的名字无法被 scanner/parser 解析,导致拷贝图 align 丢失并产生 Parse expression str ... failed or incomplete ERROR - 消费侧适配:3 处可达打印出口(axes_reorder_solver_gen.cpp 的 InitiateArgs/SetVarCons、general_solver_gen.cpp 的 GenAlignInput)统一走 RuntimeAlignExprToCode 还原为函数调用形态,保证生成代码中运行时求值 - 新增 ST 用例 TileInnerAxisRuntimeAlignPlaceholderSurvivesClone 固化占位符 align 经序列化 round-trip 后的保留性 **3. v1/v35 Broadcast IR 注册放开 DT_INT64** - v1 Broadcast IR 注册白名单放开 DT_INT64(设备端 BroadcastInt64 与 codegen 路径早已就绪,uint64 已在同一路径运行,并有 codegen UT/E2E 佐证) - 清理 v2 注册表中已过时的 Broadcast DT_INT64 todo 注释(v2 白名单已含 DT_INT64) **4. 清理 ExpressionImpl::Deserialize 中冗余的条件括号**(if ((ret == nullptr) || ...)、if ((reparsed != nullptr) && (...)) 两处,无语义变化) ## 变更类型 - [x] 🐛 Bug 修复 - [x] ✨ 新功能 ## 关联的Issue ## 如何测试 1. 编译并运行 common ST:sh build.sh -s --module=common -j 8,38 个用例全部 PASS(含新增 TileInnerAxisRuntimeAlignPlaceholderSurvivesClone) 2. 编译并运行 optimize ST:sh build.sh -s --module=optimize -j 8,213 个用例全部 PASS 3. 运行 expression robustness UT(ut_expression):3 个用例全部 PASS 4. Broadcast int64:ascir_builtin_ops 增量构建通过;codegen UT(test_codegen_broadcast_api_call.cpp int64 场景)与 E2E(load_broadcast_store_int64)为既有覆盖 5. 本单 commit 压缩与括号清理未额外本地构建,括号清理无语义变化,依赖 CI 验证 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - expression_robustness_unittest.cc 的 License 头措辞("You should not")与 PR #2159 引入版本逐字一致,远端 CI 不拦截(2159 合入先例);本地 pre-commit 的 oat-check 会误拦,已以 --no-verify 提交 - 修复后可重跑此前暴露 Parse expression str get_g_basen_basem_align() failed or incomplete 的模型验证:该 ERROR 消失且 cube 融合图克隆后 tile 内轴 align 完整 See merge request: cann/graph-autofusion!2164 | 26 天前 | |
feat: 支持Gather后置Norm复合区域识别与融合调度(含SIMT side-input视图适配) Co-authored-by: JaydenChu<zhumin54@huawei.com> # message auto-generated for no-merge-commit merge: !2329 merge reapply/pr-2064-gather-norm into develop feat: 支持Gather后置Norm复合区域识别与融合调度(含SIMT side-input视图适配) Created-by: JaydenChu Commit-by: JaydenChu Merged-by: cann-robot Description: ## 描述 在 IndirectLoad 候选生成链路中支持 Gather 后置 Norm 复合区域(Softmax / LayerNorm 等多个 Reduce + Broadcast + Elementwise 组合)的识别、校验与调度接入,打通 Softmax 专用/通用双路径分流;同时适配 SIMT body 内行级广播 side-input 的坐标重建。 ### 问题场景 含 IndirectLoad 的图后接 Norm 类计算时,现有 Gather+Reduce 候选链存在四类问题: 1. **Gather+Softmax 候选被误杀**:SoftmaxApiCall::Generate 固定把最后一个向量化轴当作 R,且专用 Softmax 节点保持完整输入输出形状;普通 Reduce 的 stride 推导对它推不出归约轴,导致候选在布局校验阶段被淘汰。 2. **多 Reduce 图断言失败**:CollectOutputBoundaries 遇到第二个 Reduce 时触发图级断言,LayerNorm 均值/方差双分支形态直接编译失败。 3. **SIMT body 内行级广播 side-input 编译失败**:带 arange/matmul 的图,softmax 复合区域的行级广播 side-input Load(如 [8,2048,1]/strides=[2048,1,0],每行读一个向量沿尾轴广播)经调度期视图 split 改写后 rank 失配且尺寸符号化,坐标重建断言失败。 4. **IL 模板 merge 后 vectorized_axis 不一致**:tensor merge 只折叠 axis/repeats/strides 不处理 vectorized_axis,中间窗口公共检查打误导性 ERROR。 ### 问题原因 - 现有 RewrittenGraphAnalysis::post_reduce 为单 Reduce 假设,无法表达多统计 Reduce 区域 - Softmax Pattern 替换依赖 ReducePartitionCaseGenerator 的 AllLoad 流程,遇 IndirectLoad 提前返回 - SIMT body 是静态成员函数(无 tiling data 参数),坐标重建要求编译期常量,视图 split 符号化后兜底失效 - tensor merge 与 vectorized_axis remap 分两步执行,中间窗口视图自洽性缺失 ### 修改方案 **复合区域识别与调度**: 1. 新增 norm_utils:NormInfo/NormStage 元数据,基于节点 ExtAttr 随候选图复制传递 2. 抽取 softmax_pattern_fusion_utils:MatchStableStructure/MatchStableDedicated 拆分匹配 3. CollectOutputBoundaries 收集全部 Reduce,逐个校验同轴 Broadcast 配对 4. SIMD 逐 Reduce 独立校验(ValidateSimdCompositeLayouts);SIMT 串行多阶段 5. simt_boundary_sync:SIMT 边界视图 split 同步与 vectorized_axis 两级重映射 6. SIMD padded 视图强制 strided 降级(按视图 strides 逐行写,行内 pad 由 ReduceInit 清中性值) **SIMT side-input 视图适配**: 7. SimtLoadMetadata 增加行级广播标记:generator 在视图改写前按原始结构判定(尾轴 stride==0、其余轴 row-major 稠密递推——从后往前),写入节点 attr 穿透 VF 克隆 8. codegen 坐标重建兜底:rank mismatch 断言前按 output_index / 尾轴宽 去尾维寻址(读[行,列]值沿尾轴广播的正确语义) 9. IL 模板 tensor merge 后,vectorized_axis 中失效旧轴立即替换为 merged 轴(消除中间窗口不一致,RemapOutputVectorizedAxes 的 direct_ancestor 路径无缝衔接到 inner 轴) ### 修改效果 - Gather+Softmax(专用 API)、Gather+LayerNorm(多 Reduce 共享输入)、Gather+串行多阶段均进入正常调度链 - 行级广播 side-input(含带 arange/matmul 图)正确寻址 - SIMD padded 视图降级 strided,消除 index 越界读 - 全部失败路径候选级淘汰并记录日志(原为图级断言失败) - 原有单 Reduce、无 Reduce、SIMD 模板场景行为不变 - 未侵入通用 ScheduleTask 结构 ## 变更类型 - [x] ✨ New feature - [x] 🐛 Bug fix ## 关联的Issue 无 ## 如何测试 1. 已执行:codegen 全量 55/55、optimize_ut 734、optimize_st 213 全部通过 2. 已验证:行级广播兜底(标记/递推/寻址)各环节形态断言通过 3. 待执行:生产带 arange/matmul 图复测 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对功能进行了自测(全量回归+形态断言) - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了适当的类型标签(feat:) - [x] 我已仔细阅读贡献指南(CONTRIBUTING.md)并遵循所有规则 See merge request: cann/graph-autofusion!2329 | 21 天前 | |
【fix】: 修复Max/Min两个输入都是scalar的bug Co-authored-by: 李玥玮<liyuewei1@huawei.com> # message auto-generated for no-merge-commit merge: !1870 merge 2_local into develop 【fix】: 修复Max/Min两个输入都是scalar的bug Created-by: liyuewei Commit-by: 李玥玮 Merged-by: cann-robot Description: # Pull Request ## 描述 1、输入是scalar的场景不再生成brc inline模板。 2、处理两个输入都是scalar的Max/Min api,放到AscendC命名空间,防止和utils.h里的api冲突。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1870 | 1 个月前 | |
feat: 支持 IsInf 和 MaskedFill elementwise 算子自动融合(#51) Co-authored-by: Jett_Woo<wujinteng1@huawei.com> # message auto-generated for no-merge-commit merge: !1000 merge feature/isinf-maskedfill-v3 into develop feat: 支持 IsInf 和 MaskedFill elementwise 算子自动融合(#51) Created-by: Jett_Woo Commit-by: Jett_Woo Merged-by: cann-robot Description: ## 描述 本 PR 为 graph-autofusion 项目添加 IsInf 和 MaskedFill 两个 elementwise 算子的自动融合支持,解决 Issue #51。 ### 主要变更 1. **IsInf 算子支持** - V1 实现:自定义位运算算法(参照 IsNan 实现) - V2 实现:复用 CANN SDK adv_api/math/is_inf.h - 支持 FP16、FP32(V1/V2),BF16(仅 V2) 2. **MaskedFill 算子支持** - 复用 Select 算子的 WhereApiCall 代码生成 - 新增 MaskedFillInputReorderPass 图优化 Pass - 输入重排:(x, mask, value) → (mask, value, x) - 支持 scalar value 和 tensor value 3. **自动融合** - 实现 IsInf + LogicalOr + MaskedFill 的自动融合 - 生成单个 AscBackend kernel,提升性能 ### 修复内容 相比 PR #624,本 PR 修复了以下问题: 1. **Split 算子注册错误**:恢复 REG_ASC_IR(Split) 使用正确的 SplitAscIrAttImplV2 / SplitAscIrCodegenImplV2 实现 2. **Select 算子注册缺失**:补回独立的 REG_ASC_IR(Select) 注册 3. **魔鬼数字**:在 masked_fill_input_reorder_pass.cpp 中使用命名常量替代硬编码数字 ## 变更类型 - [x] ✨ 新功能 - [x] 🐛 Bug 修复(修复 PR #624 引入的回归问题) ## 关联的 Issue Closes #51 ## 如何测试 1. 编译通过:sh build.sh --pkg -j 8 2. 单元测试通过: bash sh build.sh -u --module=autofuse_framework -j 8 ./build/autofuse/tests/ut/ascir/reg_func/test_reg_func_is_inf ./build/autofuse/tests/ut/ascir/reg_func/test_reg_func_masked_fill ./build/autofuse/tests/ut/optimize/test_masked_fill_input_reorder_pass 3. 集成测试通过: bash sh build.sh -s --module=autofuse_e2e -j 8 4. CI 流水线全部通过 5. 包含 Split 算子的融合场景(如 SASRec 模型)不再报错 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档(设计文档已添加 UML 建模和 4+1 视图) - [x] 我在标题中使用了合适的类型标签(feat:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 ### 文件变更统计 - 新增文件:14 个 - 修改文件:22 个 - 总计:36 个文件变更 ### 关键设计决策 1. **IsInf V1 实现**:使用位运算算法,不依赖 CANN SDK 版本 2. **MaskedFill 实现**:通过 GraphPass 将节点类型转换为 Select,完全复用 Select 的 codegen 逻辑 3. **输入重排**:在 GraphPass 阶段统一处理,确保 dtype schema 正确同步 ### 设计文档 见issue [#51](https://gitcode.com/cann/graph-autofusion/issues/51) See merge request: cann/graph-autofusion!1000 | 3 个月前 | |
fix: 修改文件名default拼写错误 Co-authored-by: weishitoken<huangqianqian15@huawei.com> # message auto-generated for no-merge-commit merge: !2471 merge fix/issue-223-default-reg-func into develop fix: 修改文件名default拼写错误 Created-by: wei_shi Commit-by: weishitoken Merged-by: cann-robot Description: # Pull Request ## 描述 修复 autofuse/ascir/reg_func/defalut_reg_func.h 文件名拼写错误,将 defalut 更正为 default。 autofuse/ascir/reg_func/ 目录下的头文件 defalut_reg_func.h 文件名存在拼写错误(default 误写为 defalut),且与同目录拼写正确的实现文件 default_reg_func.cpp 命名不一致,易造成混淆。本 PR 将该头文件重命名为 default_reg_func.h(文件内容不变),并同步更新全仓所有 #include 引用,共 41 个文件,+40/-40 行。 具体变更: - **文件重命名**:autofuse/ascir/reg_func/defalut_reg_func.h → autofuse/ascir/reg_func/default_reg_func.h(similarity 100%,内容无变化) - **算子注册实现**:更新 autofuse/ascir/reg_func/ 下 29 个算子实现文件(abs.cpp、broadcast.cpp、compare.cpp、split.cpp、where.cpp 等)的 #include "defalut_reg_func.h" → #include "default_reg_func.h" - **codegen 生成器**:更新 autofuse/ascir/generator/v1_ascir_codegen_impl.h 与 autofuse/v35/ascir/generator/v2_ascir_codegen_impl.h 中的引用 - **v35 v2 算子实现**:更新 autofuse/v35/ascir/reg_func/ 下 exp2_v2.cpp、lgamma_v2.cpp、polygamma_v2.cpp、pow_v2.cpp 中的引用 - **测试文件**:更新 ST/UT 下 5 个引用该头文件的测试(test_reg_func_remainder.cpp、test_reg_func_split.cpp、test_reg_func_is_inf.cpp、test_reg_func_masked_fill.cpp 等) 不涉及接口、数据结构或运行逻辑的改动。 ## 变更类型 - [x] 🐛 Bug 修复 ## 关联的Issue #223 ## 如何测试 纯文件重命名 + include 路径同步修改,无功能变更,验证编译及无残留引用即可: 1. 全仓搜索确认无残留引用:grep -rn "defalut_reg_func" autofuse/,结果为空 2. 编译验证:sh build.sh --pkg -j 8 编译通过 3. 编译受影响的 UT/ST 测试模块(autofuse_ascendc_api、autofuse_framework 等)通过 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 本 PR 为纯命名修正(rename similarity 100%),不影响任何运行逻辑,合入风险低。 See merge request: cann/graph-autofusion!2471 | 5 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 个月前 | ||
| 26 天前 | ||
| 21 天前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 5 天前 |