Я пытался написать функцию, в которой будет гистограмма вектора с использованием библиотеки ускорения. Я признаю, что гистограммы - не идея для обработки GPU, но я генерирую довольно большой набор данных из небольшого семени, и было бы неплохо, если бы его можно было свести до нескольких килобайтных массивов, прежде чем перенести его обратно в основную память.Ускорение кода проходит intrereter, но не под CUDA
Код, который я привел, приведен ниже. Это занимает несколько выходных лотки, то затем создает новый массив, в котором значение а [х] является число вхождений х в хзе
hist :: A.Exp Int -> A.Acc (A.Vector Int) -> A.Acc (A.Vector Int)
hist bins xs = A.permute
(const (+1))
(A.fill (A.index1 bins) 0)
(A.index1 . (xs A.!))
xs
Код появляется для правильной работы под переводчиком ускоряться. Однако, если я попытаюсь вызвать его с помощью ускорения-cuda, я получаю следующее сообщение об ошибке.
./Data/Array/Accelerate/CUDA/State.hs:85:9: (unhandled): CUDA Exception: unspecified launch failure
Мой вопрос в два раза. Во-первых, что я делаю, что заставляет CUDA терпеть неудачу? Во-вторых, есть ли лучший способ взять гистограмму через ускорение?
Вы проверили, что CUDA, как таковой, отлично работает, не так ли? – leftaroundabout
Если я удалю 'hist' из расчета, остальная часть функции будет работать под CUDA без проблем. – user640078
@ пользователь640078. Вы когда-нибудь находили решение этого? Есть ли ответ, чтобы добавить сюда? – talonmies