Немного загадки CUDA - PullRequest
       3

Немного загадки CUDA

4 голосов
/ 26 октября 2011

У меня есть массив A[0...N] из double и массив B[0...N] из int. Каждый B[i] изменяется в [0...P]. Все, что мне нужно, это вычислить массив C[0...P]:

C[j] = SUM( A[i] : B[i] = j)

Я не могу использовать потоки N с функцией atomicAdd(), поскольку, насколько я знаю, она не поддерживает double. Простая реализация с потоками P сильно расходится. Есть ли лучший способ?

1 Ответ

5 голосов
/ 26 октября 2011

Если я правильно понимаю, вы пытаетесь уменьшить сумму массива двойной точности A с помощью целочисленных ключей, содержащихся в B.Библиотека шаблонов Thrust содержит для этого операцию redu_by_key .Пример сумма строк показывает, как использовать redu_by_key для аналогичного приложения, хотя он использует итераторы подсчета для генерации ключа вместо использования вектора ключа, предоставленного пользователем.Это должно быть тривиально, чтобы изменить его в соответствии с вашими потребностями.

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