计算二维阵列CUDA

时间:2017-01-04 14:33:42

标签: cuda gpu gpgpu

我需要使用CUDA计算2D数组的平均值,但我不知道如何继续。我开始做列减少之后,我将得到结果数组的总和,并在最后一步我将计算平均值。

要做到这一点,我需要立即在设备上完成整个工作?或者我只是一步一步地做,每一步都需要来回和来自CPU和GPU。

1 个答案:

答案 0 :(得分:5)

如果它是2D阵列中所有元素的简单算术平均值,则可以使用推力:

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数组本质上是一个分为行大小块的一维数组,并通过SDK&#39; parallel reduction&#39;例如:Whitepaper