Я пытаюсь придумать, как реализовать следующий алгоритм с использованием CUDA:
Работая с большим объемом вокселей, для каждого вокселя я вычисляю индекс i
и значение c
. после расчета мне нужно выполнить histogram[i] += c
c
- это значение с плавающей запятой, и гистограмма может содержать до 15 000 бинов.
Я ищу способ эффективно реализовать это с помощью CUDA. Первая очевидная проблема заключается в том, что с вычислительными возможностями 1.3, которые я использую, я не могу даже сделать atomicAdd()
с плавающей точкой, так как я могу что-либо надежно накапливать?
Этот пример от nVidia делает что-то более простое. Гистограммы сохраняются в общей памяти (что я не могу сделать из-за ее размера), и она только накапливает целые числа. Можно ли обобщить этот подход в моем случае?