已合并
【fix】: 解决同级多for循环变量未定义问题 #2018
【fix】: 解决同级多for循环变量未定义问题 #2018
已合并
WangYanMale创建于 13 天前
WangYanMale成员
13 天前

Pull Request

描述

解决同级多for循环变量未定义问题

变更类型

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

关联的Issue

如何测试

构造两个reduce水平融合的场景

核对清单

其他信息

在此添加任何其他关于本次 PR 的说明。

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

变更摘要

该 PR 主要修复图排序时同级存在多个 reduce 算子(水平融合场景)导致的循环变量未定义问题。核心改动位于 autofuse/optimize/schedule_utils.cpp:将原先的 FindNodeSequence 重命名为 CollectPostReduceNodes(相关集合 reduce_sequences 同步更名为 post_reduce_nodes),并在 ScheduleUtils::TopologicalSorting 的排序规则收集阶段,仅对图中遇到的第一个 reduce 节点执行后置节点收集后即 break,避免对同级多个 reduce 节点重复收集造成后续排序逻辑中集合变量未定义/越界的问题。

主要改动

  • 函数与变量重命名:将 FindNodeSequence 重命名为 CollectPostReduceNodes,其参数及函数体内部的 reduce_sequences 集合统一改名为 post_reduce_nodes,语义上更贴合"收集 reduce 节点之后的输出节点"这一行为,不改变原有遍历 GetOutDataNodes 收集后置节点的逻辑。
  • 排序前仅处理首个 reduce 节点:在 ScheduleUtils::TopologicalSorting 中,遍历 graph.GetAllNodes() 找到第一个 IsReduce 节点并调用 CollectPostReduceNodes 后立即 break,从"对所有 reduce 节点都收集"改为"只处理第一个",这是修复同级多 for 循环变量未定义问题的关键行为变化。
  • 比较函数改用新命名:排序规则 lambda 中的判断变量由 is_node1_in_reduce_seq / is_node2_in_reduce_seq 改为 is_node1_post_reduce / is_node2_post_reduce,并引用新的 post_reduce_nodes 集合,保持原有的后置 reduce 节点排后、其余节点按 GetOpDescBarePtr()->GetId() 排序的规则不变。
likedislike
不准确?
atomgit-bot
atomgit-bot
13 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
13 天前 添加了label:cann-cla/yes
此处折叠了91条消息 查看更多
CANN-robotCANN-robot成员
11 天前 添加了label:ci-pipeline-passed
wangxiaotian995成员
11 天前 评论:

/

likedislike
yangyongqiang
yangyongqiang成员
11 天前 评论:

/approve

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