2015-08-24 3 views
2

Я пытался написать функцию, в которой будет гистограмма вектора с использованием библиотеки ускорения. Я признаю, что гистограммы - не идея для обработки 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 терпеть неудачу? Во-вторых, есть ли лучший способ взять гистограмму через ускорение?

+2

Вы проверили, что CUDA, как таковой, отлично работает, не так ли? – leftaroundabout

+0

Если я удалю 'hist' из расчета, остальная часть функции будет работать под CUDA без проблем. – user640078

+0

@ пользователь640078. Вы когда-нибудь находили решение этого? Есть ли ответ, чтобы добавить сюда? – talonmies

ответ

1

Это была ошибка в ускорении (и/или базовом изменении в CUDA), которая имеет now been fixed. Извиняясь за то, что вы так долго дошли до него, это сместилось с моего радара.