已合并
perf: 完善 Autofuse V2 Broadcast 性能建模(#235) #1812
高煜博创建于 8月24日
perf: 完善 Autofuse V2 Broadcast 性能建模(#235) #1812
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 高煜博 的贡献)atomgit-bot
8月24日 评论:
8月24日 评论:
🤖 正在生成合并请求摘要,请稍候…


不准确?
atomgit-bot
8月24日 评论:
8月24日 评论:
🤖 AI 代码检视正在进行中,请稍候…


不准确?
8月24日 添加了label:stat/needs-squash
8月24日 添加了label:cann-cla/yes
此处折叠了236条消息 查看更多
CANN-robot
9月10日 评论:
9月10日 评论:
The following label is not ready.
approved: Please wait for committers to review the code.


9月10日 解决了最后一个问题
yangyongqiang
9月10日 评论:
9月10日 评论:
/approve


9月10日 添加了label:approved
9月10日 合入了pull request
Broadcast 性能建模实施计划
目标: 为 Broadcast V2 建立与 AscendC 实现分支一致的 AIV_VEC 性能模型,并通过实现分支与 perf 分支一致性测试。
架构: 从
BroadcastRegApiCall::Generate透传实际Duplicate/BroadcastExtend语义参数;ATT 侧按公共 tiling、last-axis、non-last-axis 分层复刻实现文件中的分支和 Reg API 调用。性能公式统一使用Expression和TernaryOp,执行次数严格按源码循环层级计算。技术栈: C++、ge::Expression、ATT
VfPerfUtils、TernaryOp、gtest、现有 V35 ATT GLOB 构建体系。全局约束
autofuse/v35/codegen/reg_api_call/reg_broadcast_api_call.cpp。autofuse/v35/ascendc/api_regbase/broadcast_3510_extend_impl.h和broadcast_gather_3510_extend_impl.h。repeatTimes * size0 * size1 * ...及源码实际循环层级计算。kPlaceholder。kLoad和kStore。Expression。IsBroadcastConstantTensor(x)路径使用kDuplicate查表。kPlaceholder必须能追溯到唯一的真实 MicroAPI、方向/模式和 dtype。DataCopy分支按照一次kload计算。ceil、VL、block 元素数和 stride 派生计算。kPlaceholder引入的性能误差,但不能忽略分支选择、真实 MicroAPI、dtype 和执行次数错误。if/else、wrapper 和 helper 都必须关联唯一 perf 分支、MicroAPI 计数和测试用例。文件边界
参数链路
autofuse/common/ascir_node_param/ascir_node_param.hautofuse/common/ascir_node_param/ascir_param_builder.cppautofuse/v35/codegen/reg_api_call/reg_broadcast_api_call.cppautofuse/att/gen_model_info/parser/specific_params_builder.cppautofuse/att/gen_model_info/parser/tuning_space.hautofuse/att/gen_model_info/api_perf_register/api_perf.hautofuse/v35/att/api_perf_register/ascir_api_perf_v2.cpp性能模型
autofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_api_perf_v2.hautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_api_perf_v2.cppautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_perf_utils_v2.hautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_perf_utils_v2.cppautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_last_axis_perf_v2.hautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_last_axis_perf_v2.cppautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_nlast_axis_perf_v2.hautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_nlast_axis_perf_v2.cpp测试
autofuse/tests/ut/common/test_ascir_node_params.cppautofuse/tests/v35/ut/codegen/reg_api_call/test_codegen_broadcast_reg_api_call.cppautofuse/tests/v35/ut/att/gen_model_info/api_perf_register/test_broadcast_api_perf_v2.cppautofuse/tests/v35/ut/att/gen_model_info/api_perf_register/test_ascir_perf_v2.cpp不修改
autofuse/v35/ascendc/api_regbase/broadcast*.h、autofuse/optimize/**、autofuse/att/gen_model_info/api_tiling_gen/**、CMake、VectorFunc Broadcast 相关文件。Task 1:增加 Broadcast 参数载荷
文件:
ascir_node_param.h、ascir_param_builder.cpp、tuning_space.h、api_perf.h、test_ascir_node_params.cppstruct BroadcastNodeParams { bool valid{false}; bool is_scalar{false}; ge::Expression duplicate_count{ge::Symbol(1U)}; std::vector<ge::Expression> dst_shape; std::vector<ge::Expression> src_shape; };验证:
Task 2:从 Generate 透传实际参数
文件:
reg_broadcast_api_call.cpp、test_codegen_broadcast_reg_api_call.cppTask 3:接通 ATT 参数链和 V2 注册
文件:
specific_params_builder.cpp、ascir_api_perf_v2.cpp、test_ascir_perf_v2.cppTask 4:实现公共 tiling 和计数工具
文件:
broadcast_perf_utils_v2.h/.cppTask 5:实现 scalar、equal-size 和 duplicate 模型
文件:
broadcast_api_perf_v2.h/.cpp、test_broadcast_api_perf_v2.cppkLoad一次;kUpdateMask为ceil(dstSize / VF_LEN);kStore为相同 repeat 次数。Task 6:实现 last-axis 分层模型
文件:
broadcast_last_axis_perf_v2.h/.cpp、test_broadcast_api_perf_v2.cppTask 7:实现 non-last-axis 分层模型
文件:
broadcast_nlast_axis_perf_v2.h/.cpp、test_broadcast_api_perf_v2.cppTask 8:汇总入口和一致性验收
文件:
ascir_api_perf_v2.cpp、test_ascir_perf_v2.cpp、test_codegen_broadcast_reg_api_call.cppExpr res = VfPerfUtils::GetVFHeadCost() + max_latency + all_vf_instruct_cost; res.Simplify(); perf.pipe_res[PipeType::AIV_VEC] = res;Task 9:格式和构建验证
Task 10:last-axis 全分支闭环
依据文件:
autofuse/v35/ascendc/api_regbase/broadcast_extend_impl.hautofuse/v35/ascendc/api_regbase/broadcast_3510_extend_impl.hautofuse/v35/ascendc/api_regbase/broadcast_gather_3510_extend_impl.hautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_last_axis_perf_v2.cppautofuse/tests/v35/ut/att/gen_model_info/api_perf_register/test_broadcast_api_perf_v2.cppTask 11:non-last-axis 全叶子计数闭环
依据文件:
autofuse/v35/ascendc/api_regbase/broadcast_3510_extend_impl.hautofuse/v35/ascendc/api_regbase/broadcast_gather_3510_extend_impl.hautofuse/v35/att/api_perf_register/ascendc_api_perf/broadcast_nlast_axis_perf_v2.cppautofuse/tests/v35/ut/att/gen_model_info/api_perf_register/test_broadcast_api_perf_v2.cppTask 12:constRank 动态 wrapper 和符号条件闭环
验收标准
BroadcastRegApiCall::Generate追溯到 ATT 性能函数。broadcast_extend_impl.h、broadcast_3510_extend_impl.h和broadcast_gather_3510_extend_impl.h中的可达分支在 perf 中有对应模型。AddVfInstructPerf都能追溯到真实 Reg/MicroAPI 调用、dtype 和源码循环次数。kPlaceholder或实现中的真实 dtype。TernaryOp表达式可被现有 ATT 框架消费。sh build.sh -u --module=autofuse_framework -j 8通过。