已合并
【fix】: 解决同级多for循环变量未定义问题 #2018
WangYanMale创建于 13 天前
【fix】: 解决同级多for循环变量未定义问题 #2018
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 WangYanMale 的贡献)13 天前 添加了label:enhancement
13 天前 创建了 pull request,commit 27b10d08
atomgit-bot
13 天前 评论:
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()排序的规则不变。


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


yangyongqiang
11 天前 评论:
11 天前 评论:
/approve


11 天前 添加了label:approved
11 天前 合入了pull request
Pull Request
描述
解决同级多for循环变量未定义问题
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
构造两个reduce水平融合的场景
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。