| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【fix】: PowScalar性能问题优化 Co-authored-by: 李玥玮<liyuewei1@huawei.com> # message auto-generated for no-merge-commit merge: !1795 merge 0_local into develop 【fix】: PowScalar性能问题优化 Created-by: liyuewei Commit-by: 李玥玮 Merged-by: cann-robot Description: # Pull Request ## 描述 PowScalar性能问题优化。 ## 变更类型 请选择本次引入的变更类型: <!-- [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!1795 | 1 天前 | |
修复 Broadcast 后 Reduce source reuse 判断 Co-authored-by: weishitoken<huangqianqian15@huawei.com> # message auto-generated for no-merge-commit merge: !1819 merge fix/reduce-broadcast-reuse-guard into develop fix: 修复 Broadcast 后 Reduce source reuse 判断, 避免修改复用的broadcast数据导致精度失败 Created-by: wei_shi Commit-by: weishitoken Merged-by: cann-robot Description: # Pull Request ## 描述 修复 Reduce source reuse 判断遗漏上游 Broadcast 的问题。当 Broadcast 的 B 轴与 Reduce 的 R 轴具有相同 vectorized_axis 时,禁止复用输入 source,避免 Broadcast 与 Reduce 的轴语义冲突,错误复用,导致出现精度问题。 ## 变更类型 <!-- [x] 表示选中 --> - [x] Bug 修复 - [ ] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 无 ## 如何测试 1. 使用 CANN 9.2.0 配置并构建 aihac_codegen 和 test_main:均成功。 2. 针对本次 4 个变更文件执行 pre-commit run --files ...:基础检查、clang-format、codespell 和 OAT 检查均通过。 3. 执行 git diff --check:通过。 4. 目标测试运行受既有 liboptimize.so ABI/链接问题阻塞,未进入 gtest,错误为缺少 af::GraphUtils::RelinkGraphEdges 符号。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - 分支相对 develop 仅包含 4 个目标文件:1 个测试构建配置、1 个共享 helper 和 2 个生产路径修改。 - .gitignore 中的既有本地修改未纳入本分支提交。 See merge request: cann/graph-autofusion!1819 | 23 小时前 | |
fix: 修复 ATT 注册表并删除历史 pass Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1821 merge fix/att-registry-thread-safety into develop fix: 修复 ATT 注册表并删除历史 pass Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 描述 ### 一、主要解决的问题 1. ATT 性能函数注册表 EvalCosts 使用 unordered_map 保存 ASCIR/AscendC 函数。注册、查找和遍历操作缺少统一同步保护,存在并发读写及静态初始化阶段访问风险。 2. ApiPerfFactory 的全局注册点过早解析性能函数,可能在注册表尚未完成初始化时访问。 3. 历史 ATTPassMgr/pass_mgr.h/matmul_align_pass 已不在当前产品 CV 融合路径使用,相关实现和测试继续保留会增加维护与构建负担。 ### 二、修改方案 - 在 EvalCosts 内增加 std::mutex,统一保护 ASCIR/AscendC 注册表的注册、查找和列表遍历。 - ApiPerfFactory 查找时在锁内复制 creator,释放锁后创建对象,避免锁内执行创建逻辑。 - 全局注册点延迟保存和解析性能函数 key,规避静态初始化顺序问题。 - 保留 v1/v35 特殊 key 映射,包括 kUnitVector、select/where、true_div/div 和 V2 key。 - 删除历史 ATTPassMgr/pass_mgr.h/matmul_align_pass 实现,以及对应 ST/UT 测试和 ModelInfo 过时代码路径。 - 按 clang-format 18.1.8 规范化 ATT 注册相关源文件,修复 codecheck_precommit 检查失败。 ### 三、代码修改流程图 mermaid sequenceDiagram participant Register as 注册阶段 participant Registry as EvalCosts 注册表 participant Factory as ApiPerfFactory participant Worker as 线程执行阶段 Register->>Registry: 加锁写入 ASCIR/AscendC creator Worker->>Factory: 请求创建性能对象 Factory->>Registry: 加锁查找并复制 creator Registry-->>Factory: 返回 creator Factory-->>Worker: 解锁后创建对象 ## 变更类型 - [x] Bug 修复 - [ ] 新功能 - [ ] 代码风格更新 - [x] 重构 - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue - #283(fix: 修复 ATT 性能函数注册表并发安全并清理历史 pass) ## 如何测试 ### 一、测试用例说明 #### 1.1 单元测试 - ATT UT:1062/1062 通过。 - pre-commit:clang-format、pre-commit-hooks、codespell、OAT 全部通过。 #### 1.2 系统测试 - ATT ST:110/110 通过。 - ASCEND_HOME_PATH=$HOME/Ascend/cann cmake --build build --target aihac_codegen -j 8:通过。 - git diff --check upstream/develop...HEAD:通过。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签 - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md) ## 其他信息 ### 验证方法 - 基线分支:upstream/develop。 - 远端流水线 1077921 使用 HEAD 35f01f80ba72 执行成功,并生成 ci-pipeline-passed 标签。 ### 注意事项 - 本 PR 不包含 docs 提交。 - 当前 CV 融合路径不使用历史 ATT matmul pass,删除范围仅覆盖确认无产品消费者的实现和测试。 ### 提交记录 | Commit | 描述 | 修改文件数 | 修改行数 | |--------|------|-----------:|-----------:| | 9d220d5c | 保护 ATT 性能注册表 | 1 | +10/-8 | | 3aee26c7 | 延迟 ATT 性能函数查找 | 4 | +243/-219 | | a9f9b37e | 删除历史 ATT pass manager | 5 | +0/-307 | | 83010056 | 保留最新 ATT 注册映射 | 1 | +1/-3 | | 35f01f80 | 修复 ATT 文件格式 | 2 | +267/-298 | ### 修改文件清单 | 文件路径 | 修改类型 | 说明 | |---------|---------|------| | autofuse/att/gen_model_info/api_perf_register/api_perf_factory.cpp | 修改 | creator 查找与对象创建同步策略 | | autofuse/att/gen_model_info/api_perf_register/api_perf_factory.h | 修改 | 注册工厂接口与延迟解析支持 | | autofuse/att/gen_model_info/api_perf_register/ascendc_api_perf.h | 修改 | EvalCosts 互斥保护 | | autofuse/att/gen_model_info/api_perf_register/v1/ascir_api_perf_v1.cpp | 修改 | v1 注册映射和格式化 | | autofuse/v35/att/api_perf_register/ascir_api_perf_v2.cpp | 修改 | v35/V2 注册映射和格式化 | | autofuse/att/gen_model_info/gen_model_info.cpp | 修改 | 移除历史 pass 使用链路 | | autofuse/att/gen_model_info/pass/pass_mgr.h | 删除 | 历史 pass manager | | autofuse/att/gen_model_info/pass/matmul_align_pass.cpp | 删除 | 历史 matmul pass | | autofuse/tests/ut/att/testcase/gen_model_info/pass/test_matmul_align_pass.cpp | 删除 | 对应 UT | | autofuse/tests/st/att/testcase/source_mirror/gen_model_info_content/test_att_config.cpp | 删除 | 对应 ST 配置镜像 | See merge request: cann/graph-autofusion!1821 | 23 小时前 | |
修复 Broadcast 后 Reduce source reuse 判断 Co-authored-by: weishitoken<huangqianqian15@huawei.com> # message auto-generated for no-merge-commit merge: !1819 merge fix/reduce-broadcast-reuse-guard into develop fix: 修复 Broadcast 后 Reduce source reuse 判断, 避免修改复用的broadcast数据导致精度失败 Created-by: wei_shi Commit-by: weishitoken Merged-by: cann-robot Description: # Pull Request ## 描述 修复 Reduce source reuse 判断遗漏上游 Broadcast 的问题。当 Broadcast 的 B 轴与 Reduce 的 R 轴具有相同 vectorized_axis 时,禁止复用输入 source,避免 Broadcast 与 Reduce 的轴语义冲突,错误复用,导致出现精度问题。 ## 变更类型 <!-- [x] 表示选中 --> - [x] Bug 修复 - [ ] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 无 ## 如何测试 1. 使用 CANN 9.2.0 配置并构建 aihac_codegen 和 test_main:均成功。 2. 针对本次 4 个变更文件执行 pre-commit run --files ...:基础检查、clang-format、codespell 和 OAT 检查均通过。 3. 执行 git diff --check:通过。 4. 目标测试运行受既有 liboptimize.so ABI/链接问题阻塞,未进入 gtest,错误为缺少 af::GraphUtils::RelinkGraphEdges 符号。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - 分支相对 develop 仅包含 4 个目标文件:1 个测试构建配置、1 个共享 helper 和 2 个生产路径修改。 - .gitignore 中的既有本地修改未纳入本分支提交。 See merge request: cann/graph-autofusion!1819 | 23 小时前 | |
fix: 修复 Issue 261-276 安全加固缺陷 Co-authored-by: gcw_V3YyYBt1<gaoxin32@huawei.com> # message auto-generated for no-merge-commit merge: !1791 merge develop-issue into develop fix: 修复 Issue 261-276 安全加固缺陷 Created-by: gcw_V3YyYBt1 Commit-by: gcw_V3YyYBt1 Merged-by: cann-robot Description: # Pull Request ## 描述 本次 PR 修复了 public 仓库中 Issue #261-#276 共 15 个安全加固类缺陷,涉及容器越界、空指针解引用、内存泄漏、无上界内存分配四类问题。涵盖 14 个 C++ 源文件,均为防御性编程加固。 关联 Issues: #261, #262, #264, #265, #266, #267, #268, #269, #270, #271, #272, #273, #274, #275, #276 ## 背景 在代码静态分析与安全审计中,发现以下四类潜在风险: 1. **容器越界**:外部数据驱动的容器访问未做充分边界检查(#261 ONNX attribute(0)、#262 transpose vectorized_repeats 空容器)。 2. **空指针解引用**:内部 shared_ptr/bare pointer 在解引用前未校验非空(#264 Expression::Compare、#265 HcomTopoInfo、#266 reuse_schedule_group、#268 pyascir、#269 node.cc、#270 graph_utils_ex、#271 readable_dump、#272 NddmaApi、#273 vector_func_partitioner)。 3. **逻辑反转**: to_json 中三元运算符条件反转,IsValid() 时错误返回空串,实际应在 impl_==nullptr 时返回空串(#267)。 4. **内存泄漏与无上界分配**:PGO 生成代码中 malloc 未在 return 前 free(#274);反序列化路径中读取外部文件时仅做下界校验,无上界防护(#275 model_serialize、#276 graph_utils)。 ## 修改方案 按问题类型分组修复,每处均在调用点加最小防御性校验: **容器越界(2 项)** - ge_ir_utils.cc:1241:ONNX DecodeGraph 访问 attribute(0) 前增加 attribute_size() 非空检查,空时报错返回 false。 - transpose_v2.cpp:30:GetTensorVectorizedRepeats 成功后校验 vector 非空,并改用 back() 替代 size()-1。 **空指针解引用(9 项)** - expression.cc:181:Compare 同时校验 this->impl_ 和 e.impl_。 - hcom_topo_info.cc:32:函数入口增加 group != nullptr 检查。 - tiling_code_gen_impl.cpp:4969:解引用 reuse_schedule_group shared_ptr 前先做非空断言。 - pyascir.cpp:218:PyUnicode_AsUTF8 返回 nullptr 时抛 TypeError。 - node.cc:576:GetOwnerNodeBarePtr() 返回 nullptr 时 continue。 - graph_utils_ex.cc:146,150:拆分 GetComputeGraph 返回值,加 GE_CHECK_NOTNULL。 - readable_dump.h:78:GetOpDesc() 返回 nullptr 时 continue 跳过该节点。 - ascir_api_perf_v2.cpp:129:node_ptr->GetType() 加 nullptr 三元判断兜底 "Nddma"。 - vector_func_partitioner.cpp:697:GetNodeCluster 返回 nullptr 时 continue。 **逻辑反转(1 项)** - base_types_printer.cpp:14:修正三元顺序,IsValid() 时取 Str().get(),否则取 ""。 **内存泄漏与无上界分配(3 项)** - tiling_code_gen_impl.cpp:2833,2939:仅在 PGO/inductor 路径 return 前注入 free(memory),非 PGO 路径不注入,避免误伤。 - model_serialize.cc:1143:LoadWeightFromFile 分配前加 2GB 上界(kMaxWeightLength = 2GiB)。 - graph_utils.cc:1030:ConvertFileConstToConst 加相同 2GB 上界(kMaxFileLength = 2GiB)。 ## 变更类型 - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构 - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue #261 #262 #264 #265 #266 #267 #268 #269 #270 #271 #272 #273 #274 #275 #276 ## 如何测试 1. 编译 Autofuse 与 SuperKernel 模块无报错(sh build.sh -j 8)。 2. 人工走读每处加固点,确认与原 issue 分析一致,不破坏原正常逻辑分支。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我在标题中使用了合适的类型标签 - [x] 我已详细阅读了贡献指南(CONTRIBUTING.md) ## 其他信息 See merge request: cann/graph-autofusion!1791 | 23 小时前 | |
【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 | 3 个月前 |