2011-08-30 36 views
0

cuda-gdb和cuda-memcheck的手冊提到了上述CUDA_EXCEPTION_9:「Warp Hardware Stack Overflow」,但我一直未能找到進一步的信息細節;這兩個手冊中唯一的評論是cuda-gdb:「CUDA_EXCEPTION_9:Warp硬件堆棧溢出」的含義/發生

「這發生在warp中的任何線程觸發硬件堆棧溢出時發生,這應該很少發生。

在我的情況下,當我嘗試通過malloc()(處理相同的數據集!)在設備上動態分配內存時,會出現(!?)。試圖malloc()0字節(錯誤已被修復)反覆導致相同的異常。

在什麼情況下究竟是什麼導致了這種例外情況;它表明什麼,如何解決/規避它?

非常感謝您

回答

1

在費米GPU堆棧溢出是任何其他設備上的堆棧溢出沒有什麼不同。每個線程在啓動時從全局內存獲取靜態堆棧和堆分配。如果通過過度遞歸耗盡堆棧,請分配更多可用堆內存,或者嘗試對存儲在堆內存中的任何變量進行操作,否則會生成保護錯誤,並且會報告堆棧溢出錯誤。從你的問題,我猜想你正在通過設備端malloc調用耗盡可用的每線程堆空間。

CUDA運行時API包含用於管理堆棧和堆內存的函數cudaDeviceSetLimitcudaDeviceGetLimit。有了這些,您可以檢查運行時每個線程所提供的堆棧,堆棧和FIFO數量,並嘗試增加堆棧和堆棧大小以查看問題是否消失。