c++ - opencv 仍然使用 cuda 内存

标签 c++ opencv cuda

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

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

最佳答案

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

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   ..

关于c++ - opencv 仍然使用 cuda 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48007627/

相关文章:

Android ndk-build 命令返回 'target pattern contains no ' %'

c++ - OpenGL整数纹理提升GL_INVALID_VALUE

对二维点数组进行排序以找出四个角

python - 如何在图像上方剪切空白

c++ - 为什么下面的程序会报 'is not a class, namespace, or enumeration' 错误?

python - 安装 OpenCV

c++ - CUDA AtomicCAS 死锁

c++ - 无法在 Windows 10 上安装的 Cuda 工具包 v7.5 上找到 deviceQuery

cuda - block 中的CUDA最大线程

c++ - 为什么重载operator<<时需要friend关键字?