2

我有一个 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++ 调试库”,其中包含:“调试错误!” 和“已调用 R6010 中止”。

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

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

编辑:

我很确定加载超过 200 个内核会使其崩溃。单个 gpu::GpuMat 声明本身有 100 多个内核(模块),然后 SURF、BFM 和类似算法运行其余的......

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

谢谢!

4

1 回答 1

1

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

调试大量内核虽然会影响性能,但不应导致崩溃。我建议升级到 Nsight 3.0,现在可以从 Nsight Visual Studio Edition Early Access 站点获得。在这个版本中进行了许多改进。

于 2013-04-22T23:28:26.010 回答