Exception cuda gdb:含义/发生;CUDA“U异常9:扭曲硬件堆栈溢出”;

Exception cuda gdb:含义/发生;CUDA“U异常9:扭曲硬件堆栈溢出”;,exception,gdb,cuda,nvidia,Exception,Gdb,Cuda,Nvidia,cuda gdb和cuda memcheck的手册中提到了上述cuda_异常_9:“Warp硬件堆栈溢出”,但我无法找到更多细节;两本手册中给出的唯一注释是 “当扭曲中的任何线程触发硬件堆栈溢出时,就会发生这种情况。这种情况应该很少发生。” 在我的例子中,当我试图通过malloc()在设备上动态分配内存(处理同一组数据!)时,有时会发生(!?)。重复尝试malloc()0字节(错误已修复)会导致相同的异常 在何种情况下,究竟是什么导致了这种例外;它表明了什么,如何修复/规避它 非常感谢费米GPU

cuda gdb和cuda memcheck的手册中提到了上述cuda_异常_9:“Warp硬件堆栈溢出”,但我无法找到更多细节;两本手册中给出的唯一注释是

“当扭曲中的任何线程触发硬件堆栈溢出时,就会发生这种情况。这种情况应该很少发生。”

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

在何种情况下,究竟是什么导致了这种例外;它表明了什么,如何修复/规避它


非常感谢

费米GPU上的堆栈溢出与任何其他设备上的堆栈溢出没有什么不同。每个线程在启动时从全局内存获得一个静态堆栈和堆分配。如果通过过度递归耗尽堆栈,分配更多的可用堆内存,或者尝试对存储在堆内存中的任何变量进行越界操作,则会生成保护错误,并且会报告堆栈溢出错误。根据您的问题,我猜您正在通过设备端malloc调用耗尽可用的每线程堆空间

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