cuda和comment的手册提到了上面的CUDA_EXCEPTION_9:"Warp硬件堆栈溢出“,但是我没有找到更多的细节;这两本手册中给出的唯一评论是
“当翘曲中的任何线程触发硬件堆栈溢出时,就会发生这种情况。这应该是罕见的。”
在我的情况下,它有时(!)当我试图通过malloc() (处理同一组数据!)动态分配设备上的内存时发生。尝试malloc() 0字节(错误已修复)重复导致相同的异常。
在何种情况下,究竟是什么导致了这一例外;它表明了什么,一个人如何修正/规避它?
非常感谢
发布于 2011-08-30 20:08:12
费米GPU上的堆栈溢出与任何其他设备上的堆栈溢出没有什么不同。每个线程在启动时都从全局内存中获取静态堆栈和堆分配。如果通过过度递归耗尽堆栈,则分配更多可用堆内存,或尝试对存储在堆内存中的任何变量执行超出界限的操作,将生成保护错误,并将得到堆栈溢出错误报告。从您的问题中,我猜您正在通过设备端malloc调用耗尽可用的每线程堆空间。
CUDA运行时API包含用于管理堆栈和堆内存cudaDeviceSetLimit和cudaDeviceGetLimit的功能。有了这些,您可以检查运行时给出的每个线程的堆栈、堆和printf FIFO的数量,并尝试增加堆和堆栈大小,以查看问题是否消失。
https://stackoverflow.com/questions/7248878
复制相似问题