如果CUDA内核调用__device__函数,则块中所有线程之间是否存在进入或退出__device__函数的隐式同步?
如果没有那么这意味着块中的某些线程可能已经退出__device__函数,然后块中的其他线程甚至已进入它(在没有任何显式同步的情况下)?
任何有关相关信息/参考的指示都将不胜感激。
答案 0 :(得分:1)
是的,只有talonmies指出,在warp中只有隐式同步btw线程。 当内核启动时,硬件会查看任何warp(可能是第一个warp)并执行第一条指令,然后切换到另一个warp。在另一个warp甚至执行内核的第一条指令之前,某些warp可能会退役,因为warp不需要在退出时等待彼此
答案 1 :(得分:0)
您应该在内核代码中使用__syncthreads()
函数。调用__device__
函数后,添加__syncthreads();
行以设置屏障并同步线程。