【问题标题】:OpenCV + CUDA-stereobm + Compute 7.5 hangs (freezes)OpenCV + CUDA-stereobm + Compute 7.5 挂起(冻结)
【发布时间】:2019-07-29 18:02:51
【问题描述】:

我正在运行 cv::cuda::StereoBM,它可以在 Tesla K80 上找到。 (计算能力 3.7。)完全相同的代码,完全相同的系统库,它挂在 Geforce RTX 2080 Ti 上。 (计算能力 7.5。)我在系统上找到了其他 CUDA 代码。

特别是,这是挂起的代码:

cv::Ptr<cv::StereoBM> sbm_ptr = cv::cuda::createStereoBM();
sbm_ptr->compute(gpu_left, gpu_right, gpu_result);
// .. this line of code is never reached.

我已经仔细检查了 OpenCV 的 cuda::DeviceInfo::isCompatible,它列出了我的设备确实兼容。

我想知道如何调试它。

【问题讨论】:

  • 您应该为此类问题添加什么版本的 OpenCV 和 CUDA,这样它也可以帮助人们调试并随着时间的推移保持问题的相关性。
  • source code 可以帮助您查明挂起的确切线路。您可以尝试简单地复制/粘贴源代码并适当地更改变量名称。
  • 因此,OpenCV 4.0.0 和 4.0.1 无法构建...与 NVCC 的配置有关。问题出现在 OpenCV 3.4.4 和 3.4.5 上(这就是我尝试过的全部。)我必须将 std=c++03 传递给 NVCC 才能构建 cuda 部件。我在 Tesla K80 机器和 Gefore RTX 2080 Ti 机器上都使用了 CUDA 10.0。我的代码真的和上面的 sn-p 一样简单。我想我可以深入研究 OpenCV 代码以确定它挂在哪一行。
  • 这段代码如下:(不知道如何让栈溢出来正确格式化) cv::cuda::GpuMat gpu_left{left}; cv::cuda::GpuMat gpu_right{right}; cv::cuda::GpuMat gpu_result; sbm_ptr->计算(gpu_left,gpu_right,gpu_result); // ... 这行代码永远不会到达 gpu_result.download(result);
  • 好吧,如果这是一个已知的错误,我个人不知道,这就是我不回答这个问题的原因。就像我说的,尝试用该方法的完整源代码(我链接的)替换 sbm_ptr-&gt;compute 调用。这有望帮助您查明导致其挂起的确切 OpenCV 调用。

标签: opencv disparity-mapping


【解决方案1】:

在计算能力 7.2 上运行 StereoBM 时,我遇到了类似的挂起问题。它在 6.2 上运行良好。我检查了 OpenCV 的 GitHub 是否存在问题,OpenCV 似乎在 3.4.6 版本之前存在赛车问题。

你可以在这个帖子中找到修复:

https://github.com/opencv/opencv/pull/13850

我将补丁添加到我现有的代码中。它工作没有任何问题。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    相关资源
    最近更新 更多