加速代码通过解释器但在 CUDA 下失败
Accelerate code passes intepreter but fails under CUDA
我一直在尝试编写一个函数,该函数将使用加速库获取向量的直方图。我认识到直方图不是 GPU 处理的理想案例,但我正在从一个小种子生成一个相当大的数据集,如果它可以在将它传输回主内存之前减少到几千字节的数组,那就太好了。
我想出的代码如下。它需要一些输出箱,然后创建一个新数组,其中 a[x] 的值是 xs
中 x 的出现次数
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 解释器下 运行 正确显示。但是,如果我尝试通过 accelerate-cuda 调用它,则会收到以下错误消息。
./Data/Array/Accelerate/CUDA/State.hs:85:9: (unhandled): CUDA Exception: unspecified launch failure
我的问题有两个方面。首先,我在做什么导致 CUDA 失败?二、通过Accelerate做直方图有没有更好的方法?
这是 Accelerate 中的一个错误(and/or CUDA 中的潜在更改),它具有 now been fixed。抱歉花了这么长时间才开始,这从我的雷达上消失了。
我一直在尝试编写一个函数,该函数将使用加速库获取向量的直方图。我认识到直方图不是 GPU 处理的理想案例,但我正在从一个小种子生成一个相当大的数据集,如果它可以在将它传输回主内存之前减少到几千字节的数组,那就太好了。
我想出的代码如下。它需要一些输出箱,然后创建一个新数组,其中 a[x] 的值是 xs
中 x 的出现次数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 解释器下 运行 正确显示。但是,如果我尝试通过 accelerate-cuda 调用它,则会收到以下错误消息。
./Data/Array/Accelerate/CUDA/State.hs:85:9: (unhandled): CUDA Exception: unspecified launch failure
我的问题有两个方面。首先,我在做什么导致 CUDA 失败?二、通过Accelerate做直方图有没有更好的方法?
这是 Accelerate 中的一个错误(and/or CUDA 中的潜在更改),它具有 now been fixed。抱歉花了这么长时间才开始,这从我的雷达上消失了。