构建支持 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.
上的一些解释
在 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.
上的一些解释