這裏是我的代碼試圖做減少找到一個塊中的50值數組的最大值。我已經將數組填充到64.CUDA,找到最大使用減少,錯誤
對於線程1-31,我有正確的maxVal打印輸出,但對於線程32-49,它是一個完全隨機數。我不知道我做錯了什麼。
btw。我認爲我不需要在展開每一行的同時,但顯然我必須。有關這個的任何建議?
在此先感謝您的幫助。
//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);
//}
很難弄清楚發生了什麼,而不描述你的線程/塊/網格結構,以及你如何計算'tid'。 –
我的塊尺寸是50,所以tid = threadIdx.x在0-49之間。網格大小是(40,一個很大的數字)。每個塊都在cptmp數組中找到最大值,它與64的大小共享。maxVal也是共享的。 – Kiarash