已合并
perf: remove transpose score function #1678
perf: remove transpose score function #1678
已合并
gaoxin创建于 8月8日
gaoxin成员
8月8日

Pull Request

描述

去掉transpose打分函数

问题

PlatformV2 的 Transpose 调度流程仍复用原有 score function 生成逻辑,但该场景不需要生成 Transpose score function,导致引入不必要的打分逻辑。

修改方案

  1. 新增 TransposeFusionCaseGeneratorV2,复用原有 Transpose 调度 case 生成逻辑。
  2. 在 V2 generator 中覆盖 GenerateScoreFuncForUbReorder,不再生成 score function。
  3. 修改 PlatformV2::GenerateTasks,切换使用 TransposeFusionCaseGeneratorV2。

变更类型

关联的Issue

无。

如何测试

存在打分函数:

total 失败 成功
307 180 127

去掉打分函数:

total 失败 成功
307 165 142

核对清单

其他信息

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 gaoxin 的贡献)
Ggaoxin成员
8月8日 创建了 pull request,commit 1371f974
atomgit-bot
atomgit-bot
8月8日 评论:

变更摘要

此 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 等字段),并加入 AnySpecificParams variant;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 字段。

likedislike
不准确?
atomgit-bot
atomgit-bot
8月8日 评论:

代码审查

审查总结

逐文件审查结果:

文件 审查结论
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

⛔ 需要修改

likedislike
不准确?
CANN-robotCANN-robot成员
8月8日 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
8月8日 添加了label:cann-cla/yes
此处折叠了49条消息 查看更多
xchu42
xchu42成员
9月8日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
9月8日 添加了label:lgtm
yangyongqiang
yangyongqiang成员
9月8日 评论:

/approve

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