0

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

当达到某个块大小时,我得到OutOfRangeStoreException with description Memory Space=Global Size=4

这有效:10,000 个块大小为 4(及以下)的线程或 898 个块大小为 32 的线程

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

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

如果我在函数中随机分配数组,我仍然会在函数的最后一行的同一位置得到错误。

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

你以前有没有遇到过类似的问题,你能告诉我去哪里看吗?

我尝试了以下方法:

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

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

  • 我在编译时正在查看 NVCC 编译器输出,试图分析我的程序在做什么,这是一个引用:
ptxas : info : _Z14DeletePointersP10DevSimTemp 的函数属性
    8 字节堆栈帧,8 字节溢出存储,8 字节溢出加载 ptxas : info : fabsf 的函数属性
    0 字节堆栈帧,0 字节溢出存储,0 字节溢出加载 ptxas : info : _Z28UpdateTimeStep 的函数属性
    24 字节堆栈帧,20 字节溢出存储,20 字节溢出加载 ptxas : info : 函数属性
_Z21CopyNextStepToRunningP10DevSimTempii
    0 字节堆栈帧,0 字节溢出存储,0 字节溢出加载 ptxas : info : 函数属性
_Z21SendTimeStepToResultsPK19DevSimulationResultP10DevSimTempii
    0 字节堆栈帧,0 字节溢出存储,0 字节溢出加载 ptxas : info : 函数属性
_Z26UpdateCalcsResultsPK19DevSimulationResultP10DevSimTempiiPfPifiiS4_
    64 字节堆栈帧,60 字节溢出存储,60 字节溢出加载

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

4

1 回答 1

2

也许你的堆空间用完了。默认情况下只有一小块堆空间可用。你可以检查你有多少:

size_t heap_size;
cudaDeviceGetLimit(&heap_size, cudaLimitMallocHeapSize);

并用相应的cudaDeviceSetLimit()调用调整值。

于 2013-05-31T22:47:01.820 回答