2012-01-30 46 views
1

我在cuda上运行一个迭代程序,运行到收敛。正如在SO帖子中所说的(Are cuda kernel calls synchronous or asynchronous),从CPU的角度来看,cuda内核是异步的。cuda:需要同步读取设备内存变量

在我的程序中,收敛的内核检查之一,并返回布尔值到主机读取。我想知道,是否需要做

cudaDeviceSynchronize() 

在读取布尔值之前?

+0

在内核执行后,在读取布尔值之前,需要同步,因此在执行内核后可能会立即将控制权返回给主机。并且必须写入该值的线程可能还没有按时运行。 – Yappie 2012-01-30 17:13:52

回答

5

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

+0

是的,我正在使用这个。谢谢。 – user1118148 2012-01-30 17:12:14