基于Notify同步
Notify通常用于多个Device之间的同步,如下图所示:Device 0向Device 1发送完数据后,通过Notify通知Device 1数据已写完。

Notify只支持一对一通知机制。若要实现向多个Device发起通知,要发起多次Notify操作,如下图所示:

Notify与Event功能区别在于,Notify Wait完成后,Notify状态会自动重置,因此一个Notify Record任务只能通知一个Notify Wait任务;而Event Wait并不会自动重置Event状态,因此一个Event Record任务可以做到通知一个或多个Event Wait任务。此外,Notify不支持时间戳功能。
在同一个Device两条流间同步的场景下,Notify可以实现Event实现相同的效果。
Notify相关接口的调用代码示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 创建Stream aclrtStream stream1; aclrtStream stream2; aclrtCreateStream(&stream1); aclrtCreateStream(&stream2); // 创建Notify aclrtNotify notify; aclrtCreateNotify(¬ify, ACL_NOTIFY_DEFAULT); // 在stream2插入wait aclrtWaitAndResetNotify(notify, stream2, 0); // 在stream2中下发计算任务 ...... // 在stream1下发stream2计算任务所依赖的拷贝任务 ...... // 在stream1插入record aclrtRecordNotify(notify, stream1); // 同步等待任务完成 aclrtSynchronizeStream(stream1); aclrtSynchronizeStream(stream2); // 销毁notify aclrtDestroyNotify(notify); |
父主题: 同步管理