Cuda OutOfRangeStore异常,其中没有对数组进行超出范围的赋值
能力3.5(GTX Titan)、CUDA 5、VS 2010和Nsignt。非图形应用程序 当达到某个块大小时,我将得到Cuda OutOfRangeStore异常,其中没有对数组进行超出范围的赋值,cuda,Cuda,能力3.5(GTX Titan)、CUDA 5、VS 2010和Nsignt。非图形应用程序 当达到某个块大小时,我将得到OutOfRangeStore异常,说明内存空间=全局大小=4 这适用于:块大小为4(及以下)的10000个线程或块大小为32的898个线程 这不起作用:块大小为5(及以上)的10000个线程或块大小为32的899个线程 在使用Nsight进行调试时,代码在我分配浮点数组的位置中断,例如float*x=new float[someSmallValue],上面和下面的行正在分配
OutOfRangeStore
异常,说明内存空间=全局大小=4
这适用于:块大小为4(及以下)的10000个线程或块大小为32的898个线程
这不起作用:块大小为5(及以上)的10000个线程或块大小为32的899个线程
在使用Nsight进行调试时,代码在我分配浮点数组的位置中断,例如float*x=new float[someSmallValue]
,上面和下面的行正在分配其他数组,因此没有分配到超出范围的变量。实际上,整个函数都是更新数组
如果我在函数中乱序数组的分配,我仍然会在相同的位置(函数的最后一行)得到错误
我的直觉是我在SM级别上达到了“某物”的最大值
您以前是否遇到过类似的问题,您能建议我去哪里查找吗?
我尝试了以下方法:
- 分析,看看我是否在消耗全局内存,然而,虽然我能够分析事务和其他东西,但我无法分析程序执行的最大使用全局内存,我使用96个寄存器,0个共享内存。我正在关注“CUDA发布”部分
- 我在编译时查看NVCC编译器输出,试图分析我的程序正在执行的操作,这是一段引文:
泄漏会导致错误吗?从bug搜索的角度来看(而不是从性能的角度来看)这有用吗?也许堆空间已经用完了。默认情况下,只有一小部分堆空间可用。您可以通过以下方式查看您拥有多少:
size_t heap_size;
cudaDeviceGetLimit(&heap_size, cudaLimitMallocHeapSize);
并使用相应的
cudaDeviceSetLimit()
调用调整该值。这就是问题所在!我把堆的大小增加了一倍。
size_t heap_size;
cudaDeviceGetLimit(&heap_size, cudaLimitMallocHeapSize);