1
我是CUDA初学者。我在这里有一个由2个线程执行的内核。所有线程都应该将其结果保存到共享变量中。毕竟三个完成后,在sum
的结果应该是12,但我得到6!CUDA多线程写入共享变量
__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>>>(..);
感谢您的解释。我设法使用交错寻址来实现您提到的还原技术 - [NVidia's reduction.pdf](http://developer.download.nvidia.com/compute/cuda/1.1-Beta/x86_website/projects/reduction/doc/ reduction.pdf),幻灯片7。 –