已合并
【fix】: 修复重复声明output/dim_a && 修复Reduce多同输入节点断图逻辑问题 && 断图后group按照依赖关系重新排序 #1736
【fix】: 修复重复声明output/dim_a && 修复Reduce多同输入节点断图逻辑问题 && 断图后group按照依赖关系重新排序 #1736
已合并
WangYanMale创建于 16 天前
WangYanMale成员
16 天前

Pull Request

描述

1、修复重复声明output/dim_a;
2、修复Reduce多同输入节点断图逻辑问题;
3、断图后group按照依赖关系重新排序。

变更类型

请选择本次引入的变更类型:

关联的Issue

NA

如何测试

构造reduce场景需要断图的结构,其断开的节点为多同输出节点(比如Mul的两个输入为同一个)。

核对清单

其他信息

NA

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 WangYanMale 的贡献)
WWangYanMale成员
16 天前 添加了label:enhancement
WWangYanMale成员
16 天前 创建了 pull request,commit 8c43b5b2
atomgit-bot
atomgit-bot
16 天前 评论:

变更摘要

本次 PR 主要修复 codegen 生成重复 output 声明的问题:将跨循环 Tensor 收集的数据结构从「按轴维度聚合的调用列表」细化为「按轴维度、再按具体内层 Loop * 分组」,从而避免在生成循环体时对同一批 ApiCall 重复执行输出分配;同时将 control_dis_enable_cache_a 变量改为在 Loop::Generate 入口统一声明,避免循环内重复声明。

主要改动

  • CollectTensorCrossLoop 接口与数据结构调整: 将入参类型由 std::map<ascir::AxisId, std::vector<ApiCall *>> 改为 std::map<ascir::AxisId, std::map<Loop *, std::vector<ApiCall *>>>,并在收集时按 body.loop 作为内层键写入 api_calls,使跨循环调用与具体循环一一对应。
  • GenerateBody 按具体循环过滤调用: 将 target_calls 改为 cross_loop_map,在生成每个内层 LoopType::LOOP 时通过 cross_loop_map.find(body.loop) 仅对该循环关联的调用执行 AllocOutputsSyncOutputs,避免重复 output 声明。
  • control_dis_enable_cache_a 声明位置调整: 在 Loop::Generate 中当 is_graph_has_reduce_node 时统一声明 bool control_dis_enable_cache_a = true;,原 GenerateLoop 内对该变量的 bool 声明改为赋值 control_dis_enable_cache_a = true;,避免重复声明。
  • 头文件声明同步: codegen_kernel_loop.hCollectTensorCrossLoop 的声明同步更新为新的 std::map<ascir::AxisId, std::map<Loop *, std::vector<ApiCall *>>> 签名。
likedislike
atomgit-bot
atomgit-bot
16 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
16 天前 添加了label:cann-cla/yes
此处折叠了93条消息 查看更多
wangxiaotian995成员
13 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
13 天前 添加了label:lgtm
张德鹏成员
13 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
13 天前 添加了label:approved
CANN-robotCANN-robot成员
13 天前 合入了pull request