在CUDA __device__函数的开头或结尾有隐式屏障同步吗?

时间:2012-08-15 17:30:04

标签: cuda synchronization gpgpu

如果CUDA内核调用__device__函数,则块中所有线程之间是否存在进入或退出__device__函数的隐式同步?

如果没有那么这意味着块中的某些线程可能已经退出__device__函数,然后块中的其他线程甚至已进入它(在没有任何显式同步的情况下)?

任何有关相关信息/参考的指示都将不胜感激。

2 个答案:

答案 0 :(得分:1)

是的,只有talonmies指出,在warp中只有隐式同步btw线程。 当内核启动时,硬件会查看任何warp(可能是第一个warp)并执行第一条指令,然后切换到另一个warp。在另一个warp甚至执行内核的第一条指令之前,某些warp可能会退役,因为warp不需要在退出时等待彼此

答案 1 :(得分:0)

您应该在内核代码中使用__syncthreads()函数。调用__device__函数后,添加__syncthreads();行以设置屏障并同步线程。