2011-07-20 31 views
4

我在我的Ubuntu 10.10 64位系统上调试基于CUDA 4.0/Thrust的图像重构代码,并一直试图弄清楚如何调试此运行时错误我有我的输出图像出现一些随机“噪音”。我的代码中没有随机数生成器输出,所以我期望输出在运行之间保持一致,即使它是错误的。然而,它不是...非确定性输出的CUDA调试程序

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

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

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

+0

完全脱离主题,你有没有设法让豹猫与Thrust合作,如果是的话,怎么样? :-) –

+0

还没有,但我会告诉你,如果我这样做。 – Fares

+0

太好了,谢谢,我也会这么做! –

回答

2

你确定所有的内核都有正确的块大小/余数处理吗?当我们在数组末尾没有处理数据元素时,发生了一个我们已经看到非确定性结果的地方。

我们的内核最初是用于已知为256个元素的整数倍的数据。所以我们使用256的块大小,并做了简单的划分以获得块的数量。当数据被更改为任何长度时,剩余的255个或更少的元素从未得到处理。输出中的那些点随机数据。

+0

感谢您的反馈!事实证明,它确实与我的块大小有关,正如你所建议的那样。我已经为我想要处理的数据分配了足够多的块,只要您检查并确保只处理适合数据的索引范围内的线程即可。原来我使用的是错误的界限。修复它解决了这个问题:) – Fares

+0

@Fares - 是的,通常有两种方式来处理这种情况下的“剩余”数据。很多例子都展示了你的方式。我们发现第二次运行内核的时间通常稍微快一点,只剩下一个线程的剩余数量。 –