私は単純な並列削減を実装しようとしています。私は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];
EDIT ::
OK、私はそれが私が今良い形で午前にexternキーワードを削除し、共有配列に512のような一定の大きさにすることによって作業ました。誰かがなぜexternキーワードで作業していなかったのか説明できます
のでdev_srcが正しい値を持っていますが、何とかdev_srcが – elasolova
コメントへの更新を追加しない値になっていませんSDATAを役に立てば幸い