是否可以同步两个CUDA流而不阻塞主机?我知道这是cudaStreamWaitEvent
,它是非阻塞的。但是使用cudaEventCreate
来创建和销毁事件呢和cudaEventDestroy
.
cudaEventDestroy
的文档说:
如事件已记录但尚未完成时调用cudaEventDestroy()时,该函数将立即返回事件关联的资源将自动释放一次设备已完成事件。
这里我不明白的是记录的事件和完成的事件之间的区别是什么。这似乎也暗示了如果事件尚未记录,则呼叫阻塞。
有谁能解释一下吗?
使用cudaStreamWaitEvent
是正确的。创建事件确实会带来一些成本,但可以在应用程序启动期间创建事件,以防止在GPU例程期间创建时间花费过多。
当您将事件放入流中时,事件被记录。在事件完成之前放入流中的所有活动之后,完成。记录事件基本上是在你的流中放置一个标记,这是使cudaStreamWaitEvent
能够停止流上的前进进程,直到事件完成。