无论如何,opencv使用cuda内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无论如何,opencv使用cuda内存相关的知识,希望对你有一定的参考价值。

我想用CUDA知道我的代码有多快,所以我用下面的开关编译OpenCV(包括cuda)

cmake CMAKE_BUILD_TYPE=RELEASE   
CMAKE_INSTALL_PREFIX=/usr/local  
WITH_CUDA=ON    
ENABLE_FAST_MATH=1   
CUDA_FAST_MATH=1   
WITH_CUBLAS=1       
INSTALL_PYTHON_EXAMPLES=OFF  
OPENCV_EXTRA_MODULES_PATH=/home/saeed/opencv_contrib/modules  
BUILD_EXAMPLES=OFF   ..

我正在研究基于Linux的机器和我系统上的专用GPU,以便我如何测量opencv代码的gpu使用情况?我用它做了那个

$  nvidia-smi

命令,它给出了关于gpu使用等的一般信息(在bash中)。

跟踪我使用的输出

$ watch -n 0.1 nvidia-smi

命令,每0.1秒更新一次信息(最少0.1秒)

所以我在opencv中有如下代码(你可以看到我不使用任何cuda函数)

#include "opencv2/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
int main()
{
     cv::Mat src(1500,1500,CV_8UC3),res;
     for (int var = 0; var < 70; ++var)
     {
         Canny(src,res,50,150,5);
     }

}

因此,当我运行上面的代码时,我在nvidia-smi页面中拍摄了一个屏幕截图(知道有多少gpu ram正在使用中)

enter image description here

正如你所看到的,有23架MiB正在使用中!所以为什么会发生这种情况!!如果我们能够阻止这种情况是正常的!如何阻止GPU解决这个问题

答案

您可以使CUDA运行时指示没有可用的GPU以及以下environment variable

CUDA_VISIBLE_DEVICES="" ./my_opencv_code_that_wont_use_gpu

如果你希望OpenCV实际上不对GPU做任何事情,我最好的猜测就是在没有CUDA支持的情况下编译它:

cmake CMAKE_BUILD_TYPE=RELEASE   
CMAKE_INSTALL_PREFIX=/usr/local  
WITH_CUDA=ON        ********MODIFY
ENABLE_FAST_MATH=1   
CUDA_FAST_MATH=1    ********MODIFY
WITH_CUBLAS=1       ********MODIFY
INSTALL_PYTHON_EXAMPLES=OFF  
OPENCV_EXTRA_MODULES_PATH=/home/saeed/opencv_contrib/modules  
BUILD_EXAMPLES=OFF   ..

以上是关于无论如何,opencv使用cuda内存的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV二维Mat数组(二级指针)在CUDA中的使用

python常用代码

如何根据 cmak 在 qt creator 中使用 opencv Cuda

CUDA:统一内存和指针地址的变化?

OpenCV尝试加载卸载的Cuda dll

OpenCV4 | 如何让传统图像处理实现三十倍加速的顶级技能