已关闭
跨片device record event接口构造异常场景引发流同步永久挂死 #901
Louise创建于  8月31日关闭于  9月10日
Louise
8月31日 创建

一、问题概述

aclrtRecordEvent 缺少 Event/Stream 设备归属校验:将 dev1 的 Event
record 到 dev0 的流时接口放行返回 0(污染起点),随后同步链静默断裂,
dev1 流的 SynchronizeStream 永久挂死,污染扩散至进程收尾
(aclFinalize 段错误)。

二、触发条件

  1. 双设备环境(实测:Atlas A3,CANN 9.2.0)
  2. dev1 的 ctx1 内创建 SYNC Event(aclrtCreateEventWithFlag + ACL_EVENT_SYNC)
  3. 切回 dev0 的 ctx0,将该 Event record 到 dev0 的流
  4. dev1 的流再 wait 该被污染的 Event

最小调用序列:


    aclrtSetDevice(0); aclrtCreateContext(&ctx0, 0);
    aclrtSetCurrentContext(ctx0); aclrtCreateStream(&s0);
    aclrtSetDevice(1); aclrtCreateContext(&ctx1, 1);
    aclrtSetCurrentContext(ctx1); aclrtCreateStream(&s1);
    aclrtCreateEventWithFlag(&ev, ACL_EVENT_SYNC);
    aclrtSetCurrentContext(ctx0);
    aclrtRecordEvent(ev, s0);        // 缺陷点:ev属dev1、s0属dev0,返回0放行
    aclrtSynchronizeEvent(ev);       // 返回0
    aclrtSetCurrentContext(ctx1);
    aclrtStreamWaitEvent(s1, ev);    // 返回0
    aclrtSynchronizeStream(s1);      // 永久挂死

6721d53dc7034c97b1e5692f93619f58.zip

likedislike
HHenry_ascend成员
8月31日 将 sunnana_004434229 设为负责人
HHenry_ascend成员
8月31日 将 wda1991 设为负责人
Henry_ascend成员
8月31日 评论:

感谢反馈,已再分析确认event的record语义使用约束,排查问题是否有效~

likedislike
Wwda1991成员
9月3日 关联了pull request:【PR】: 对于eventRecord与eventReset增加event与stream同属同一个device的校验
wda1991成员
9月10日 评论:

@Louise 修改代码已合入,请查看是否满足要求

likedislike
Wwda1991成员
9月10日 issue状态由 待办的 改变为 修复中
ykl999ykl999成员
9月10日 issue状态由 修复中 改变为 已完成
ykl999ykl999成员
9月10日 关闭了 issue
CANN-robotCANN-robot成员
9月10日 添加了label:resolved