Performance OpenCV 3.1 OpenCL在Nvidia GPU上的性能

Performance OpenCV 3.1 OpenCL在Nvidia GPU上的性能,performance,opencv,opencl,gpu,nvidia,Performance,Opencv,Opencl,Gpu,Nvidia,我正在学习OpenCV,我想做的第一件事就是使用使用OpenCL的新的透明API测试GPU的利用率。 因此,我使用UMat运行了一个示例代码,CPU使用量减少了一半。 然后我意识到它使用的是我集成的Intel GPU,所以将环境变量OPENCV_OPENCL_DEVICE更改为:GPU:1,这样它就可以在更强大的专用nVidia GPU上运行,但结果比只使用带Mat的CPU而不使用OPENCL更糟糕 以下是我的系统规格: CPU:Intel core-i7 4510U 2.6-3.1 GHz i

我正在学习OpenCV,我想做的第一件事就是使用使用OpenCL的新的透明API测试GPU的利用率。 因此,我使用UMat运行了一个示例代码,CPU使用量减少了一半。 然后我意识到它使用的是我集成的Intel GPU,所以将环境变量OPENCV_OPENCL_DEVICE更改为:GPU:1,这样它就可以在更强大的专用nVidia GPU上运行,但结果比只使用带Mat的CPU而不使用OPENCL更糟糕

以下是我的系统规格:

CPU:Intel core-i7 4510U 2.6-3.1 GHz

iGPU:Intel HD,配备20个着色器

dGPU:nVidia GeForce 840M,带384个着色器

我运行的代码是:

VideoCapture cap(0);
if (!cap.isOpened()) return -1;
UMat frame, edges;
namedWindow("edges", 1);
for (;;)
{
    cap >> frame;
    cvtColor(frame, edges, CV_BGR2GRAY);
    GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
    Canny(edges, edges, 0, 30, 3);
    imshow("edges", edges);
    if (waitKey(33) >= 0) break;
}
return 0;
当我运行代码时,CPU和GPU的使用率为:

无OpneCV:CPU使用率17%

使用OpenCV英特尔:CPU使用率5%-GPU使用率9%

使用OpenCV nVidia:CPU使用率38%-GPU使用率9%


我想知道为什么更强大的GPU会导致更糟糕的结果?

您使用的是OpenCL,对于NVIDIA GPU,它必须包装CUDA API,导致比集成GPU的OpenCL更深入的API调用。对于小规模任务没有好处。要使用GPU,你必须让它做繁重的工作。你也看到了错误的比较。计算每秒处理的帧数并比较这些值。您可以使用一个整数来计算循环的次数,并监视开始和结束时间来计算程序运行的时间。请记住CPU必须等待GPU,以便它显示处理过的图像,因此如果英伟达GPU提前完成,CPU将变得繁忙,因为它不会花费太多的时间等待GPU。如果您不是100%确定您在专用GPU上尝试将环境变量更改为“NVIDIA:GPU:”。之后,将高斯模糊内核值更改为大值,您将看到差异。@HumamHelfawi我确信,因为我使用GPU-Z监控它。但增加内核大小会显示帧速率的差异。谢谢