【问题标题】:CUDA Too many resources requested for launchCUDA 启动时请求的资源过多
【发布时间】:2014-11-18 14:55:17
【问题描述】:

我在具有 Compute Capability 2.0 的 GTX 480 上运行我的代码时遇到了一些问题

如果我以每个 Block 1024 个线程启动内核,我总是会收到以下错误:

========= CUDA-MEMCHECK
========= Program hit cudaErrorLaunchOutOfResources (error 7) due to "too many resources requested for launch" on CUDA API call to cudaLaunch.
=========     Saved host backtrace up to driver entry point at error
=========     Host Frame:/usr/lib/x86_64-linux-gnu/libcuda.so.1 [0x2ef613]
=========     Host Frame:/usr/local/cuda-6.5/lib64/libcudart.so.6.5 (cudaLaunch + 0x17e) [0x3686e]
=========     Host Frame:./bin/myProgram [0x3a50]
=========     Host Frame:./bin/myProgram [0x388a]
=========     Host Frame:./bin/myProgram [0x38e3]
=========     Host Frame:./bin/myProgram [0x2a99]
=========     Host Frame:./bin/myProgram [0x1410]
=========     Host Frame:./bin/myProgram [0x1da0]
=========     Host Frame:/lib/x86_64-linux-gnu/libc.so.6 (__libc_start_main + 0xed) [0x2176d]
=========     Host Frame:./bin/myProgram [0x1139]
=========

我用不同的块和线程数多次运行程序:

5 Blocks, 512 Threads per Block => Works
5 Blocks, 1024 Threads per Block => Error
10 Blocks, 512 Threads per Block => Works
10 Blocks, 1024 Threads per Block => Error
15 Blocks, 512 Threads per Block => Works
15 Blocks, 1024 Threads per Block => Error

我检查了使用的寄存器,似乎没问题。具有 28 个寄存器的“Function4”是使用如此多线程的内核。所有其他内核每次调用仅使用 >>。

ptxas info    : 0 bytes gmem
ptxas info    : Function properties for _Z7function1Py
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Compiling entry function '_Z13function2PyS_i' for 'sm_20'
ptxas info    : Function properties for _Z13function2PyS_i
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 22 registers, 52 bytes cmem[0]
ptxas info    : Compiling entry function '_Z6function3PyiS_' for 'sm_20'
ptxas info    : Function properties for _Z6function3PyiS_
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 22 registers, 56 bytes cmem[0]
ptxas info    : Compiling entry function '_Z17function4PyiiS_Phji' for 'sm_20'
ptxas info    : Function properties for _Z17function4PyiiS_Phji
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 28 registers, 72 bytes cmem[0]

我也用我的 GTX 660 和 CC 3.0 运行这个程序,它可以在每个块中使用 1024 个线程。我不知道问题出在哪里。有人有想法吗?

【问题讨论】:

  • 可能是每个线程的寄存器问题。尝试使用-maxrregcount 28(或24)编译代码,看看它是否会影响失败的案例。

标签: c cuda


【解决方案1】:

我有同样的错误。

感谢http://cuda-programming.blogspot.fr/2013/01/handling-cuda-error-messages.html,我理解了这个错误。他们说:

“请求启动的资源过多 - 此错误表示已超出多处理器上可用的寄存器数量。减少每个块的线程数以解决问题。”

基本上,我曾经能够在每个块中拥有给定数量的线程(3D 内核为 8x8x16=1024)。但是如果你嵌套你的内核调用,你会进一步减少可用寄存器的数量。

【讨论】:

  • 有趣的是,我发现使用一个特定的内核(很大,有很多嵌套调用)我可以在调试中使用 512 个线程启动,但是当编译发布时,它失败了,它只适用于256. 发布版本似乎有更多的寄存器使用。
【解决方案2】:

您是否尝试过升级 GPU 的驱动程序?对我来说,这个程序一直运行到我不走运,出现了完全相同的问题。没有任何关于最小驱动程序版本的警告。

【讨论】:

    猜你喜欢
    • 2014-04-06
    • 1970-01-01
    • 2012-04-23
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    相关资源
    最近更新 更多