CUDA Nsight Exceptions(“DataStackOverflow”)

时间:2014-04-04 18:38:17

标签: cuda gpgpu gpu-programming nsight

我正在尝试使用Visual Studio中的Nsight进行调试,并在其中一个函数调用上获取“DataStackOverflow”异常(调用堆栈包含4个设备func调用)。

它说:

StackPointer = 0x00fff7e8 and StackLimit = 0x00fff950. 

正如格雷格史密斯在评论中所说的那样:Stack在地址上逐渐减少。 此外,Greg注意到默认情况下,编译器决定是否内联设备功能。

我在设备功能中添加了__forceinline__个关键字。我的全局函数接收到指向全局RAM的8个指针(8 * 4 = 32个字节)+ 1个int(它超过256个字节的限制)。 但是现在我在全局内部的第一个非内联函数调用中遇到了堆栈溢出异常(例如make_float4)。

因此,为什么NVCC会说“你的内核没问题,你有足够的资源”,但我在运行时遇到这个异常?

1 个答案:

答案 0 :(得分:1)

GPU内存有限,所有数据和代码都会占用设备上的内存空间。调试也有一些开销并消耗一些设备内存。

您可以使用驱动程序api cuMemGetInfo获取空闲和总内存(以字节为单位)。

如果您的设备内存过剩,可能它的stacklimit很小,您可以cuCtxSetLimit设置CU_LIMIT_STACK_SIZE来更改堆栈大小。

否则,您可以尝试使用功能更强大的GPU。