文件最后提交记录最后更新时间
【PR】: 解决ut覆盖率生成失败问题 Co-authored-by: JaydenChu<zhumin54@huawei.com> # message auto-generated for no-merge-commit merge: !203 merge master-inc-cov-support-2 into master 【PR】: 解决ut覆盖率生成失败问题 Created-by: JaydenChu Commit-by: JaydenChu Merged-by: cann-robot Description: # Pull Request ## 描述 统一覆盖率检测路径从 src/superkernelsuperkernel,修复覆盖率报告生成失败的问题。 原配置中 --cov=src/superkernel 与实际代码路径 src/jit/superkernel 不匹配,导致覆盖率工具无法找到被测代码,报告为 0%。本次变更将覆盖率检测路径统一为包名 superkernel,使覆盖率报告能够正确生成。 ## 变更类型 - [x] 📦 构建过程或辅助工具的变动 ## 关联的Issue 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 执行 UT 测试并生成覆盖率报告:bash build.sh -u -c 2. 验证覆盖率报告正常生成,行覆盖率约 82% 3. 检查 HTML 报告路径:super_kernel/coverage/ut/html/index.html ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档(developer_guide.md) - [x] 我在标题中使用了合适的类型标签(refactor:) ## 其他信息 修改的文件: - build.sh: 修改 UT 和 ST 覆盖率命令中的 --cov 参数 - super_kernel/docs/developer_guide.md: 更新文档中的覆盖率命令示例 - super_kernel/scripts/sk_st_cfg.toml: 修改 coverage source 配置 - super_kernel/scripts/sk_ut_cfg.toml: 修改 coverage source 配置 See merge request: cann/graph-autofusion!2032 个月前
refactor(aot): align cpp utest coverage flow and execution behavior Co-authored-by: yrz1027<yangruizhi5@huawei.com> # message auto-generated for no-merge-commit merge: !271 merge refactor/aot-cpp-utest-coverage-flow into master refactor(aot): align cpp utest coverage flow and execution behavior Created-by: yrz1027 Commit-by: yrz1027 Merged-by: cann-robot Description: # Pull Request ## 描述 本次 PR 统一整理 build.sh 的测试选择和 coverage 执行链路,让 super_kernel 的 Python/C++ 测试、模块选择、样例运行、打包与覆盖率入口更清晰、可扩展。 主要变更: - 将测试入口统一为 -u/-s + --impl=<py|cpp|all> + --module=<name>,默认模块为 all。 - 通过模块 action handler 分发 py_ut/cpp_ut/py_st/run_example,未实现组合静默跳过,避免因为当前暂未支持 cpp_st 导致默认全量失败。 - AOT C++ UT 改为显式 run/coverage target,避免依赖 POST_BUILD 导致二进制未重编时测试不执行。 - C++ coverage 输出固定到 super_kernel/coverage/cpp_ut,并集中清理 Python/C++ coverage 残留。 - run_llt_binary.sh 保留 gtest filter 预检查,空 --gtest_filter= 不再误触发;临时文件清理由统一 cleanup() 处理。 - --run_example 不再接受可选模块参数,模块选择统一使用 --module,避免 optional-arg 解析跳过后续选项。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [x] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 暂无关联 Issue。 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 历史全量回归已在真实环境串行执行,每个 case 前清理 coverage/prof_result/super_kernel/coverage/.pytest_cache、AOT output、build/**/*.gcda 和临时 package 目录;结果 28/28 通过,日志目录:/tmp/gaf_rebase_full_regression。 2. 历史全量覆盖范围包括:--help-u 全组合、-s 全组合、--run_example 全组合、-c 全组合、--pkg--pkg --cann_3rd_lib_path--build-type Debug、非法 --impl/--module。 3. 本轮 fresh 轻量校验通过:bash -n build.shbash -n super_kernel/tests/aot/cmake/tools/run_llt_binary.sh./build.sh --help。 4. 本轮 fresh 参数解析校验通过:--run_example -u 可正确解析为独立选项;--run_example=superkernel 会明确拒绝,模块需改用 --run_example --module=superkernel。 ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 历史全量回归中,cov_impl_cpp 日志确认执行到 Built target collect_coverage_dataBuild run cpp utest success!pkg_with_third_party 日志确认生成 cann-graph-autofusion_9.0.0_linux-aarch64.run。 See merge request: cann/graph-autofusion!2711 个月前
fix(aot): handle memory waits without notify Co-authored-by: yrz1027<yangruizhi5@huawei.com> # message auto-generated for no-merge-commit merge: !320 merge fix/mem-write-zero into master fix(aot): handle memory waits without notify Created-by: yrz1027 Commit-by: yrz1027 Merged-by: cann-robot Description: # Pull Request ## 描述 修复 memory write 经过 wait rule 检查后没有生成 notify 时,wait 节点无法按 valueBreakerBypass 选项控制可融性的问题。 主要变更: - 将 valueBreakerBypass 的语义从 write/wait 调整为 notify/wait,更贴近实际处理结果。 - 当 memory write 经过规则检查后没有 notify 时,不再直接失败,而是将 wait 视为 unpaired wait,由 0b10 控制是否可融。 - reset 节点只保留同步/保序语义,不再因为 paired bypass 被标记为可融。 - no-write wait 场景统一建立 wait association,并由 unpaired bypass 控制可融性。 - 补充/更新 graph 与 node UT,覆盖 no-notify、reset 不可融、unknown flag 保持原状等场景。 ## 变更类型 - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 无 ## 如何测试 1. git diff --check --cached 2. bash build.sh --module=superkernel --impl=cpp --ut --no-autofuse -j 8 测试结果: - superkernel cpp UT 全量通过:702/702 tests passed。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 See merge request: cann/graph-autofusion!3201 个月前
sync check bug Co-authored-by: hujiawen_kaven<hujiawen5@hisilicon.com> # message auto-generated for no-merge-commit merge: !367 merge sk_sync_check_bug into master sync check bug Created-by: hujiawen_kaven Commit-by: hujiawen_kaven Merged-by: cann-robot Description: # Pull Request ## 描述 sync check bug ## 变更类型 请选择本次引入的变更类型: <!-- [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!36723 天前
【PR】: 解决ut覆盖率生成失败问题 Co-authored-by: JaydenChu<zhumin54@huawei.com> # message auto-generated for no-merge-commit merge: !203 merge master-inc-cov-support-2 into master 【PR】: 解决ut覆盖率生成失败问题 Created-by: JaydenChu Commit-by: JaydenChu Merged-by: cann-robot Description: # Pull Request ## 描述 统一覆盖率检测路径从 src/superkernelsuperkernel,修复覆盖率报告生成失败的问题。 原配置中 --cov=src/superkernel 与实际代码路径 src/jit/superkernel 不匹配,导致覆盖率工具无法找到被测代码,报告为 0%。本次变更将覆盖率检测路径统一为包名 superkernel,使覆盖率报告能够正确生成。 ## 变更类型 - [x] 📦 构建过程或辅助工具的变动 ## 关联的Issue 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 执行 UT 测试并生成覆盖率报告:bash build.sh -u -c 2. 验证覆盖率报告正常生成,行覆盖率约 82% 3. 检查 HTML 报告路径:super_kernel/coverage/ut/html/index.html ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档(developer_guide.md) - [x] 我在标题中使用了合适的类型标签(refactor:) ## 其他信息 修改的文件: - build.sh: 修改 UT 和 ST 覆盖率命令中的 --cov 参数 - super_kernel/docs/developer_guide.md: 更新文档中的覆盖率命令示例 - super_kernel/scripts/sk_st_cfg.toml: 修改 coverage source 配置 - super_kernel/scripts/sk_ut_cfg.toml: 修改 coverage source 配置 See merge request: cann/graph-autofusion!2032 个月前
fix(aot): route destroy callback logs to model context Co-authored-by: yrz1027<yangruizhi5@huawei.com> # message auto-generated for no-merge-commit merge: !375 merge fix/sk-resource-destroy-log-context into master fix(aot): route destroy callback logs to model context Created-by: yrz1027 Commit-by: yrz1027 Merged-by: cann-robot Description: # Pull Request ## 描述 修复 SuperKernel 资源销毁回调日志可能写入当前线程正在处理的 modelRI 日志文件的问题,并收敛资源分配前的回调注册语义。 本次变更包含: - 在 OnModelDestroy 中新增局部 RAII 日志上下文,进入回调时临时设置当前线程 logger modelRI 为被销毁的 modelRI,并切回 default handle,使 SK_LOG* 按现有日志路由写入该 modelRI 对应的 super_kernel.log。 - RAII 析构时恢复回调线程原有的 modelRI 和 handle,避免影响同线程后续日志;FileHandleManager 的当前 handle 是 thread-local,不影响其他线程。 - 将销毁回调注册接口收敛为 CallbackRegister,并在 aclskOptimize 开始阶段提前注册。 - AllocForModel 不再兜底注册 callback,只强校验当前 model 是否已经注册销毁回调;未注册时直接返回失败并打印错误日志,避免掩盖异常生命周期路径。 - 对 callback 已注册的幂等路径补充日志,便于定位重复注册场景。 - 同步更新 SkResourceManagerSkScopePostprocess 相关 UT,显式模拟入口注册语义。 影响范围:仅影响 AOT SuperKernel 资源销毁回调注册、资源分配前置校验和销毁回调日志归属,不改变资源释放语义,也不改变 callback userData 仍传递 modelRI 的设计。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 执行 bash build.sh -u --impl=cpp --no-autofuse -c 2. 结果:715 tests from 32 test suites 全部通过 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - Base: master - Source branch: fix/sk-resource-destroy-log-context - Commit: d45d539 fix(aot): route destroy callback logs to model context See merge request: cann/graph-autofusion!37520 天前
fix(aot): route destroy callback logs to model context Co-authored-by: yrz1027<yangruizhi5@huawei.com> # message auto-generated for no-merge-commit merge: !375 merge fix/sk-resource-destroy-log-context into master fix(aot): route destroy callback logs to model context Created-by: yrz1027 Commit-by: yrz1027 Merged-by: cann-robot Description: # Pull Request ## 描述 修复 SuperKernel 资源销毁回调日志可能写入当前线程正在处理的 modelRI 日志文件的问题,并收敛资源分配前的回调注册语义。 本次变更包含: - 在 OnModelDestroy 中新增局部 RAII 日志上下文,进入回调时临时设置当前线程 logger modelRI 为被销毁的 modelRI,并切回 default handle,使 SK_LOG* 按现有日志路由写入该 modelRI 对应的 super_kernel.log。 - RAII 析构时恢复回调线程原有的 modelRI 和 handle,避免影响同线程后续日志;FileHandleManager 的当前 handle 是 thread-local,不影响其他线程。 - 将销毁回调注册接口收敛为 CallbackRegister,并在 aclskOptimize 开始阶段提前注册。 - AllocForModel 不再兜底注册 callback,只强校验当前 model 是否已经注册销毁回调;未注册时直接返回失败并打印错误日志,避免掩盖异常生命周期路径。 - 对 callback 已注册的幂等路径补充日志,便于定位重复注册场景。 - 同步更新 SkResourceManagerSkScopePostprocess 相关 UT,显式模拟入口注册语义。 影响范围:仅影响 AOT SuperKernel 资源销毁回调注册、资源分配前置校验和销毁回调日志归属,不改变资源释放语义,也不改变 callback userData 仍传递 modelRI 的设计。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 执行 bash build.sh -u --impl=cpp --no-autofuse -c 2. 结果:715 tests from 32 test suites 全部通过 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - Base: master - Source branch: fix/sk-resource-destroy-log-context - Commit: d45d539 fix(aot): route destroy callback logs to model context See merge request: cann/graph-autofusion!37520 天前
[chore]: support_Q2_building_optimization - Replace '${CANN_CMAKE_DIR}/modules' with 'cmake/modules'. - Replace 'find_cann_package' with 'find_package'. Co-authored-by: zhuhaoran5<zhuhaoran5@huawei.com> # message auto-generated for no-merge-commit merge: !344 merge support_Q2_building_optimization into master 【chore】: 支持Q2工程优化 Created-by: zhuhaoran5 Commit-by: zhuhaoran5 Merged-by: cann-robot Description: # Pull Request ## 描述 支持Q2工程优化: 1. 使用 cmake 公共仓的 modules 替换并删除 cmake/modules 2. 使用 cmake 公共仓的 find_cann_package 替换 find_package ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [x] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 按照 README 部署构建环境 2. 执行所有构建场景的脚本命令,能执行成功并且产物包内容与先前一致 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!34427 天前
【PR】: 更新README.md以及相关文档 Co-authored-by: jikai-tyler<jikai5@huawei.com> # message auto-generated for no-merge-commit merge: !4 merge master into master 【PR】: 更新README.md以及相关文档 Created-by: jikai-tyler Commit-by: jikai-tyler Merged-by: turing_project1 Description: # Pull Request ## 描述 更新README.md以及相关文档。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!46 个月前
【PR】: st执行时间优化 Co-authored-by: JaydenChu<zhumin54@huawei.com> # message auto-generated for no-merge-commit merge: !189 merge master-inc-cov-support-1 into master 【PR】: st执行时间优化 Created-by: JaydenChu Commit-by: JaydenChu Merged-by: cann-robot Description: # 描述 为 superkernel 的 UT 和 ST 测试添加 pytest-xdist 并行执行支持,显著提升测试执行效率。通过使用 pip install -e .[dev] 安装开发依赖(包含 pytest-xdist),并在 pytest 命令中添加 -n auto 参数启用并行执行,使测试能够充分利用多核 CPU 资源。 ## 变更类型 - [x] 📦 构建过程或辅助工具的变动 ## 关联的Issue <!-- 无特定 Issue --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 执行不带覆盖率的 ST 测试:bash build.sh -s 2. 执行带覆盖率的 ST 测试:bash build.sh -s -c 3. 执行不带覆盖率的 UT 测试:bash build.sh -u 4. 执行带覆盖率的 UT 测试:bash build.sh -u -c ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档(pyproject.toml 添加依赖) - [x] 我在标题中使用了合适的类型标签(perf:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 ### 修改文件 1. **build.sh** - superkernel_ut(): 修改 pip install 为 .[dev],pytest 添加 -n auto - superkernel_st(): 修改 pip install 为 .[dev],pytest 添加 -n auto 2. **super_kernel/pyproject.toml** - dev 依赖中添加 pytest-xdist>=3.0.0 ### 性能提升 | 测试类型 | 优化前 | 优化后 | 提升 | |---------|--------|--------|------| | ST 不带覆盖率 | ~9分钟 | ~2分钟 10 秒 | **5 倍** | | ST 带覆盖率 | ~11分钟 | ~2分钟 22 秒 | **5 倍** | | UT 不带覆盖率 | - | - | 并行执行 | | UT 带覆盖率 | - | - | 并行执行 | ### 本地测试结果 - ✅ 32 个 ST 测试用例全部通过 - ✅ 代码覆盖率 83%,满足流水线要求 - ✅ pytest-xdist 正确安装并启用 32 workers See merge request: cann/graph-autofusion!1892 个月前
【PR】: 修复issue问题,降级setuptools版本 Co-authored-by: zhanj<zhanjun6@hisilicon.com> # message auto-generated for no-merge-commit merge: !74 merge b_del_readme into master 【PR】: 修复issue问题,降级setuptools版本 Created-by: zhanj Commit-by: zhanj Merged-by: cann-robot Description: # Pull Request ## 描述 https://gitcode.com/cann/graph-autofusion/pull/74 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!743 个月前
README.md

SuperKernel

原理介绍

SuperKernel 是一种面向网络图模型的调度优化技术。其核心思想是:基于网络图模型中算子的先验信息(如算子类型、前后序依赖关系等),结合即时编译(JIT)能力,将整个网络模型重新编译为单一算子,从而显著降低算子调度开销,并借助 ICache 预取、Early-Start、同步优化、子 Kernel 拆分等优化手段进一步提升性能。

Editor

SuperKernel 的设计初衷是将多个子算子融合成一个 SuperKernel,以节省 N-1 次算子调度开销。然而,为维持子算子间的执行顺序,通常需插入全核同步操作,这在一定程度上削弱了调度优化的收益。得益于编译阶段即可获取全部子算子的先验信息,SuperKernel 可在此基础上实施更多深层优化。

​​1. ICache Preload 优化​

SuperKernel 融合全部算子后,其二进制体积较大。系统在加载算子时通常仅预取入口处指令,导致 SuperKernel 内部大量指令未被预加载至指令缓存(ICache),从而引发较高的 ICache Miss。为此,我们引入 ICache Preload 机制:在当前子算子开始执行前,预加载其后续子算子的代码段,从而有效减少后续算子执行时的 ICache Miss。

Editor

​​2. Early-Start 优化​​

在常规调度中,必须等待前序算子全部执行完成后,才能启动后续算子。然而,多数前序算子的末尾指令为 MTE 数据搬运指令,而后续算子的起始指令通常为与输入数据无关的初始化标量指令。由于这两类指令分属不同计算单元,具备并发执行的条件。Early-Start 技术在前序算子的搬运指令前插入 Set 同步点,在后续算子的初始化指令后插入 Wait 同步点,从而实现两个子算子的部分指令并发执行,提升整体执行效率。

​3. 同步优化 ​​

为保障执行顺序正确,SuperKernel 在各子算子调度之间会插入全核同步操作。对于 Kernel Type 为 Mix 1:2 的混合类型算子,完整的全核同步需等待所有 Aicore 的 Vector 核与 Cube 核均完成同步。SuperKernel 在编译时能够识别每个子算子的类型,因此可针对前后子算子的 Kernel Type 定制同步范围。例如,对于连续的 Vector 算子,仅需执行全 Vector 核同步即可。通过细粒度控制同步范围,可有效降低子算子间的同步开销。

​​4. 子 Kernel 拆分 ​​

在多核系统中,当多个计算核心执行同一段代码时,会并发访问内存中的同一指令地址。这种对同一地址的并发访问会在共享的 L2 Cache 层面形成串行化访问队列,引发资源争用,削弱多核并行带来的性能增益。为解决该问题,SuperKernel 将子 Kernel 代码复制为多份副本,使不同核心能根据核 ID 映射到不同的物理地址执行。这一方法有效缓解了多核对同一指令地址的争用,显著提升算子执行效率。 ​

Editor

此外,SuperKernel 还支持基于内存语义的 Notify 与 Wait 事件,以适配 Tiling 下沉与 Weight 预取等场景。Tiling 下沉算子指的是 Tiling 计算依赖前序算子的输出结果,为避免主机与设备间的频繁交互,将 Tiling 计算部署于 AICpu 执行的算子。若 SuperKernel 融合了该 Tiling 算子的前序算子,则需在前序算子执行完成后通过 Notify 事件通知 AICpu 启动 Tiling 计算;若融合了 Tiling 下沉算子本身,则需通过 Wait 事件等待 AICpu 完成 Tiling 计算后再执行 Device 侧计算。Weight 预取则借助 CMO 任务调用专用硬件单元 SDMA,将数据提前加载至 L2 Cache,以提升计算效率。SDMA 与 Aicore 之间的协作正是通过内存语义的 Notify/Wait 事件实现的。

Editor


目录结构

super_kernel/
├── docs                   # 文档介绍
├── examples               # 示例脚本或 Notebook,演示典型用法
├── scripts                # 脚本路径
├── src                    # 业务代码入口,后续根据功能划分模块
│   └── superkernel        # SuperKernel 业务代码
├── tests                  # 测试工程目录
│   ├── st                 # System Test
│   ├── ut                 # Unit Test
│   └── utils              # 通用校验与工具函数
├── CMakeLists.txt         # CMake 配置文件
├── pyproject.toml         # 项目元信息与打包配置
├── README.md
└── requirements-dev.txt   # python 依赖配置文件

构建与安装

参考执行构建

开发者

开发者请查阅《Developer Guide》,了解代码实现、测试方法等信息。