使用CUDA调试时的CUDA堆栈大小

3
我正在使用Visual Studio 2012,在使用CUDA调试执行代码时,有些内核会崩溃。其他一些内核在运行相同的代码时没有任何问题(在不同生成的数字/数据上)。我不知道这些内核是否在没有CUDA调试运行程序时崩溃,因为我没有收到任何错误信息。
错误是:
CUDA Debugger detected data stack overflow on 120 threads.  
First thread:  
blockIdx = {2,0,0}  
threadIdx = {1,0,0}  
StackPointer = 0x00ffe9d0  
StackLimit = 0x00ffea40   

通过查阅文档,我找到了如何增加堆栈大小(我还需要增加堆大小)的方法:

//Increase memory limits
size_t size_heap, size_stack;
cudaDeviceSetLimit(cudaLimitMallocHeapSize,20000000*sizeof(double));
cudaDeviceSetLimit(cudaLimitStackSize,12928);
cudaDeviceGetLimit(&size_heap, cudaLimitMallocHeapSize);
cudaDeviceGetLimit(&size_stack, cudaLimitStackSize);
printf("Heap size found to be %d; Stack size found to be %d\n",(int)size_heap,(int)size_stack);

默认的堆栈大小为6464,我希望将其翻倍以查看是否有改进。当我使用标准Windows调试器启动程序时,由 cudaDeviceGetLimit(&size_stack, cudaLimitStackSize) 返回的堆栈大小为12928,与预期相符。

然而,当我使用CUDA调试器启动程序时,它报告的堆栈大小为1024,而不是12928。为什么会这样呢?


在GeForce 520M和GeForce 840M上进行了测试,两者都显示出相同的问题。 - RemiDav
1个回答

2

看起来只是一个bug, 我升级到CUDA 7.0 Release Candidate后,堆栈分配现在运行良好。

如果您遇到相同的问题,请更新到最新的驱动程序/工具包。 CUDA 7.0 RC仅提供给CUDA注册开发人员,您需要在他们的网站上注册。


我在使用Tesla 2075C和CUDA V 5.5时遇到了相同的问题,升级到CUDA V 7解决了这个问题。 - TripleS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接