我正在使用CUDA运行一个问题,我需要一个带有许多输入矩阵的复杂方程。每个矩阵的ID取决于其集合(1到30之间,有100,000个矩阵),每个矩阵的结果存储在float [N]数组中,其中N是输入矩阵的数量。
在此之后,我想要的结果是每个ID中此数组中每个浮点数的总和,因此有30个ID,有30个结果浮点数。
有关我应该如何做的任何建议?
现在,我从设备读取浮点数组(400kb)回主机并在主机上运行:
// Allocate result_array for 100,000 floats on the device
// CUDA process input matrices
// Read from the device back to the host into result_array
float result[10] = { 0 };
for (int i = 0; i < N; i++)
{
result[input[i].ID] += result_array[i];
}
但我想知道是否有更好的方法。
答案 0 :(得分:3)
您可以使用cublasSasum()
来执行此操作 - 这比调整其中一个SDK缩减(但当然不那么通用)要容易一些。查看CUDA SDK中的CUBLAS示例。