繁体   English   中英

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

[英]CUDA Stack size when using CUDA Debugging

我正在使用Visual Studio 2012,并且在使用CUDA Debugging执行代码时遇到了一些崩溃的内核。 其他一些内核运行相同的代码没有任何问题(在不同的生成数字/数据上)。 我不知道在没有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)返回的堆栈大小cudaDeviceGetLimit(&size_stack, cudaLimitStackSize)如预期的那样。

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

它似乎只是一个错误,我更新到CUDA 7.0 Release Candidate并且堆栈分配现在运行良好。

如果您遇到同样的问题,请更新到最新的驱动程序/工具包。 CUDA 7.0 RC仅适用于CUDA注册开发人员,您需要在其网站上注册。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM