这是我的代码尝试减少以在块中找到最大 50 值数组。我已将数组填充到 64。
对于线程 1-31,我有正确的 maxVal 打印输出,但对于线程 32-49,它是一个完全随机数。我不知道我做错了什么。
顺便提一句。我以为我不需要 _sync 展开时的每一行,但显然我必须这样做。有什么建议吗?
提前感谢您的帮助。
//block size = 50
__syncthreads();
if (tid<32){
cptmp[tid]=(cptmp[tid]< cptmp[tid+32]) ? cptmp[tid+32] : cptmp[tid];__syncthreads();
cptmp[tid]=(cptmp[tid]< cptmp[tid+16]) ? cptmp[tid+16] : cptmp[tid];__syncthreads();
cptmp[tid]=(cptmp[tid]< cptmp[tid+8]) ? cptmp[tid+8] : cptmp[tid]; __syncthreads();
cptmp[tid]=(cptmp[tid]< cptmp[tid+4]) ? cptmp[tid+4] : cptmp[tid]; __syncthreads();
cptmp[tid]=(cptmp[tid]< cptmp[tid+2]) ? cptmp[tid+2] : cptmp[tid]; __syncthreads();
cptmp[tid]=(cptmp[tid]< cptmp[tid+1]) ? cptmp[tid+1] : cptmp[tid]; __syncthreads();
}
__syncthreads();
//if (tid==0) {
maxVal=cptmp[0];
if(bix==0 && biy==0) cuPrintf(" max:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y);
//}