2011-07-31 60 views
5

当我尝试启动一个CUDA内核(通过PyCUDA)时,出现资源不足的错误,我想知道是否可以让系统告诉我是哪个资源。显然系统知道哪些资源已经耗尽,我只是想要查询。如何诊断由于资源不足而导致的CUDA启动失败?

我已经使用了占用计算器,并且一切看起来都很好,所以要么没有覆盖角落的情况,要么我使用错了。我知道这不是寄存器(这似乎是通常的罪魁祸首),因为我使用的是< = 63,它仍然会在CC 2.1设备上出现1x1x1块和1x1网格失败。

感谢您的任何帮助。我张贴在NVidia的板螺纹:

http://forums.nvidia.com/index.php?showtopic=206261&st=0

,但没有得到回应。如果答案是“你不能向系统询问这些信息”,那么也很好知道(有点......)。

编辑:

最寄存器使用我见过已经63编辑以上,以反映。

回答

6

我觉得PyCUDA使用CUDA驱动程序API,所以下面可能是什么是错误的:如果你没有指定足够的参数,或者您在使用时cuLaunch()启动内核指定了错误的大小参数,CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES可能发生。由于您使用的是PyCUDA,因此可能很容易使内核所需的参数列表与实际传递的参数不匹配,因此您可能需要检查如何调用内核。

我认为这是在这种情况下,一个名为不善错误代码......

+0

这是错误,所以非常感谢您的建议。我仍然希望有一种方法可以询问发生了什么,但是这听起来像是不可用。 –

+0

因为我的真正问题是“我可以让系统直接告诉我这个问题”,但是基于其他地方的一些对话,我很肯定答案是“不,cuda没有API。 “ –

+0

是的,问题是通常有很多方法可以导致相同的错误 - 能够准确地告诉你发生了什么问题是一件非常棘手的事情。 – harrism

0

看到这个答案

CUDA maximum registers per thread: sm_12 vs sm_20

看来70个寄存器是太多的寄存器。

+0

对不起,但这不是根本问题,也不是我所期待的。即使我对代码进行了更改以使寄存器数减少为:“使用了36个寄存器,492 + 0个字节的smem,152个字节的cmem [0],8个字节的cmem [14],20个字节的cmem [16]”失败。然而,重点是我正在寻找一个API来告诉我“没有足够的寄存器”,而不必手动推断。 –

相关问题