是否可以在不阻塞主机的情况下同步两个 CUDA 流?我知道有 cudaStreamWaitEvent
,它是非阻塞的。但是使用 cudaEventCreate
创建和销毁事件又如何呢?
和cudaEventDestroy
。
documentation对于cudaEventDestroy
说:
In case event has been recorded but has not yet been completed when cudaEventDestroy() is called, the function will return immediately and the resources associated with event will be released automatically once the device has completed event.
我在这里不明白的是已记录事件和已完成事件之间的区别。这似乎也暗示着 如果事件尚未被记录,则调用将被阻塞。
有谁可以解释一下吗?
最佳答案
使用cudaStreamWaitEvent
,您走在正确的轨道上。创建事件确实会产生一些成本,但它们可以在应用程序启动期间创建,以防止在 GPU 例程期间创建时间成本高昂。
当您将事件放入流中时,就会记录该事件。在事件完成之前将所有事件放入流中之后,它就完成。 记录事件基本上会在您的流中放置一个标记,这使得cudaStreamWaitEvent
能够停止流上的前进进度,直到事件完成。
关于c - CUDA 中流的非阻塞同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38826771/