已合并
fix: 默认关闭Split模板打分 #1788
zhang_shengjie创建于 8月20日
fix: 默认关闭Split模板打分 #1788
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhang_shengjie 的贡献)8月20日 创建了 pull request,commit 0ed50afd
atomgit-bot
8月20日 评论:
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]为空、配置开关后打分函数非空。


不准确?
atomgit-bot
8月20日 评论:
8月20日 评论:
8月20日 添加了label:cann-cla/yes
CANN-robot
8月20日 评论:
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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


此处折叠了97条消息 查看更多
wangxiaotian995
8月24日 评论:
8月24日 评论:
/lgtm


8月24日 添加了label:lgtm
8月24日 添加了label:approved
8月24日 合入了pull request
Pull Request
1. 主要解决的问题
2. 修改方案
SplitFusionCaseGenerator保持原有模板和候选生成流程,并按模板数量对齐score_functions;仅不再生成 Split score function,空字符串表示该 case 不参与 score。Slice 的非连续 Load 继续由既有 NDDMA score eligibility 跳过 score。删除相关生成封装和环境变量控制。IdentifyZeroStrideAxisIndices:输出 view 缺少当前调度轴时按该输出沿轴不变化处理,继续保留 stride 长度校验。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测试
SplitScheduleCaseGeneratorTest.split_data_to_different_axis直接断言两个模板均生成、score_functions与模板数量对齐,且两个 score 字符串均为空;不再测试环境变量开关。cmake --build build --target optimize_ut -j 8,通过。ctest --test-dir build/autofuse/tests --output-on-failure -R '^indirect_load_broadcast_.*_codegen_v2$' -j 1,15/15 通过。optimize_st --gtest_filter=OptimizerSt.ScalarBroadcastOptimization_Two_Scalar,通过。44e6a5490644)compile、UT、ST 全部通过。optimize_ut曾在非 Split 用例TestOptimizer.ReOrderMergeAxisGraph_scheduler启动处异常退出,Split 专项构建和测试不受影响。4.2 BBIT测试
叠加关闭打分后,有102个用例通过了:
v3 patch(关闭Split的ScheduleResult打分)效果显著:
5. 变更类型
6. 关联的 Issue
7. 核对清单
8. 其他信息
docs/design/slice_non_contiguous_performance.md纳入 Git 跟踪。