已合并
fix: 默认关闭Split模板打分 #1788
fix: 默认关闭Split模板打分 #1788
已合并
zhang_shengjie创建于 8月20日
zhang_shengjie成员
8月20日

Pull Request

1. 主要解决的问题

  • Split 多模板场景此前会生成 case 级打分函数,可能改变默认模板选择;本 PR 要求默认关闭 Split/Slice 的 tiling case 级打分,但保留 Split/Slice 模板和候选生成;不再通过环境变量重新开启打分。

2. 修改方案

  • SplitFusionCaseGenerator 保持原有模板和候选生成流程,并按模板数量对齐 score_functions;仅不再生成 Split score function,空字符串表示该 case 不参与 score。Slice 的非连续 Load 继续由既有 NDDMA score eligibility 跳过 score。删除相关生成封装和环境变量控制。
  • IdentifyZeroStrideAxisIndices:输出 view 缺少当前调度轴时按该输出沿轴不变化处理,继续保留 stride 长度校验。
  • IndirectLoad SIMT:完成 Broadcast 折叠后再次搬移 input-pre 单目链,确保 SIMT 输入边界仍为原始 GM Load。
  • 本次提交不修改 NDDMA 建模公式或模板候选,仅保留既有对 Slice/Split 场景的 score eligibility 约束。

3. 代码修改流程图

flowchart TD
    A[SplitFusionCaseGenerator 生成模板] --> B{多模板?}
    B -- 否 --> C[生成单模板]
    B -- 是 --> D[保持 score_functions 与模板数量对齐]
    D --> E[不生成 Split score,使用默认选择]
    F[IndirectLoad SIMT] --> G[折叠直连 Broadcast]
    G --> H[再次搬移 input-pre 单目链]
    H --> I[GM Load 作为 SIMT 输入边界]
    J[Zero-stride 轴分析] --> K{输出 view 是否包含调度轴?}
    K -- 否 --> L[按零 stride 处理]
    K -- 是 --> M[按输出 stride 分析]

4. 测试用例说明

4.1 LLT测试

  • Split UT:SplitScheduleCaseGeneratorTest.split_data_to_different_axis 直接断言两个模板均生成、score_functions 与模板数量对齐,且两个 score 字符串均为空;不再测试环境变量开关。
  • 本地构建:cmake --build build --target optimize_ut -j 8,通过。
  • 本地 IndirectLoad 广播 codegen ST:
    ctest --test-dir build/autofuse/tests --output-on-failure -R '^indirect_load_broadcast_.*_codegen_v2$' -j 1,15/15 通过。
  • 本地 framework 复现用例:
    optimize_st --gtest_filter=OptimizerSt.ScalarBroadcastOptimization_Two_Scalar,通过。
  • 提交前检查:pre-commit(clang-format、codespell、OAT 等)通过。
  • 远端流水线:#1066483(SHA 44e6a5490644)compile、UT、ST 全部通过。
  • 既有全量 optimize_ut 曾在非 Split 用例 TestOptimizer.ReOrderMergeAxisGraph_scheduler 启动处异常退出,Split 专项构建和测试不受影响。

4.2 BBIT测试

指标 原始 v1(小尾轴) v2(尾轴对齐) v3(关闭打分)
Pass数 38 40 54 102
净增Pass - +2 +16 +64
Fail→Pass - ~2 ~46 71
Pass→Fail - ~0 ~30 7
迭代提升(vs orig) - 7 14 21
迭代退化(vs orig) - 98 95 25
迭代加速比中位数 0.961 1.060 1.087 0.992
加速比<1用例数 113 59 43 72

叠加关闭打分后,有102个用例通过了:
v3 patch(关闭Split的ScheduleResult打分)效果显著:

5. 变更类型

6. 关联的 Issue

  • 暂无。

7. 核对清单

8. 其他信息

  • Split/Slice 的模板和候选未关闭;仅关闭 tiling case 级 score,不支持通过环境变量重新开启 Split score。
  • 未将 docs/design/slice_non_contiguous_performance.md 纳入 Git 跟踪。
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhang_shengjie 的贡献)
Zzhang_shengjie成员
8月20日 创建了 pull request,commit 0ed50afd
atomgit-bot
atomgit-bot
8月20日 评论:

变更摘要

本 PR 修复 Split 多模板场景下无条件生成 SplitScoreFunctionGenerator 打分函数、可能改变默认模板选择的问题:默认关闭 Split 模板打分,仅当环境变量 AUTOFUSE_DFX_FLAGS 配置 --enable_split_score_func=true 时才恢复原有打分行为。该开关只影响 SplitFusionCaseGenerator 的打分生成,不改变 NDDMA 模板打分。

主要改动

  • 新增打分开关解析逻辑:在 split_schedule_case_generator.cpp 中新增常量 kEnableSplitScoreFunc 和函数 IsSplitScoreEnabled(),复用 ge::AutoFuseEnvConfigParser 白名单解析 AUTOFUSE_DFX_FLAGS,仅在配置值恰好为 "true" 时返回使能。
  • 条件化生成 UB Split 打分:SplitFusionCaseGenerator::Generate() 的多模板分支中,将无条件调用 GenerateScoreFuncForUbSplit 改为仅在 IsSplitScoreEnabled() 为真时执行;默认情况下 score_functions 仍与模板数量对齐,但 score_functions[0] 保持为空,从而使用默认模板选择。
  • 新增开关双路径测试:在 test_split_schedule_case_generator.cpp 中扩展 split_data_to_different_axis 用例,通过 unsetenv/setenv 控制 AUTOFUSE_DFX_FLAGS,分别验证默认未配置时 score_functions[0] 为空、配置开关后打分函数非空。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月20日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
8月20日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
8月20日 评论:

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.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


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 ✅ 张德鹏, xchu42, wangxiaotian995 (3/2) ✅ 张德鹏 (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
此处折叠了97条消息 查看更多
wangxiaotian995成员
8月24日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
8月24日 添加了label:lgtm
张德鹏成员
8月24日 评论:

/approve

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