CUDA“Release中要求启动的资源太多”,而不是在Debug中

时间:2015-04-23 16:41:17

标签: cuda

我正在使用Visual Studio 2012,当我在调试模式下启动程序时,它运行顺利。 但是,当我在发布模式下运行它时,我在我的一个内核上收到错误“请求启动的资源太多”。

我去比较调试和发布之间的编译参数,似乎当我将“生成GPU调试信息”选项更改为“是(-G)”时,问题就消失了。

为什么会这样?如果没有该选项,是否有一些我无法运行该程序的东西?

编译选项:

D:\Dev\CUDA\bin\nvcc.exe -gencode=arch=compute_50,code=\"sm_50,compute_50\" --use-local-env --cl-version 2012 -ccbin "D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64"  -ID:\Dev\CUDA\include -ID:\Dev\CUDA\include  -G -lineinfo  --keep-dir x64\Release -maxrregcount=0  --machine 64 --compile -cudart static     -DWIN32 -DWIN64 -DNDEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /O2 /Zi  /MD  " -o x64\Release\main.cu.obj "D:\Dev\Projets\CUDA\ProjAdvMetrixCuda6\Discrete choice v2\main.cu" 

1 个答案:

答案 0 :(得分:1)

  

为什么会这样?

这可能是由于每个线程问题的寄存器造成的。发行版和调试版之间的代码生成有很大不同,这会影响每个GPU线程使用的寄存器。如果使用太多,内核将无法启动。

您可以通过修改此特定命令行开关来快速确认:

-maxrregcount=0 

到其他一些价值。这可以在其中一个Visual Studio项目配置字段中执行。我会从20这样的值开始。如果这导致发布项目运行,那么每个线程问题都有一个寄存器。您可以通过研究已经讨论过的一些答案来获得更多相关信息,例如答案here

请注意,此问题不一定与发布与调试相关。影响代码生成的任何可能会导致类似的问题,例如32位/ 64位,或其他项目或编译器设置差异。解决方案路径是相同的。