文件最后提交记录最后更新时间
【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!2031 个月前
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 个月前
feat(superkernel): add early-start option metadata Co-authored-by: yrz1027<yangruizhi5@huawei.com> # message auto-generated for no-merge-commit merge: !386 merge feat/aot-early-start-options into master feat(superkernel): add early-start option metadata Created-by: yrz1027 Commit-by: yrz1027 Merged-by: cann-robot Description: # Pull Request ## 描述 本 PR 是 AOT early-start 特性的第一阶段拆分,只引入 host 侧 option 和 kernel metadata plumbing,便于先单独 review 基础接口与元数据承载。 本次变更包含: - 新增 aclskOptionType::EARLY_STARTaclskEarlyStartOption,对外暴露 early-start 开关。 - 在 SuperKernelOptionsManager 中注册默认 early_start option,并支持 SetOptOptionValue / ToJson。 - 将解析出的 KernelCapBits 保存到 KernelInfos::capBits,为后续 host early-start lowering 读取 kernel capability 做准备。 - 补充 options manager UT,覆盖 early_start option 的 JSON 输出。 本 PR 不包含: - kernel 侧 early-start entry / set-wait 实现。 - host 侧 early-start sync lowering。 - constant codegen 同步路径清理。 这些内容会在后续拆分 PR 中单独提交。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 暂无。 ## 如何测试 描述测试此变更的步骤和前提条件: 1. git diff --check 2. bash build.sh -u -c --impl=cpp --no-autofuse 验证结果:AOT C++ UT 运行通过,783 tests from 34 test suites,覆盖率收集目标 collect_coverage_data 构建成功。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 当前分支仅包含 5 个文件变更:super_kernel.hsk_options_manager.cppsk_node.{h,cpp}test_sk_options_manager.cpp。该 PR 作为 early-start 原型拆分后的基础依赖,后续 PR 会基于此继续提交 kernel 侧和 host lowering 逻辑。 See merge request: cann/graph-autofusion!38611 天前
feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control Co-authored-by: XuebinYang<yangxuebin6@hisilicon.com> # message auto-generated for no-merge-commit merge: !410 merge master into master feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control Created-by: XuebinYang Commit-by: XuebinYang Merged-by: cann-robot Description: # Pull Request ## 描述 feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control - Add bit 5 (enable_dcci_after_func) to TaskInfo.debugOptions - Host precomputes DCCI decision, kernel only checks single bit - Rename dcci to disableDcci and JudgeDisableKernelDcci to MatchKernelNameInList ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. ut 测试通过 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!4109 天前
【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!2031 个月前
feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control Co-authored-by: XuebinYang<yangxuebin6@hisilicon.com> # message auto-generated for no-merge-commit merge: !410 merge master into master feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control Created-by: XuebinYang Commit-by: XuebinYang Merged-by: cann-robot Description: # Pull Request ## 描述 feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control - Add bit 5 (enable_dcci_after_func) to TaskInfo.debugOptions - Host precomputes DCCI decision, kernel only checks single bit - Rename dcci to disableDcci and JudgeDisableKernelDcci to MatchKernelNameInList ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. ut 测试通过 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!4109 天前
feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control Co-authored-by: XuebinYang<yangxuebin6@hisilicon.com> # message auto-generated for no-merge-commit merge: !410 merge master into master feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control Created-by: XuebinYang Commit-by: XuebinYang Merged-by: cann-robot Description: # Pull Request ## 描述 feat(superkernel): add enable_dcci_after_func bit for simplified kernel-side DCCI control - Add bit 5 (enable_dcci_after_func) to TaskInfo.debugOptions - Host precomputes DCCI decision, kernel only checks single bit - Rename dcci to disableDcci and JudgeDisableKernelDcci to MatchKernelNameInList ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. ut 测试通过 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!4109 天前
[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!34421 天前
【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!1891 个月前
【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!742 个月前
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》,了解代码实现、测试方法等信息。