【问题标题】:Debugging CUDA kernels调试 CUDA 内核
【发布时间】:2013-03-17 15:16:21
【问题描述】:

我有一个 OpenCV 应用程序,带有额外的 CUDA(.cu) 文件,我想使用 Parallel NSight 进行调试。 NSight 调试适用于 CUDA 示例(没有 OpenCV .cpp 文件),但是当我尝试在我的应用程序中启动调试器时,调试器会加载 lots 的附加模块(“没有符号加载”)并崩溃并出现此错误:

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 的内核)。是否可以以某种方式排除其他模块/内核?

谢谢!

【问题讨论】:

  • 您使用的是哪个版本的 Nsight?

标签: visual-studio-2010 opencv cuda


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多