繁体   English   中英

CUDA查找数组元素的总和

[英]CUDA find sum of elements of the array

您好,我想使用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]每次都变为零?

所有线程都正在写入B[0] ,有些可能正在尝试同时写入。 这行代码:

B[0] = B[0]+d_A[index];

需要B[0]的读写。 如果多个线程同时执行此操作,则会得到奇怪的结果。

您可以通过以下方法进行简单的修复:

atomicAdd(B, d_A[index]);

并且应该得到合理的结果(假设您的代码中其他地方没有错误,没有显示。)在调用此内核之前,请确保将B[0]初始化为某个已知值。

但是,如果您想高效地执行此操作,则应该研究cuda 减少样本或仅使用CUB

并且,当您遇到CUDA代码问题时,请务必使用正确的cuda错误检查

因此,如果您仍然无法获得合理的结果, 在询问“我进行了此更改但它仍然不起作用,为什么?”之前,通过适当的cuda错误检查对代码进行检测。 我无法告诉您原因,因为这是您显示的唯一代码片段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM