计算二维数组 CUDA 的平均值
Computing the mean of a 2D array CUDA
我需要使用 CUDA 计算二维数组的平均值,但我不知道如何进行。我首先进行列缩减,然后对结果数组求和,最后一步计算均值。
为此,我需要一次在设备上完成所有工作吗?或者我只是一步一步地做,每一步都需要来回 CPU 和 GPU。
如果它是二维数组中所有元素的简单算术平均值,你可以使用 thrust:
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;
如果您想编写自己的内核 - 请记住,二维数组本质上是一个一维数组,分为行大小的块并通过 SDK 'parallel reduction' 示例:Whitepaper
我需要使用 CUDA 计算二维数组的平均值,但我不知道如何进行。我首先进行列缩减,然后对结果数组求和,最后一步计算均值。
为此,我需要一次在设备上完成所有工作吗?或者我只是一步一步地做,每一步都需要来回 CPU 和 GPU。
如果它是二维数组中所有元素的简单算术平均值,你可以使用 thrust:
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;
如果您想编写自己的内核 - 请记住,二维数组本质上是一个一维数组,分为行大小的块并通过 SDK 'parallel reduction' 示例:Whitepaper