加速代码通过解释器但在 CUDA 下失败

Posted

技术标签:

【中文标题】加速代码通过解释器但在 CUDA 下失败【英文标题】:Accelerate code passes intepreter but fails under CUDA 【发布时间】:2015-08-24 13:21:10 【问题描述】:

我一直在尝试编写一个函数,该函数将使用加速库获取向量的直方图。我认识到直方图不是 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 失败?其次,有没有更好的方法通过 Accelerate 获取直方图?

【问题讨论】:

您已经检查过 CUDA 运行良好,是吗? 如果我从计算中删除hist,函数的其余部分在CUDA下运行没有问题。 @user640078。你有没有找到解决方案?这里有答案吗? 【参考方案1】:

这是 Accelerate(和/或 CUDA 中的潜在更改)中的一个错误,它有 now been fixed。抱歉花了这么长时间才知道,这从我的视线中溜走了。

【讨论】:

以上是关于加速代码通过解释器但在 CUDA 下失败的主要内容,如果未能解决你的问题,请参考以下文章

Linux平台CUDA+OpenCV3.4配置

笔记CUDA - (异步)SIMT 架构

CUDA内核启动参数解释正确吗?

CUDA 平铺矩阵乘法解释

CUDA线程和块解释

CUDA 组装说明