我有一个OpenCV应用程序,还有其他CUDA( .cu )文件,我想使用 Parallel NSight 进行调试。 NSight调试适用于CUDA示例(没有OpenCV .cpp 文件),但是当我尝试在我的应用程序中启动调试器时,调试器会加载批次的其他模块(“无符号”加载“)并崩溃并出现此错误:
OpenCV Error: Gpu API call (out of memory) in unknown function, file ..\.\
opencv-2.4.4\modules\core\src\gpumat.cpp, line 1415
此外,还会打开一个窗口:“Microsoft Visual c ++ Debug Library”,其中包含:“Debug error!”和“R6010中止已被称为”。
可能是什么问题?可以避免加载这些模块吗?我不确定它们是否必要。
如何正确调试CUDA内核?我知道CPU和GPU代码不能同时调试。
修改
我很确定加载超过200个内核会导致崩溃。单个gpu :: GpuMat声明自己有超过100个内核(模块),然后SURF,BFM和类似的算法运行其余...
我想调试仅内核,我在其中放置断点(即我自己的内核,而不是OpenCV内核)。是否有可能以某种方式排除其他模块/内核?
谢谢!
答案 0 :(得分:1)
听起来好像已经为所有OpenCV内核编译了符号,这不是你想要的。确保您没有使用CUDA调试标志构建OpenCV。具体来说,您不希望将-g / -G / - debug *标志传递给nvcc。
调试很多内核虽然对性能有影响,但不应该导致崩溃。我建议升级到Nsight 3.0,它现在可从Nsight Visual Studio Edition早期访问站点获得。这个版本已经进行了许多改进。