c – 非确定性输出的CUDA调试过程

我在我的Ubuntu 10.10 64位系统上调试我的基于CUDA 4.0 / Thrust的图像重建代码,我一直在试图弄清楚如何调试我的输出图像看起来有点随机的运行时错误“噪声.”我的代码中没有随机数生成器输出,所以我希望输出在运行之间保持一致,即使它是错误的.但是,它不是……

我只是想知道是否有任何人有调试CUDA运行时错误的一般程序,例如这些.我没有在我的cuda内核中使用任何共享内存.我已经努力避免任何涉及全球记忆的竞争条件,但我可能错过了一些东西.

我尝试过使用gpu ocelot,但是在识别我的一些CUDA和CUSPARSE函数调用时遇到了问题.

此外,我的代码通常有效.只是当我改变这一设置时,我得到了这些非确定性结果.我已经检查了与该设置相关的所有代码,但我无法弄清楚我做错了什么.如果我可以将它提炼到我可以在这里发布的东西,我可能会这样做,但是在这一点上发布它太复杂了.

最佳答案 你确定你的所有内核都有适当的块大小/余数处理吗?当我们在数组末尾没有处理数据元素时,我们看到了一个非确定性结果.

我们的内核最初用于已知为256个元素的整数倍的数据.所以我们使用了256的块大小,并进行了简单的除法以获得块数.当数据随后变为任何长度时,剩余的255个或更少的元素永远不会被处理.然后输出中的那些点具有随机数据.

点赞