cuda - 计算 2D 数组 CUDA 的平均值

标签 cuda gpu gpgpu

我需要使用 CUDA 计算 2D 数组的平均值,但我不知道如何继续。我首先进行列缩减,然后对结果数组求和,最后一步我将计算平均值。

为此,我需要立即在设备上完成所有工作吗?或者我只是一步一步地进行,每一步都需要在 CPU 和 GPU 之间来回切换。

最佳答案

如果它是二维数组中所有元素的简单算术平均值,您可以使用推力:

int* data;
int num;
get_data_from_library( &data, &num );

thrust::device_vector< int > iVec(data, data+num);

// transfer to device and compute sum
int sum = thrust::reduce(iVec.begin(), iVec.end(), 0, thrust::plus<int>());
double mean = sum/(double)num;

如果您想编写自己的内核 - 请记住,2D 数组本质上是一个分为行大小块的 1D 数组,并通过 SDK“并行缩减”示例:Whitepaper

关于cuda - 计算 2D 数组 CUDA 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466353/

相关文章:

cuda - 具有分散段的分段缩减

c++ - 临时 CUDA 设备阵列

kernel - GPU 中的内存绑定(bind)内核和计算绑定(bind)内核

gpu - 从多个 SLURM GPU 资源中进行选择

tensorflow - 什么是 HIP,为什么不能在锐龙 3400g 上运行?

c++ - 从非合并访问到合并内存访问 CUDA

opencl - 为什么全局内存分配成功,大小超过 GPU 限制?

c - Float4 不比 cuda 中的 float 快

c++ - 设备代码中 CUDA 类静态成员的成语?

visual-studio-2010 - 如何编译 CUDA 应用程序是 Visual Studio 2010?