cuda-gdb:“CUDA_EXCEPTION_9:Warp硬件堆栈溢出”的含义/出现

时间:2011-08-30 19:44:11

标签: exception gdb cuda nvidia

cuda-gdb和cuda-memcheck的手册提到了上面的CUDA_EXCEPTION_9:“Warp Hardware Stack Overflow”但是我还没有找到进一步的细节;两本手册中唯一的评论是

  

“当warp中的任何线程触发硬件堆栈溢出时会发生这种情况。这应该是罕见的。”

在我的情况下,当我尝试通过malloc()在设备上动态分配内存(处理同一组数据!)时,有时(!?)会发生。尝试malloc()0字节(已修复错误)反复导致相同的异常。

在什么情况下,究竟是什么造成了这种例外;它表明了什么,如何解决/规避它?

非常感谢

1 个答案:

答案 0 :(得分:1)

Fermi GPU上的堆栈溢出与任何其他设备上的堆栈溢出没有什么不同。每个线程在启动时从全局内存中获取静态堆栈和堆分配。如果通过过度递归耗尽堆栈,分配更多可用堆内存,或尝试在存储在堆内存中的任何变量上运行超出范围,则会生成保护错误,并且您将收到报告的堆栈溢出错误。从你的问题,我猜你通过设备端malloc调用耗尽了可用的每线程堆空间。

CUDA运行时API包括用于管理堆栈和堆内存cudaDeviceSetLimitcudaDeviceGetLimit的函数。通过这些,您可以检查运行时给出的每个线程的堆栈,堆和printf FIFO,并尝试增加堆和堆栈大小以查看问题是否消失。