CUDA中流的非阻塞同步?

spf*_*rnd 2 c synchronization cuda gpu cuda-events

是否可以在不阻塞主机的情况下同步两个CUDA流?我知道有cudaStreamWaitEvent,它是非阻塞的。但是使用cudaEventCreate 和创建和破坏事件呢cudaEventDestroy

文档cudaEventDestroy说:

如果调用cudaEventDestroy()时已记录事件但尚未完成事件,则该函数将立即返回,并且一旦设备完成事件,与事件关联的资源将自动释放。

我不明白的是,已记录事件和已完成事件之间有什么区别。同样,这似乎意味着如果尚未记录该事件,则呼叫正在阻塞。

任何人都可以对此有所了解吗?

小智 5

使用,您将走在正确的轨道上cudaStreamWaitEvent。创建事件确实会带来一定的成本,但是可以在应用程序启动期间创建事件,以防止在GPU例程期间创建时间过长。

当您将事件放入流中时,将记录一个事件。它完成的是被放入流的情况下完成之前所有的活动后。记录事件基本上会在您的流中添加一个标记,这可以使cudaStreamWaitEvent流停止前进,直到事件完成为止。