Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV+;CUDA stereobm+;计算7.5挂起(冻结)_Opencv_Disparity Mapping - Fatal编程技术网

OpenCV+;CUDA stereobm+;计算7.5挂起(冻结)

OpenCV+;CUDA stereobm+;计算7.5挂起(冻结),opencv,disparity-mapping,Opencv,Disparity Mapping,我正在运行cv::cuda::StereoBM,它在特斯拉K80上运行。(Compute capability 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,

我正在运行cv::cuda::StereoBM,它在特斯拉K80上运行。(Compute capability 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.
cv::Ptr sbm_Ptr=cv::cuda::createStereoBM();
sbm_ptr->计算(gpu_左、gpu_右、gpu_结果);
// .. 这行代码永远不会到达。
我仔细检查了OpenCV的
cuda::DeviceInfo::isCompatible
,它将我的设备列为确实兼容


我想知道如何调试它。

在Compute capability 7.2上运行StereoBM时,我遇到了类似的挂起问题。它在6.2上运行良好。我检查了OpenCV的GitHub以了解问题,OpenCV在3.4.6版本之前似乎存在赛车问题

您可以在此线程中找到修复程序:


我将补丁添加到现有代码中。它工作起来没有打嗝。希望有帮助。

在Compute capability 7.2上运行StereoBM时,我遇到了类似的挂起问题。它在6.2上运行良好。我检查了OpenCV的GitHub以了解问题,OpenCV在3.4.6版本之前似乎存在赛车问题

您可以在此线程中找到修复程序:


我将补丁添加到现有代码中。它工作起来没有打嗝。希望有帮助。

您应该为此类问题添加什么版本的OpenCV和CUDA,这样它也可以帮助人们进行调试,并随着时间的推移保持问题的相关性。可以帮助您确定挂起的确切线路。您可以尝试简单地复制/粘贴源代码并适当地更改变量名。。。与NVCC的配置有关。这个问题发生在OpenCV 3.4.4和3.4.5上(这就是我所尝试的)。我必须将std=c++03传递给NVCC才能生成cuda部件。我在特斯拉K80机器和Gefore RTX 2080 Ti机器上使用CUDA 10.0。我的代码实际上和上面的代码片段一样简单。我想我可以深入研究OpenCV代码,找出它挂在哪一行上;cv::cuda::GpuMat gpu_right{right};cv::cuda::GpuMat gpu_结果;sbm_ptr->计算(gpu_左,gpu_右,gpu_结果);/。。。这行代码从未达到gpu_结果。下载(结果);如果这是一个已知的bug,我个人不知道,这就是为什么我不回答这个问题。就像我说的,尝试用该方法(我链接的)的完整源代码替换
sbm\u ptr->compute
调用。这将有助于您准确定位导致挂起的OpenCV调用。您应该为此类问题添加什么版本的OpenCV和CUDA,这样也可以帮助人们进行调试,并随着时间的推移保持问题的相关性。可以帮助您准确定位挂起的行。您可以尝试简单地复制/粘贴源代码并适当地更改变量名。。。与NVCC的配置有关。这个问题发生在OpenCV 3.4.4和3.4.5上(这就是我所尝试的)。我必须将std=c++03传递给NVCC才能生成cuda部件。我在特斯拉K80机器和Gefore RTX 2080 Ti机器上使用CUDA 10.0。我的代码实际上和上面的代码片段一样简单。我想我可以深入研究OpenCV代码,找出它挂在哪一行上;cv::cuda::GpuMat gpu_right{right};cv::cuda::GpuMat gpu_结果;sbm_ptr->计算(gpu_左,gpu_右,gpu_结果);/。。。这行代码从未达到gpu_结果。下载(结果);如果这是一个已知的bug,我个人不知道,这就是为什么我不回答这个问题。就像我说的,尝试用该方法(我链接的)的完整源代码替换
sbm\u ptr->compute
调用。这将有助于您准确定位使其挂起的OpenCV调用。