OutOfRangeStore异常,其中没有超出范围的数组赋值

时间:2013-05-31 20:08:11

标签: cuda

功能3.5(GTX Titan),CUDA 5,VS 2010和Nsignt。非图形应用程序。

当达到特定的区块大小时,我收到OutOfRangeStore异常,其中包含说明Memory Space=Global Size=4

这适用于:带有blocksize 4(及以下)的10,000个线程或带有块大小为32的898个线程

这不起作用:带有块大小为5(及以上)的10,000个线程或带有块大小为32的899个。

当使用Nsight进行调试时,代码在我分配浮动数组的地方断开,例如float* x = new float[someSmallValue],上面的行和下面的行正在分配其他数组,因此没有分配给出的变量约束实际上,整个函数是新的数组。

如果我在函数内调整数组的分配,我仍然会在函数的最后一行的相同位置得到错误。

我的预感是我在SM级别达到最大值“某事”。

您之前是否遇到过类似的问题,可以告诉我在哪里看看吗?

我尝试了以下内容:

  • 分析,看看我是否正在消耗我的全局内存,但是,当我能够分析事务和其他东西时,我无法分析我的程序执行的最大使用全局内存,我正在使用96寄存器,0共享内存。我专注于“CUDA发布”部分

您是否建议您查看探查器中的其他位置?

  • 在编译试图分析我的程序正在做什么时,我正在查看NVCC编译器输出,这是一个引用:
ptxas : info : Function properties for _Z14DeletePointersP10DevSimTemp
    8 bytes stack frame, 8 bytes spill stores, 8 bytes spill loads ptxas : info : Function properties for fabsf
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads ptxas : info : Function properties for _Z28UpdateTimeStep
    24 bytes stack frame, 20 bytes spill stores, 20 bytes spill loads ptxas : info : Function properties for
_Z21CopyNextStepToRunningP10DevSimTempii
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads ptxas : info : Function properties for
_Z21SendTimeStepToResultsPK19DevSimulationResultP10DevSimTempii
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads ptxas : info : Function properties for
_Z26UpdateCalcsResultsPK19DevSimulationResultP10DevSimTempiiPfPifiiS4_
    64 bytes stack frame, 60 bytes spill stores, 60 bytes spill loads

溢出会导致错误吗?从错误搜寻的角度来看这是有用的(不是从性能的角度来看)

1 个答案:

答案 0 :(得分:2)

也许你的堆空间已经用完了。默认情况下,只有一小部分堆空间可用。你可以查看你有多少:

size_t heap_size;
cudaDeviceGetLimit(&heap_size, cudaLimitMallocHeapSize);

使用相应的cudaDeviceSetLimit()来调整值。