Ускоренный код передает intepreter, но не работает в CUDA

Я пытался написать функцию, которая будет принимать гистограмму вектора с использованием библиотеки ускорения. Я признаю, что гистограммы не являются идеальным вариантом для обработки GPU, но я генерирую довольно большой набор данных из небольшого начального числа, и было бы неплохо, если бы его можно было уменьшить до нескольких килобайтных массивов, прежде чем перенести его обратно в основную память.

Код, который я придумал, ниже. Требуется количество выходных лотков, а затем создается новый массив, где значения a[x] - это число вхождений x в xs.

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

Похоже, код работает правильно в интерпретаторе ускорения. Однако, если я пытаюсь вызвать его через accelerate-cuda, я получаю следующее сообщение об ошибке.

./Data/Array/Accelerate/CUDA/State.hs:85:9: (unhandled): CUDA Exception: unspecified launch failure

У меня вопрос двоякий. Во-первых, что я делаю, что приводит к сбою CUDA? Во-вторых, есть ли лучший способ пройти гистограмму через Ускорение?

1 ответ

Решение

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

Другие вопросы по тегам