【发布时间】:2016-12-14 02:02:20
【问题描述】:
是否可以在不阻塞主机的情况下同步两个 CUDA 流?我知道有cudaStreamWaitEvent,它是非阻塞的。但是使用cudaEventCreate 创建和销毁事件呢?
和cudaEventDestroy。
documentation 代表 cudaEventDestroy 说:
如果事件已记录但尚未完成,则 cudaEventDestroy() 被调用,函数将立即返回并且 与事件关联的资源将自动释放一次 设备已完成事件。
我在这里不明白的是记录的事件和完成的事件之间有什么区别。这似乎也意味着 如果事件尚未被记录,则呼叫被阻塞。
谁能解释一下?
【问题讨论】:
-
当您在其上调用
cudaEventCreate()时会创建一个事件。当您在其上调用cudaEventRecord()时会记录一个事件。当已记录事件的流的处理到达该事件时,事件完成。例如,如果我在内核调用后立即将事件记录到流中,那么该事件将被记录但不完整,直到内核调用完成处理。一旦内核调用完成处理,它之后记录的事件将被标记为完成(并且流处理将继续。) -
如果事件尚未记录,
cudaEventDestroy调用不会阻塞。
标签: c cuda synchronization gpu cuda-events