已合并
feat: 【编译性能优化】TilingFunc支持按需引用头文件 #1530
feat: 【编译性能优化】TilingFunc支持按需引用头文件 #1530
已合并
zhang_shengjie创建于 7月28日
zhang_shengjie成员
7月28日

Pull Request

描述

TilingFunc 拆分编译场景中,每个翻译单元原先都会展开完整的 autofuse_tiling_func_common.h,多 group 并发编译时会重复解析与当前 .cpp 无关的标准库、运行时声明和结构体定义。本 PR 引入显式源码依赖模型,将公共内容拆为自包含原子头,并按生成代码的实际依赖渲染每个翻译单元,降低 host 编译的预处理、解析时间和峰值内存。

修改方案

显式依赖模型

新增 autofuse/common/tiling_source_dependencies.h,统一描述和渲染生成源码:

接口 作用
GeneratedCode 保存代码正文及直接依赖
SourceDependencies 分别登记标准头、外部头和生成头
AppendGeneratedCode 合并正文及依赖并集
RenderTranslationUnit 输出仅包含直接依赖的 .cpp
RenderGeneratedHeader 输出自包含原子头

自包含原子头与按需 include

  • 生成 State、Log、PGO、Solver、API 五类原子头,autofuse_tiling_data.h 保持独立。
  • 原子头之间不互相 include,仅包含定义自身所必需的标准头和外部头。
  • group、tail、solver、entry 根据实际生成的代码片段登记依赖;可选的变量关系、PGO runtime、CV fusion、workspace 表达式仅在使用对应能力时引入相关头文件。
  • Operator Cache 的 HIT/MISS/SAVE 日志、命中计数和缓存老化行为保持不变。

TF、Inductor 与兼容路径

  • TF 路径由 asc_codegen_compile.py 按固定 key 将原子头和 .cpp 直接落盘;原子格式不再落盘 autofuse_tiling_func_common.h
  • Inductor 路径通过 marker stream 传输固定 key,由 compile_adapter.py 解析并落盘;marker 不进入实际编译文件。
  • 未携带 State key 的既有输入继续使用 common 格式;Base、Entry、Tail key 保留为历史输入兼容项。
flowchart LR
    A[ATT 与 Codegen 生成代码片段] --> B[登记正文与直接依赖]
    B --> C[统一合并去重与渲染]
    C --> D[State Log PGO Solver API 原子头]
    C --> E[按需 include 的翻译单元]
    D --> F{消费路径}
    E --> F
    F -->|TF| G[按固定 key 直接落盘]
    F -->|Inductor| H[marker 解析后落盘]
    F -->|Legacy| I[common 格式兼容]
    G --> J[host compile]
    H --> J
    I --> J

变更类型

关联的 Issue

无。

测试验证

范围 结果 覆盖点
ATT UT 997/997 通过 依赖登记、原子头生成、Operator Cache 行为
Codegen UT 699 通过,6 跳过 renderer、TF/Inductor entry、marker、兼容路径和 CV fusion
Optimize UT 484 通过,8 跳过 既有功能回归
Common UT 78/78 通过 既有功能回归
Python UT 43/43 通过 固定 key 落盘、marker 解析和兼容路径
Inductor split compile E2E 1/1 通过 多翻译单元独立编译、链接和运行
静态检查 通过 clang-format、git diff check、pre-commit、OAT

编译性能收益

使用相同生成正文和相同翻译单元数量,以“每个翻译单元包含完整 common 头”为基线。测试环境为 CANN 9.1、GCC 9;串行编译 5 轮、8 并发编译 7 轮,取中位数;RSS 为单个编译进程峰值。

场景 TU 预处理行数 串行编译 8 并发编译 max RSS
TF 多 group 8 741912 → 634617,下降 14.5% 7.435 s → 5.548 s,提升 25.4% 1.783 s → 1.279 s,提升 28.3% 192172 KB → 154488 KB,下降 19.6%
Inductor 多 group 6 574836 → 452723,下降 21.2% 6.792 s → 4.840 s,提升 28.7% 2.014 s → 1.635 s,提升 18.8% 225052 KB → 179872 KB,下降 20.1%

TF 和 Inductor 场景的预处理展开代码分别减少约 10.7 万行和 12.2 万行,include tree 节点分别下降 15.4% 和 21.4%。

五组原子头 marker 的协议开销为 460 bytes,相对单组 marker 净增约 368 bytes;在 unique topn 和 multi concat 的 host_impl 中分别约占 0.22% 和 0.15%。marker 解析后不进入 .h/.cpp,不影响 host 编译。

核对清单

变更范围

范围 说明
autofuse/common/ 显式依赖模型和统一 renderer
autofuse/att/autofuse/codegen/ 登记直接依赖并生成自包含原子头和按需翻译单元
autofuse/compiler/python/ TF/Inductor 原子文件落盘和既有格式兼容
autofuse/tests/ 覆盖原子头、按需依赖、缓存行为、marker、兼容路径和多 group 编译
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhang_shengjie 的贡献)
Zzhang_shengjie成员
7月28日 创建了 pull request,commit c6485d49
Zzhang_shengjie成员
7月28日 update merge request[project id: 8005834, iid: 1530, commit_id: cf7522a491928855b6c66542866b8a6b82b401fa] virtual merging success
Zzhang_shengjie成员
7月28日 强制推送  4 个提交:c6485d49-1 commit from branch develop6b31fee9-feat: 【编译性能优化】TilingFunc支持按需引用头文件,f25e4777-fix: 修复 axes reorder solver 生成依赖,cba0be3b-fix: 补全 solver 依赖并放宽 UT 发现超时
Zzhang_shengjie成员
7月28日 update merge request[project id: 8005834, iid: 1530, commit_id: ca42d4feb6203c5be829aee33b4971d58a8ce7d5] virtual merging success
CANN-robotCANN-robot成员
7月28日 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
7月28日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月28日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/graph-autofusion zhanj, wangxiaotian995, xuyafei (3/2) zhanj (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

zhang_shengjie, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
7月28日 将yangyongqiang0606,xchu42,depeng1994,wqtshg_wt,peiyang,shengnan666,XuebinYang,sjtulxh,zhanj,zhujingjing,xuyafei,wangxiaotian995设为评审人
CANN-robotCANN-robot成员
7月28日 将yangyongqiang0606,xchu42,depeng1994,wqtshg_wt,peiyang,shengnan666,XuebinYang,sjtulxh,zhanj,zhujingjing,xuyafei,wangxiaotian995设为审查人
Zzhang_shengjie成员
7月28日 update merge request[project id: 8005834, iid: 1530, commit_id: 061ea740613d6f6a41b8f7f3ccfe7d686dbd4d89] virtual merging success
Zzhang_shengjie成员
7月28日 推送  1 个提交:7c28b0fd-fix: 补全 API tiling 与 duration 生成依赖
Zzhang_shengjie成员
7月28日 update merge request[project id: 8005834, iid: 1530, commit_id: bdcc6a6796aa7be4033037c89bee1e30fdb62dc5] virtual merging success
zhang_shengjie成员
7月28日 评论:

compile

likedislike
Zzhang_shengjie成员
7月28日 update merge request[project id: 8005834, iid: 1530, commit_id: 36aaa290cd54b8dd19690156fa228c096e38a9f6] virtual merging success
CANN-robotCANN-robot成员
7月28日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月28日 评论:

流水线任务触发成功
任务链接 [27e42d500d95403c9b1026fb29920dd7][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_checkpr ✅ SUCCESS
pre_comment ✅ SUCCESS >>>>>
codecheck_codestyle ⚠️ WARNING >>>>>
codecheck_precommit ✅ SUCCESS >>>>>

[2026-07-28 15:41:55]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月28日 评论:

流水线任务触发成功
任务链接 [c012c6e7cd7b4003bd1a984ea4b30791][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
pre_comment ✅ SUCCESS >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>

[2026-07-28 15:47:54]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月28日 评论:

流水线任务触发成功
任务链接 [80a87adad75e4cca875132516487cc97][流水线指导]

任务名称状态日志下载链接
UT_Test_Python_superkernel ✅ SUCCESS >>>>>
ST_Test_Python_superkernel ✅ SUCCESS >>>>>
UT_Test_superkernel ✅ SUCCESS >>>>>
UT_Test_autofuse_framework ❌ FAILED >>>>>
ST_Test_autofuse_framework ✅ SUCCESS >>>>>
UT_Test_autofuse_ascendc_api ✅ SUCCESS >>>>>
ST_Test_autofuse_ascendc_api ✅ SUCCESS >>>>>
ST_Test_autofuse_e2e ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>
likedislike
CANN-robotCANN-robot成员
7月28日 删除了label:ci-pipeline-running
此处折叠了8条事件消息 查看更多
Zzhang_shengjie成员
7月28日 update merge request[project id: 8005834, iid: 1530, commit_id: 20ceaf12b3b317289324d60a32b0434b7a51732b] virtual merging success
zhang_shengjie成员
7月28日 评论:

compile

likedislike
Zzhang_shengjie成员
7月28日 update merge request[project id: 8005834, iid: 1530, commit_id: e0a5e3d77ec201e926f7dc61eee5bc471d02b467] virtual merging success
CANN-robotCANN-robot成员
7月28日 删除了label:ci-pipeline-failed
CANN-robotCANN-robot成员
7月28日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月28日 评论:

流水线任务触发成功
任务链接 [822250d3752142109f8650de60e4c231][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
pre_comment ✅ SUCCESS >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>

[2026-07-28 17:28:42]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月28日 评论:

流水线任务触发成功
任务链接 [0424fac87b51464e9a9a620db9a10a10][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_checkpr ✅ SUCCESS
pre_comment ✅ SUCCESS >>>>>
codecheck_codestyle ⚠️ WARNING >>>>>
codecheck_precommit ✅ SUCCESS >>>>>

[2026-07-28 17:23:14]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月28日 评论:

流水线任务触发成功
任务链接 [55c63b43edb549079d6d258e099d9199][流水线指导]

任务名称状态日志下载链接
UT_Test_Python_superkernel ✅ SUCCESS >>>>>
ST_Test_Python_superkernel ✅ SUCCESS >>>>>
UT_Test_superkernel ✅ SUCCESS >>>>>
UT_Test_autofuse_framework ✅ SUCCESS >>>>>
ST_Test_autofuse_framework ✅ SUCCESS >>>>>
UT_Test_autofuse_ascendc_api ✅ SUCCESS >>>>>
ST_Test_autofuse_ascendc_api ✅ SUCCESS >>>>>
ST_Test_autofuse_e2e ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>

[2026-07-28 17:39:37]    CI执行结束

likedislike
CANN-robotCANN-robot成员
7月28日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月28日 添加了label:ci-pipeline-passed
wangxiaotian995成员
7月28日 评论:

/lgtm

likedislike
xuyafei成员
7月28日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月28日 添加了label:lgtm
zhanj
zhanj成员
7月28日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月28日 添加了label:approved
CANN-robotCANN-robot成员
7月28日 合入了pull request