C++ __syncthreads()死锁

C++ __syncthreads()死锁,c++,cuda,C++,Cuda,如果只有一些线程执行死锁,\ uu 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() }

如果只有一些线程执行死锁,\ uu 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()
       }
    }
}
\uuuu全局\uuuuu无效内核(int N,int*a)
{

如果(threadIdx.x从技术上讲,内核不能死锁;它们只能超时。但是,是的,您所描述的是真实的并且可能发生。这个问题实际上已经讨论过了,例如:

您不应该在发散的代码中使用
\u syncthreads()
。它在这种情况下的行为是未定义的


\uuuu syncthreads()
可能出现在条件分支中,但前提是您确信,块中的所有线程都将以相同的方式对该分支进行统一计算(一个块中的所有线程或没有线程执行该分支).

它们可能会死锁,而非显示CUDA设备没有看门狗定时器,因此如果在这种情况下死锁,它们将不会超时。