CUDA: суммирование результатов - PullRequest
4 голосов
/ 02 декабря 2010

Я использую CUDA для запуска задачи, где мне нужно сложное уравнение со многими входными матрицами.Каждая матрица имеет идентификатор в зависимости от своего набора (от 1 до 30, имеется 100 000 матриц), и результат каждой матрицы сохраняется в массиве float [N], где N - количество входных матриц.

После этого результат, который я хочу получить, является суммой каждого числа с плавающей точкой в ​​этом массиве для каждого идентификатора, поэтому с 30 идентификаторами есть 30 результатов с плавающей точкой.* Прямо сейчас я читаю массив float (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];
}

Но мне интересно, есть ли лучший способ.

1 Ответ

3 голосов
/ 02 декабря 2010

Вы можете использовать cublasSasum() для этого - это немного проще, чем адаптировать одно из сокращений SDK (но, конечно, менее общее). Посмотрите примеры CUBLAS в CUDA SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...