我想實現簡單的並行減少。我正在使用來自CUDA sdk的代碼。但不知何故,有我在內核中的問題,因爲共享陣列沒有得到全球陣列及其全零的值。CUDA共享數組沒有獲取值?
extern __ shared __ float4 sdata[];
// each thread loadsone element from global to shared mem
unsigned int tid = threadIdx.x;
unsigned int i= blockIdx.x*blockDim.x+ threadIdx.x;
sdata[tid] = dev_src[i];
__syncthreads();
// do reduction in shared mem
for(unsigned int s=1; s < blockDim.x; s *= 2) {
if(tid % (2*s) == 0){
sdata[tid] += sdata[tid + s];
}
__syncthreads();
}
// write result for this block to global mem
if(tid == 0)
out[blockIdx.x] = sdata[0];
編輯::
確定我得到它通過刪除extern關鍵字,使共享數組常量大小像512我在良好的狀態,現在的工作。也許有人可以解釋爲什麼它不是使用extern關鍵字
所以dev_src有正確的價值觀,但不知何故SDATA沒有得到dev_src值 – elasolova 2012-02-12 00:51:17
不要添加更新的意見。更新你的問題。 – Bart 2012-02-12 01:14:45