2016-12-30 127 views
3

在CMake中,我用OpenCL打開了OpenCV啓用(它自動檢測到OPENCL_INCLUDE_DIR路徑,但OPENCL_LIBRARY是空的,即使在單擊配置後,對於OPENCL_LIBRARY我也沒有看到瀏覽按鈕。 OpenCV的二進制文件,然後我運行下面的代碼用OpenCL支持構建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從這link並嘗試建立但沒有OpenCL二進制文件(而是我看到了opengl dll文件[glew32.dll & glut32.dll]。我如何通過鏈接OPENCL_LIBRARY與OpenCL構建OpenCV?

回答

1

我相信你有OpenCL,因此你的電話haveOpenCL和版本請求的結果。我不確定您的性能測試的結果等同於您沒有OpenCL。

如果你想了解OpenCL,我會後退一步,先弄明白,然後試着理解OpenCV。

你的鏈接沒有用,你試過this。它有一個指向當前AMD APP SDK(3.0)的鏈接。我將通過該設置並確保您可以使OpenCL示例在您的系統上構建/工作,然後您應該能夠解決OpenCV無法正常工作的原因(如果它確實不是)。

至於性能,好吧,這取決於。每次您向顯卡發送數據或從顯卡發送數據時,都需要付出代價;透明API旨在爲您提供這種選擇:如果將它發送到卡以加快處理速度,那麼值得在那裏旅行......如果它不值得這次旅行,那麼實際上性能會更差。此外,並非所有庫都將在GPU上運行。請參閱opencv.org的一些解釋。

+0

我在C:/ windows/System32中發現opencl.dll,刪除它。但是使用了GPU。 也可以回答[this](http://stackoverflow.com/questions/41688751/understanding-the-usage-of-opencl-in-opencv-mat-umat-objects?noredirect=1#comment70603090_41688751)問題 –