下载
中文
注册

异步拷贝调用查询接口报错

现象描述

通过event实现H2D或D2H异步拷贝任务的同步等待时,在调用aclrtQueryEventStatus确认任务完成后,先调用aclrtFreeHost释放Host内存再调用aclrtDestroyEvent接口,可能会有如下报错信息打印:

可能原因

报错是因为使用了异步拷贝任务之后下发了一个event record任务,期望使用aclrtQueryEventStatus查询到event record任务是否完成,从而判断异步拷贝任务是否完成,而后释放内存调用aclrtFreeHost。

实际上aclrtQueryEventStatus查询到的是Device执行完任务,并未透传到Host侧,所以此时释放内存,未先销毁Event会有时序问题导致报错。

处理步骤

处理该问题可以参考以下方案:

方案一:使用aclrtSynchronizeStream接口判断任务是否执行完成。

方案二:使用aclrtQueryEventStatus接口时,先调用aclrtDestroyEvent接口,再调用aclrtFreeHost接口,保证无时序问题。