0
你好我想找到使用CUDA的数组元素的总和。CUDA发现数组元素的总和
__global__ void countZeros(int *d_A, int * B)
{
int index = blockIdx.x * blockDim.x + threadIdx.x;
B[0] = B[0]+d_A[index];
}
所以最后,B [0]应该包含所有元素的总和。但我注意到B [0]每次都等于零。所以最后它只包含最后一个元素。 为什么B [0]每次都变为零?
谢谢但atomicAdd是未定义的。我怀疑这是不可能的。看起来好像一个变种只能变一次。 – user3485986
要使用'atomicAdd',您需要使用cc1.1或更高版本的GPU的架构开关编译代码。因此,例如,如果您有cc2.0 GPU,请在编译命令行中添加“-arch = sm_20”。如果你确实有一个cc1.0 GPU,那么这将不起作用,但是缩小示例代码仍然可以工作。 –
似乎太多担心。也许这可以通过使用共享内存来完成? – user3485986