CUDA 中流的非阻塞同步?
Non-blocking synchronization of streams in CUDA?
是否可以在不阻塞主机的情况下同步两个 CUDA 流?我知道有 cudaStreamWaitEvent
,它是非阻塞的。但是使用 cudaEventCreate
创建和销毁事件呢?
和 cudaEventDestroy
.
cudaEventDestroy
的 documentation 说:
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 例程中创建时间成本过高。
当您将事件放入流中时,该事件会被记录。它是 completed 毕竟 activity 在事件完成之前被放入流中。 录制 事件基本上会在您的流中放置一个标记,这使 cudaStreamWaitEvent
能够停止流上的前进进度,直到事件 完成。
是否可以在不阻塞主机的情况下同步两个 CUDA 流?我知道有 cudaStreamWaitEvent
,它是非阻塞的。但是使用 cudaEventCreate
创建和销毁事件呢?
和 cudaEventDestroy
.
cudaEventDestroy
的 documentation 说:
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 例程中创建时间成本过高。
当您将事件放入流中时,该事件会被记录。它是 completed 毕竟 activity 在事件完成之前被放入流中。 录制 事件基本上会在您的流中放置一个标记,这使 cudaStreamWaitEvent
能够停止流上的前进进度,直到事件 完成。