私はCUDAの初心者です。ここにあるのは、2 つのスレッドで実行されるカーネルです。すべてのスレッドは、結果を共有変数に保存する必要があります。3 つすべてが終了した後、結果はsum
12 になるはずですが、6 になりました。
__global__ void kernel (..)
{
int i=blockDim.x*blockIdx.x+threadIdx.x;
__shared__ double sum;
...
if(i==0)
sum=0.0;
__syncthreads();
if(i<=1)
sum+= 2.0*3.0;
__syncthreads();
//sum should be 12 here, but I get 6. Why?
}
によって呼び出された
test<<<1,2>>>(..);