2

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

文档cudaEventDestroy说:

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

我在这里不明白的是记录的事件和完成的事件之间有什么区别。此外,这似乎意味着如果事件尚未记录,则呼叫将被阻塞。

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

4

1 回答 1

5

使用cudaStreamWaitEvent. 创建事件确实需要一些成本,但可以在应用程序启动期间创建它们,以防止在 GPU 例程期间创建时间成本很高。

将事件放入流中时会记录事件。它在事件完成之前放入流中的所有活动之后完成。记录事件基本上会在您的流中放置一个标记,这可以cudaStreamWaitEvent在事件完成之前停止流上的前进进度。

于 2016-08-08T15:41:20.037 回答