已合并
【fix】: Restore the fusible state of the kernel node during graph partitioning #1245
Achilles_d创建于 7月9日
【fix】: Restore the fusible state of the kernel node during graph partitioning #1245
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 Achilles_d 的贡献)7月9日 添加了label:enhancement
7月9日 创建了 pull request,commit ba33f89e
atomgit-bot
7月9日 评论:
7月9日 评论:
变更摘要
本次变更在 DeadlockRefinePass::HandleDeadlockSplit 方法中新增了对死锁节点与等待节点不一致时的处理逻辑。当检测到死锁后,在设置融合失败原因的同时,若死锁节点(deadlockNode)与等待节点(deadlockWaitNode)并非同一节点,则额外将死锁节点标记为可融合(SetIsFusible(true)),以允许该节点在后续流程中继续参与融合,而非被完全排除。
主要改动
- 死锁节点可融合性标记: 在
HandleDeadlockSplit中,当deadlockNode != deadlockWaitNode时,调用deadlockNode->SetIsFusible(true),使死锁节点在非等待节点的情况下仍保留融合能力,避免因死锁检测导致不必要的融合阻断。


atomgit-bot
7月9日 评论:
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,造成了元数据层面的不一致。当前下游消费者(CollectFusionFailStats、ProcessScopeBegin)均优先检查 IsFusible() 再使用失败原因,因此不会产生运行时的统计错误,但日志输出会带有误导信息,且可能影响未来直接读取 GetFusionFailReason() 的代码。建议在设置 SetIsFusible(true) 的同时清除过期的失败原因。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


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


7月10日 添加了label:lgtm
7月10日 解决了最后一个问题
7月10日 合入了pull request
Pull Request
描述
当kernel类型节点导致死锁时,节点在死锁节点会标记为不可融,但是该节点会进入后续scope融合,因此本修复将不修改存在死锁节点的可融状态
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
描述测试此变更的步骤和前提条件:
1.
2.
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。