我想通过使用Transparent API来加速我的程序。为了测试速度是否有所提高,我尝试使用UMat而不是Mat。但是,这样做比在我的笔记本电脑上使用Mat慢。我正在使用Ubuntu 16.04。我的GPU是Intel Ivybridge [8086:0166](http://www.thinkwiki.org/wiki/Intel_HD_Graphics)。 CPU:英特尔®酷睿™i5-3320M CPU @ 2.60GHz×4。我正在使用OpenCV 3.2.0(在Qt 5.9.1上)并通过以下方式安装:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_IPP=ON -D WITH_OPENCL=ON -D WITH_OPENGL=ON ..
make -j $(nproc)
sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
我按照本指南在我的机器上安装OpenCL:https://askubuntu.com/questions/850281/opencl-on-ubuntu-16-04-intel-sandy-bridge-cpu。我能够从网站上运行OpenCL测试代码,并在终端工作中运行“clinfo”。
我还启用了IPP,如下所述:https://software.intel.com/en-us/articles/enabling-ipp-on-opencv-windows-and-linux-ubintu
此外,我尝试了没有IPP并且使用了cmake配置,但没有改变任何内容。
我使用以下代码来确定速度:
#include "opencv2/opencv.hpp"
#include <iostream>
#include <chrono>
using namespace cv;
using namespace std;
using namespace std::chrono;
int main(int argc, char** argv)
{
UMat img, gray;
imread("/home/robin/Pictures/Lenna.png", 1).copyTo(img);
//img = imread("/home/robin/Pictures/Lenna.png", 1);
high_resolution_clock::time_point t1 = high_resolution_clock::now();
for(int i = 0; i < 1000; i++) {
cvtColor(img, gray, COLOR_BGR2GRAY);
GaussianBlur(gray, gray,Size(7, 7), 1.5);
Canny(gray, gray, 0, 50);
}
high_resolution_clock::time_point t2 = high_resolution_clock::now();
auto duration = duration_cast<microseconds>( t2 - t1 ).count();
cout << duration << endl;
return 0;
}
输出为4442085(4,4秒)。使用Mat(通过将UMat更改为Mat并使用img = imread(“/ home / robin / Pictures / Lenna.png”,1);)时间为2628712。
我真的不知道我在这里做错了什么。我非常感谢各种帮助。谢谢!