构建支持 OpenCL 的 OpenCV

Build OpenCV with OpenCL support

在 CMake 中,我在启用 OpenCL 的情况下构建了 OpenCV(它自动检测到 OPENCL_INCLUDE_DIR 路径,但 OPENCL_LIBRARY 为空,即使在单击配置之后也是如此。对于 OPENCL_LIBRARY 我不也看不到浏览按钮.. 在生成 opencv 二进制文件之后我 运行 下面的代码

#include <iostream>
#include <fstream>
#include <string>
#include <iterator>
#include <opencv2/opencv.hpp>
#include <opencv2/core/ocl.hpp>

int main()
{
  if (!cv::ocl::haveOpenCL())       
      cout << "OpenCL is not avaiable..." << endl;          
   else cout << "OpenCL is AVAILABLE! :) " << endl; //this is the output

   cv::ocl::setUseOpenCL(true);

   cout << context.ndevices() << " GPU devices are detected." << endl; 
   for (int i = 0; i < context.ndevices(); i++)
   {
     cv::ocl::Device device = context.device(i);
     cout << "name:              " << device.name() << endl;
     cout << "available:         " << device.available() << endl;
     cout << "imageSupport:      " << device.imageSupport() << endl;
     cout << "OpenCL_C_Version:  " << device.OpenCL_C_Version() << endl;
     cout << endl;
    } //this works & i can see my video card name & opencl version
    cv::ocl::Device(context.device(0));
}

当我使用 UMat 来测量性能时,使用(UMat)或不使用(Mat)OpenCL 的性能没有任何区别。

我从这个 link 下载了 AMD-APP-SDK 并尝试构建但是没有 OpenCL 二进制文件(相反我看到了 opengl dll 文件[glew32.dll & glut32.dll]。我如何通过链接 OPENCL_LIBRARY 使用 OpenCL 构建 OpenCV?

我相信您有 OpenCL,因此是您调用 haveOpenCL 和版本请求的结果。我不确定您的性能测试结果是否等同于您没有 OpenCL。

如果你想了解 OpenCL,我会先退后一步,先弄清楚它,然后尝试用它来了解 OpenCV。

你的link没用,你试过了吗this。它有一个 link 到当前的 AMD APP SDK (3.0) 我会通过那个设置并确保你可以在你的系统上制作 OpenCL 样本 build/work 然后你应该能够解决它的原因在 OpenCV 中不工作(如果它真的不工作)。

至于性能,嗯,视情况而定。每次向图形卡发送数据或从图形卡发送数据时,都会产生一定的成本; Transparent API 旨在为您做出选择:如果将其发送到卡以进行更快的处理值得来回往返……如果不值得,您的性能实际上会更差。此外,并非所有库都会在 GPU 上 运行。请参阅 opencv.org.

上的一些解释