问题很简单,块的某些线程到达__syncthreads()
而其中一些没有?请使用以下代码。
for (unsigned int s=blockDim.x/2; s>0; s>>=1) {
if (tid < s) {
sdata[tid] += sdata[tid + s];
} else {
break;
}
__syncthreads();
}
是否会造成一些僵局或其他问题?我应该把__syncthreads()
放在后面吗?或者这样好吗?
答案 0 :(得分:1)
未定义的行为:
__ syncthreads()在条件代码中是允许的,但仅当条件在整个线程块中进行相同的求值时, 否则代码执行可能会挂起或产生意外 副作用。
阅读详情:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html