使用OpenCL构建OpenCV支持

4
在CMake中,我使用OpenCL Enable ON编译了OpenCV(它自动检测到了OPENCL_INCLUDE_DIR路径,但是OPENCL_LIBRARY为空,即使在点击“config”之后也是如此。对于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的性能没有任何区别。
我从这个链接下载了AMD-APP-SDK并尝试构建,但没有OpenCL二进制文件(而是看到opengl dll文件[glew32.dll和glut32.dll])。如何通过链接OPENCL_LIBRARY构建带有OpenCL的OpenCV?
1个回答

1

我相信你已经有了OpenCL,因此可以从你对haveOpenCL的调用和版本请求的结果看出来。但是,我不确定你的性能测试结果是否意味着你没有OpenCL。

如果你想了解OpenCL,我建议先退一步并弄清楚它,然后再尝试理解OpenCV。

你的链接无效,你是否尝试过this?它有一个链接到当前的AMD APP SDK(3.0),我建议你通过该设置,并确保你可以在你的系统上构建/使用OpenCL样例,然后你应该能够排除为什么它在OpenCV中无法工作的问题(如果确实如此)。

就性能而言,这要看情况。每次发送数据到和从图形卡返回都会有一定的成本;Transparent API旨在为您做出选择:如果将其发送到卡上以进行更快的处理是值得来回旅行的...如果不值得,实际上您的性能会更差。此外,并非库中的所有内容都可以在GPU上运行。请参见opencv.org上的一些解释。

我在C:/windows/System32中找到了opencl.dll并将其删除,但是GPU仍然被使用。另外,你能回答这个问题吗?(http://stackoverflow.com/questions/41688751/understanding-the-usage-of-opencl-in-opencv-mat-umat-objects?noredirect=1#comment70603090_41688751) - Suraksha Ajith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接