PyCUDA / CUDA:非确定性发射失败的原因?

时间:2011-04-29 02:27:48

标签: python cuda gpgpu pycuda

任何关注CUDA的人都可能会看到我对我参与的项目的一些疑问,但对于那些没有我总结的项目。 (对不起提前提出长问题)

三个内核,一个基于一些输入变量生成数据集(处理比特组合因此可以指数增长),另一个解决这些生成的线性系统,另一个减少内核以获得最终结果。作为特定系统的优化算法的一部分,这三个内核一次又一次地运行。

在我的开发机器上(Geforce 9800GT,在CUDA 4.0下运行),无论我向它投掷什么,它都可以完美地工作(基于所述指数性质的计算限制),但在测试机器上(4xTesla S1070,只有一个在CUDA 3.1下使用)完全相同的代码(Python基础,CUDA内核的PyCUDA接口),为“小”情况产生精确结果,但在中等情况下,求解阶段随机失败迭代。

我之前遇到过这个代码的问题与问题的数值不稳定性有关,并且本质上是确定性的(即每次都在完全相同的阶段失败),但这个问题坦白地说是让我失望,因为它会随时失败。

因此,我没有一种可靠的方法可以从Python框架中删除CUDA代码并进行适当的调试,至少可以说PyCUDA的调试器支持是值得怀疑的。

我检查了常见的事情,比如设备上的可用内存的预内核调用检查,占用计算表明网格和块分配都很好。我没有做任何疯狂的4.0特定的东西,我释放了我在每次迭代时在设备上分配的所有内容,并且我已经将所有数据类型修复为浮点数。

TL; DR ,有没有人遇到过关于CUDA 3.1的任何问题,我在发行说明中没有看到,或者任何与PyCUDA的autoinit内存管理环境有关的任何问题会导致间歇性的启动失败重复调用?

2 个答案:

答案 0 :(得分:4)

你试过了吗?

cuda-memcheck python yourapp.py

您可能有超出内存的访问权限。

答案 1 :(得分:-1)

您可以使用nVidia CUDA Profiler查看失败前执行的内容。