【发布时间】:2015-07-30 08:26:33
【问题描述】:
我刚刚阅读了有关动态并行性的文档。我想知道的是:我可以在内核中使用cudaDeviceSynchronize() 来同步当前在该设备上运行的所有块吗?
文档说:
来自任何线程的 CUDA 运行时操作,包括内核启动,在线程块中都是可见的。这意味着父网格中的调用线程可以在由该线程启动的网格、线程块中的其他线程或在同一线程块中创建的流上执行同步。
此外:
在网格内创建的流和事件存在于线程块范围内,但在创建它们的线程块之外使用时具有未定义的行为。
我的问题基本上是NO。但是由于cudaDeviceSynchronize() 为整个设备使用全局流,我不确定该流是否对设备上的所有线程可见并且相同,无论它们属于哪个块或启动。这样我就可以在内核中使用cudaDeviceSynchronize() 进行全局同步。
【问题讨论】:
标签: cuda