能力 3.5 (GTX Titan)、CUDA 5、VS 2010 和 Nsignt。非图形应用程序。
当达到某个块大小时,我得到OutOfRangeStore
Exception 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 字节溢出加载
溢出会导致错误吗?从寻找错误的角度来看有用吗(而不是从性能的角度来看)