如果只有一些线程执行__syncthreads(),它会导致死锁吗?
我有一个这样的内核:
__global__ void Kernel(int N,int *a)
{
if(threadIdx.x<N)
{
for(int i=0;i<N;i++)
{
a[threadIdx.x]= //Some calculation using a and i
__syncthreads()
}
}
}如果块中的线程数大于N,则某些线程将不会执行代码。这会导致死锁吗?
如果是,那么我如何修改代码?
发布于 2011-06-25 18:32:22
您不应该在不同的代码中使用__syncthreads()。它在这种情况下的行为是不确定的。
__syncthreads()可能会出现在条件分支中,如果您确定,此分支将以相同的方式由块中的所有线程统一计算(块中的所有线程或没有线程接受该分支)。
发布于 2011-06-25 16:02:46
从技术上讲,内核不会死锁;它们只能超时。但是,是的,你所描述的是真实的,并且可能发生。这个问题实际上以前已经讨论过了,例如:Realistic deadlock example in CUDA/OpenCL
https://stackoverflow.com/questions/6476613
复制相似问题