我想知道使用 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)
如您所见,有 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/