cuda:读取设备内存变量需要同步

Posted

技术标签:

【中文标题】cuda:读取设备内存变量需要同步【英文标题】:cuda: need of synchronization for reading device memory variable 【发布时间】:2012-02-22 11:03:47 【问题描述】:

我正在 cuda 中运行一个迭代程序,该程序一直运行到收敛。正如这篇 SO 帖子 (Are cuda kernel calls synchronous or asynchronous) 中所说,从 CPU 的角度来看,cuda 内核是异步的。

在我的程序中,其中一个内核检查收敛并将布尔值返回给主机以进行读取。我想知道,我是否需要这样做

cudaDeviceSynchronize()

在读取布尔值之前?

【问题讨论】:

您需要在内核执行之后和读取布尔值之前进行同步,因为在内核执行后控制可以立即返回给主机。并且必须写入值的线程可能尚未运行。 【参考方案1】:

这取决于您如何将布尔值返回给 CPU。 你在使用 cudaMemcpy 吗? 如果是,那么您不必使用 cudaDeviceSynchronize(),因为 cudaMemcpy 将阻塞直到内核完成执行,然后将数据从 GPU 复制到 CPU。

【讨论】:

是的,我正在使用这个。谢谢。

以上是关于cuda:读取设备内存变量需要同步的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 一维数组未更新

CUDA 固定从设备刷新内存

线程同步

Cuda - 从设备全局内存复制到纹理内存

在 CUDA 中同步多个变量

gpuocelot 是不是支持 CUDA 设备中的动态内存分配?