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