__syncthreads死锁

问题描述

| 如果只有一些线程执行__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,则某些线程将不执行该代码。这会导致僵局吗? 如果是,那我该如何修改代码?     

解决方法

        您不应在不同的代码中使用ѭ1。在这种情况下其行为是不确定的。 仅当您确定条件分支中才会出现“ 1”时,该分支将以相同的方式由一个块中的所有线程统一评估(该分支中的所有线程或无线程都采用该分支)。     ,        从技术上讲,内核不会死锁。他们只能超时。但是,是的,您所描述的是真实的并且可能发生。实际上,以前已经讨论过该问题,例如:CUDA / OpenCL中的实际死锁示例