已合并
【fix】: Restore the fusible state of the kernel node during graph partitioning #1245
【fix】: Restore the fusible state of the kernel node during graph partitioning #1245
已合并
Achilles_d创建于 7月9日
Achilles_d
7月9日

Pull Request

描述

当kernel类型节点导致死锁时,节点在死锁节点会标记为不可融,但是该节点会进入后续scope融合,因此本修复将不修改存在死锁节点的可融状态

变更类型

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

关联的Issue

如何测试

描述测试此变更的步骤和前提条件:
1.
2.

核对清单

其他信息

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

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 Achilles_d 的贡献)
AAchilles_d
7月9日 添加了label:enhancement
AAchilles_d
7月9日 创建了 pull request,commit ba33f89e
atomgit-bot
atomgit-bot
7月9日 评论:

变更摘要

本次变更在 DeadlockRefinePass::HandleDeadlockSplit 方法中新增了对死锁节点与等待节点不一致时的处理逻辑。当检测到死锁后,在设置融合失败原因的同时,若死锁节点(deadlockNode)与等待节点(deadlockWaitNode)并非同一节点,则额外将死锁节点标记为可融合(SetIsFusible(true)),以允许该节点在后续流程中继续参与融合,而非被完全排除。

主要改动

  • 死锁节点可融合性标记: 在 HandleDeadlockSplit 中,当 deadlockNode != deadlockWaitNode 时,调用 deadlockNode->SetIsFusible(true),使死锁节点在非等待节点的情况下仍保留融合能力,避免因死锁检测导致不必要的融合阻断。
likedislike
atomgit-bot
atomgit-bot
7月9日 评论:

代码审查

审查总结

本次审查覆盖了 1 个变更文件super_kernel/src/aot/sk_scope_split.cpp

发现的问题

优先级 数量
P0 0
P1 0
P2 1
P3 0

各文件审查结果

  • super_kernel/src/aot/sk_scope_split.cpp:发现 1 个 P2 问题(融合失败原因过期不一致)

整体风险评估

低至中等风险。变更的核心逻辑——在 deadlockNode != deadlockWaitNode 时将死锁节点重置为可融合状态,使其在后续 scopeAfter 重新评估中被 LockDetector 重新检测——在运行时行为上是正确的。唯一的问题是当拆分成功解决死锁后,节点的 fusionFailReason_ 仍保留为 EXIST_DEADLOCK,而 isFusible 已被设为 true,造成了元数据层面的不一致。当前下游消费者(CollectFusionFailStatsProcessScopeBegin)均优先检查 IsFusible() 再使用失败原因,因此不会产生运行时的统计错误,但日志输出会带有误导信息,且可能影响未来直接读取 GetFusionFailReason() 的代码。建议在设置 SetIsFusible(true) 的同时清除过期的失败原因。

类型 数量
🔴 阻塞 0
🟡 建议 1

💬 仅评论

likedislike
CANN-robotCANN-robot成员
7月9日 添加了label:cann-cla/yes
此处折叠了92条消息 查看更多
CANN-robotCANN-robot成员
7月10日 添加了label:approved
XuebinYang成员
7月10日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月10日 添加了label:lgtm
CANN-robotCANN-robot成员
7月10日 解决了最后一个问题
CANN-robotCANN-robot成员
7月10日 合入了pull request