我正在使用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。为什么会这样呢?