我有一个OpenCV应用程序,还有我想使用并行NSight 调试的其他CUDA(.cu)文件。 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++调试库”,带有:“调试错误!”和“已调用R6010中止”。

可能是什么问题?是否可以避免加载此模块?我不确定它们是否必要。

以及如何正确调试CUDA内核?我知道不能同时调试CPU和GPU代码。

编辑:

我非常确定,加载200多个内核会使它崩溃。单个gpu::GpuMat声明自己拥有100多个内核(模块),然后其余部分使用SURF,BFM和类似算法运行...

我只想调试放置断点的内核(即我自己的内核,而不是OpenCV的内核)。是否可以以某种方式排除其他模块/内核?

谢谢!

最佳答案

听起来符号已为所有OpenCV内核编译,但这不是您想要的。确保您没有使用CUDA调试标志构建OpenCV。具体来说,您不希望将-g / -G /-debug *标志传递给nvcc。

调试许多内核虽然会影响性能,但不会导致崩溃。我建议升级到Nsight 3.0,现在可以从Nsight Visual Studio Edition早期访问站点上获得它。此版本已进行了许多改进。

关于visual-studio-2010 - 调试CUDA内核,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15660583/

10-16 20:41