c - CUDA 中流的非阻塞同步?

标签 c cuda synchronization gpu cuda-events

是否可以在不阻塞主机的情况下同步两个 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/

相关文章:

android - 如何使用AlertDialog的返回值

git 服务器复制

c - 我的快速排序无法正常工作。我做错了什么?

数组段错误中的 c 错误

c++ - 使用推力对静态分配的数组进行排序

将结构数组从主机复制到设备cuda

android - 寻找有关 Android 同步管理器的信息

更改我传递给函数而不用 C 中的 Return 的数组

c - 使用 webkitgtk+ 加载资源

cuda - -use-fast-math 选项是否将 SP 乘法转换为内在函数?