微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

__syncthreads死锁

如何解决__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中的实际死锁示例     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。