块的某些线程是否达到__syncthreads()而其中一些线程没有?

时间:2014-10-05 18:16:27

标签: c++ cuda synchronization

问题很简单,块的某些线程到达__syncthreads()而其中一些没有?请使用以下代码。

for (unsigned int s=blockDim.x/2; s>0; s>>=1) {
    if (tid < s) {
        sdata[tid] += sdata[tid + s];
    } else {
       break;
    }
    __syncthreads();
}

是否会造成一些僵局或其他问题?我应该把__syncthreads()放在后面吗?或者这样好吗?

1 个答案:

答案 0 :(得分:1)

未定义的行为

  

__ syncthreads()在条件代码中是允许的,但仅当条件在整个线程块中进行相同的求值时,   否则代码执行可能会挂起或产生意外   副作用。

阅读详情:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html