Pull Request已成功合入, 合并人@CANN-robot
(感谢 gaoxin 的贡献)变更摘要
此 PR 主要目标是移除 PlatformV2 下 Transpose 调度 case 的打分函数生成逻辑。通过新增 TransposeFusionCaseGeneratorV2 子类,复用了原有 graph 生成逻辑,但将 GenerateScoreFuncForUbReorder 覆盖为空实现;PlatformV2 切换使用该 V2 生成器。同时,为 Where 节点的性能建模引入了 WhereNodeParams 参数结构,重构了 WherePerf 实现以支持更精细的分支(单维/二维扩展),并在代码生成和解析侧同步填充该参数。
主要改动
-
新增
TransposeFusionCaseGeneratorV2并切换PlatformV2:在transpose_schedule_case_generator_v2.h/.cpp中新增类继承TransposeFusionCaseGenerator,将GenerateScoreFuncForUbReorder覆盖为空实现;platformv2.cpp中将TransposeFusionCaseGenerator()替换为TransposeFusionCaseGeneratorV2(),从而跳过 Transpose 打分函数生成。 -
GenerateScoreFuncForUbReorder可覆盖化:在基类TransposeFusionCaseGenerator中,该方法从private static改为protected virtual,使派生类能够覆盖其行为。 -
新增
WhereNodeParams并重构WherePerf性能建模:在ascir_node_param.h中新增WhereNodeParams结构体(含valid、is_bcast_src0/src1、outer_call_count、output_dims/strides等字段),并加入AnySpecificParamsvariant;WherePerf根据where_node_params.valid标志分派到AddWhereExtendPerf(进而调用AddWhereImplPerf或AddWhereExtend2DPerf)或回退到AddLegacyWherePerf,并支持按outer_call_count缩放结果。 -
代码生成侧同步填充
WhereNodeParams:reg_where_api_call.cpp中新增FillWhereNodeParams、BuildWhereLoopParams、FillCurrentWhereNodeParams等函数,在WhereRegApiCall::Generate的各分支(无循环/双标量/单标量/普通)中调用FillCurrentWhereNodeParams,将循环合并信息写入节点的扩展属性;同时修改了outer_repeats的循环生成逻辑以适配GetWhereOuterForRepeats。 -
解析侧支持 Where 节点参数提取:
specific_params_builder.cpp中新增FillWhereParams,对kWhere和kSelect类型节点从AscirNodeParams提取WhereNodeParams并写入NodeInfo;api_perf.h的NodeDetail和tuning_space.h的NodeInfo中同步新增where_node_params字段。


代码审查
审查总结
逐文件审查结果:
| 文件 | 审查结论 |
|---|---|
autofuse/att/gen_model_info/api_perf_register/api_perf.h |
无问题 — 新增 where_node_params 字段,类型正确,与其他 params 成员一致 |
autofuse/att/gen_model_info/parser/specific_params_builder.cpp |
无问题 — 新增 FillWhereParams 函数,遵循 FillCompareParams 等已有函数的模式;调度分支 kWhere/kSelect 正确 |
autofuse/att/gen_model_info/parser/tuning_space.h |
无问题 — 新增 where_node_params 字段,默认构造保证 valid=false |
autofuse/common/ascir_node_param/ascir_node_param.h |
无问题 — 新增 WhereNodeParams 结构体并加入 AnySpecificParams variant,与其他 params 模式一致 |
autofuse/optimize/task_generator/transpose_schedule_case_generator.h |
无问题 — GenerateScoreFuncForUbReorder 从 private static 改为 protected virtual,供 V2 子类覆盖,调用者通过 this-> 调用保持兼容 |
autofuse/tests/v35/ut/att/gen_model_info/api_perf_register/test_ascir_perf_v2.cpp |
无问题 — 新增 5 个测试用例覆盖 Where 1D/2D/B16/B32/B8/B64 等主要分支 |
autofuse/v35/att/api_perf_register/ascendc_regbase_perf.cpp |
1 个问题 — AddWhereExtend2DPerf B16/B32 2D 分支丢弃 row_max_latency(P2) |
autofuse/v35/att/api_perf_register/ascir_api_perf_v2.cpp |
无问题 — WhereApi 正确拷贝 node.where_node_params |
autofuse/v35/codegen/reg_api_call/reg_where_api_call.cpp |
无问题 — FillWhereNodeParams 正确构建并存储 WhereNodeParams;GetWhereOuterForRepeats 调用点均有 size 保护 |
autofuse/v35/codegen/reg_api_call/reg_where_api_call.h |
无问题 — GenerateLoopParams 签名新增 merge_info 输出参数,与实现一致 |
autofuse/v35/optimize/platformv2.cpp |
无问题 — 切换至 TransposeFusionCaseGeneratorV2,仅 PlatformV2 受影响,V1 保持不变 |
autofuse/v35/optimize/task_generator/transpose_schedule_case_generator_v2.cpp |
无问题 — 空实现,score_func 保持为调用者初始化的空字符串,符合"去掉打分函数"的设计意图 |
autofuse/v35/optimize/task_generator/transpose_schedule_case_generator_v2.h |
无问题 — 正确的继承关系,覆盖 GenerateScoreFuncForUbReorder |
按优先级统计:
- P0: 0
- P1: 0
- P2: 1
- P3: 0
整体风险评估: 低风险。核心重构(Transpose V2 空覆盖 + PlatformV2 切换)逻辑正确。唯一发现的问题是 Where 性能估算在 B16/B32 2D 场景下缺少指令延迟分量,可能导致该特定场景的性能预估偏小,建议修复后同步更新测试期望值。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 3 |
⛔ 需要修改


/lgtm


/approve


Pull Request
描述
去掉transpose打分函数
问题
PlatformV2 的 Transpose 调度流程仍复用原有 score function 生成逻辑,但该场景不需要生成 Transpose score function,导致引入不必要的打分逻辑。
修改方案
TransposeFusionCaseGeneratorV2,复用原有 Transpose 调度 case 生成逻辑。GenerateScoreFuncForUbReorder,不再生成 score function。PlatformV2::GenerateTasks,切换使用TransposeFusionCaseGeneratorV2。变更类型
关联的Issue
无。
如何测试
存在打分函数:
去掉打分函数:
核对清单
其他信息