任何关注 CUDA 的人都可能会看到我对我参与的项目的一些疑问,但对于那些没有的人,我会总结一下。(抱歉提前问了这么长的问题)
三个内核,一个基于一些输入变量生成一个数据集(处理位组合,因此可以指数增长),另一个解决这些生成的线性系统,另一个缩减内核以获得最终结果。这三个内核作为特定系统优化算法的一部分反复运行。
在我的开发机器(Geforce 9800GT,在 CUDA 4.0 下运行)上,无论我向它扔什么(达到基于所述指数性质的计算限制),它一直都能完美运行,但在测试机器上(4xTesla S1070's ,只有一个使用,在 CUDA 3.1 下)完全相同的代码(Python 基础,CUDA 内核的 PyCUDA 接口),在“小”情况下产生确切的结果,但在中等情况下,求解阶段在随机迭代中失败。
我之前遇到的这段代码的问题与问题的数值不稳定性有关,并且本质上是确定性的(即每次都在完全相同的阶段失败),但坦率地说,这个问题让我很生气,因为它随时会失败。
因此,我没有可靠的方法将 CUDA 代码从 Python 框架中分离出来并进行适当的调试,而且 PyCUDA 的调试器支持至少可以说是有问题的。
我检查了通常的事情,比如内核调用前检查设备上的空闲内存,占用计算表明网格和块分配很好。我没有做任何疯狂的 4.0 特定的东西,我在每次迭代时释放我在设备上分配的所有东西,并且我已经将所有数据类型固定为浮点数。
TL;DR,有没有人遇到过我在发行说明中没有看到的关于 CUDA 3.1 的任何问题,或者 PyCUDA 的自动初始化内存管理环境有任何问题会导致重复调用时间歇性启动失败?