功能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级别达到最大值“某事”。
您之前是否遇到过类似的问题,可以告诉我在哪里看看吗?
我尝试了以下内容:
您是否建议您查看探查器中的其他位置?
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
溢出会导致错误吗?从错误搜寻的角度来看这是有用的(不是从性能的角度来看)
答案 0 :(得分:2)
也许你的堆空间已经用完了。默认情况下,只有一小部分堆空间可用。你可以查看你有多少:
size_t heap_size;
cudaDeviceGetLimit(&heap_size, cudaLimitMallocHeapSize);
使用相应的cudaDeviceSetLimit()
来调整值。