已合并
feat: 新增 Transpose/IsNan/IsFinite V2 性能公式及参数优化 #1764
feat: 新增 Transpose/IsNan/IsFinite V2 性能公式及参数优化 #1764
已合并
gaoxin创建于 8月18日
gaoxin成员
8月18日

Pull Request

描述

新增 Transpose、IsNan、IsFinite 三个算子的 V2 ATT 性能建模公式,替换原有的 GetPerfFunc(kUnitVector) 通用评估,提升性能评估精度。

Transpose:按 total_dim / inner_dim 分场景(Dim2Inner1、Dim3Inner1/2、Dim4Inner1/2/3、Fallback)构建索引生成与扩展搬运公式,支持 1-3 个内层维度的索引序列生成建模及多层外层循环的 Gather/Store 搬运建模。

IsNan/IsFinite:提取 UnaryBitWidthChange 通用公式,call_count 放在最外层乘法;各算子类型统一 dtype(Duplicate→kInt8、Ne→kUInt8、Select/Store→kFloat32、MaskPack→kUInt8)。

背景

当前 IsNan、IsFinite、Transpose 在 V2 性能注册中使用 GetPerfFunc(kUnitVector) 通用评估,无法反映实际 AscendC codegen 的指令序列,导致性能公式精度不足。

修改方案

  1. 新增参数结构:UnaryBitWidthChangeNodeParams、TransposeNodeParams 及对应的构建和填充逻辑
  2. 新增 TransposePerf:按维度组合分 7 个场景构建索引生成 + 扩展搬运公式
  3. 新增 IsNanPerf/IsFinitePerf:共享 AddUnaryBitWidthChangeCommonPerf,公式为 (vfhead + max_latency + all_cost) * call_count
  4. 参数优化:移除未使用的 tail_repeat 参数,补充 kSymFive/kSymFour 常量,GetUnaryBitWidthChangeCallCount fallback 使用 input_dims 全量乘积
  5. 补充注册:新增 CompareScalarGE 性能表项
  6. 切换注册入口:IsNan/IsFinite/Transpose 注册切换至专用 V2 性能函数

测试

合入前:

总共 成功 失败
307 83 224

合入后:

总共 成功 失败
307 127 180

回正44条

变更类型

核对清单

其他信息

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

变更摘要

本 PR 为 Transpose、IsNan、IsFinite 三个算子新增 V2 ATT 性能建模公式,替换原有的 GetPerfFunc(kUnitVector) 通用评估:新增 UnaryBitWidthChangeNodeParams、TransposeNodeParams 参数结构,打通从 codegen 参数填充、parser 解析到 V2 性能注册的完整链路;在 ascendc_regbase_perf.cpp 中实现 IsNanPerf/IsFinitePerf(共享 AddUnaryBitWidthChangeCommonPerf 公式)与 TransposePerf(按 total_dim/inner_dim 分 7 个场景的索引生成 + 扩展搬运建模),并将注册入口切换为专用 V2 函数,以贴近实际 AscendC codegen 指令序列,提升性能评估精度。

主要改动

  • 新增参数结构及注册/填充链路: 在 ascir_node_param.h 中新增 UnaryBitWidthChangeNodeParams(valid、cal_count、outer_repeats、input_strides、output_strides)与 TransposeNodeParams(valid、inner_dim、total_dim、outer_loop_axes、output_dims 及 strides),扩展 AnySpecificParams variant,并在 NodeDetail/NodeInfo 中新增对应字段;ascir_param_builder.cpp 新增 RegisterUnaryBitWidthChangeAscirNodeParams/RegisterTransposeAscirNodeParams,specific_params_builder.cpp 新增 FillUnaryBitWidthChangeParams/FillTransposeParams,codegen 侧 reg_transpose_api_call.cpp 与 unary_bitwidth_change_api_call_v2.cpp 分别新增 FillTransposeNodeParams/FillUnaryBitWidthChangeNodeParams 完成参数填充。
  • 新增 IsNanPerf/IsFinitePerf 公式: 共享 AddUnaryBitWidthChangeCommonPerf(kDuplicate→kInt8、kUpdateMask/kLoad→输入 dtype、kNe→kUInt8、kSelect/kStore→kFloat32),IsFinitePerf 额外增加 kCompareScalarEQ 与 kMaskOr;call_count 置于最外层乘法,最终公式为 (GetVFHeadCost() + max_latency + all_vf_instruct_cost) * call_count,GetUnaryBitWidthChangeCallCount 在参数无效时 fallback 使用 input_dims 全量乘积。
  • 新增 TransposePerf 公式: 按 total_dim/inner_dim 组合分 Dim2Inner1、Dim3Inner1/2、Dim4Inner1/2/3、Fallback 共 7 个场景,通过 AddGenOne/Two/ThreeInnerDimTransposeIndexPerf 建模 1-3 个内层维度的索引序列生成(Arange/kPlaceholder、kMuls、kAdds、kDiv、kMul、kCompareScalarGE、kSelect 等指令),通过 AddTransposeExtendPerf 及 One/Two/ThreeOuterDim 变体建模多层外层循环的 kLoad + Gather(kPlaceholder) + kStore 搬运,最终结果乘以 outer_count。
  • 注册切换与常数/性能表补充: ascir_api_perf_v2.cpp 新增 IsNanApi/IsFiniteApi/TransposeApi,将 kIsnan/kIsFinite/kTranspose 的 V2 注册由 GetPerfFunc(kUnitVector) 切换为 GetPerfFunc(kIsnan + "V2")/kIsFinite + "V2"/kTranspose + "V2";att_const_values.h 新增 kSymFive 常量,perf_param_v2.cpp 新增 kCompareScalarGE 性能表项。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月18日 评论:

代码审查

✅ 未发现问题

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

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 ✅ yangyongqiang0606, zhang_shengjie, xchu42 (3/2) ✅ yangyongqiang0606 (1/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
此处折叠了139条消息 查看更多
xchu42
xchu42成员
9月3日 评论:

/lgtm

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

/approve

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