OpenCL & OpenCV环境配置
简介
opencl介绍
OpenCL 可以实现混合设备的并行计算,这些设备包括 CPU,GPU,以及其它处理器,比如 Cell 处理器,DSP 等。使用 OpenCL 编程,可以实现可移植的并行加速代码。主要有以下四个模型:
- 平台模型(Platform Model)
- 执行模型(Execution Model)
- 内存模型(Memory Model)
- 编程模型(Programming Model)
opencl优点
- 可移植性
- 标准化的向量处理
- 并行编程
- 并发(concurrency)编程:顺序代码通过任务调度在进程间实现资源共享,并行执行。(两个任务交替执行,不一定是同一时间点执行)
- 并行(parallel)编程:将不同的运算任务分配给不同的处理单元。
配置过程
安装OpenCV
安装的是OpenCV 3.2,可使用以下命令查看之前的版本,因为本机并没有安装过OpenCv,所以不会使用这个命令
pkg-config --modversion opencv
安装依赖
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake libeigen3-dev yasm libfaac-dev libtheora-dev libx264-dev libv4l-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev ffmpeg
实验截图
因为是安装依赖,所以要先从网页中下载依赖,再对依赖进行解压,最后才能进行编译安装,过程太长太多,所以只放入指令开始与结束的截图。由fig.2可以看出,依赖安装完成。
fig.1
fig.2
编译安装
点击
下载地址就可以下载opencv 3.2.0的压缩包。如果主机有该压缩包,可以直接在主机中解压再复制粘贴到虚拟机中,避免使用虚拟机的命令进行解压。
紧接着打开文件夹,新建编译目录,方便安装opencv。
cd opencv-3.2.0
新建编译目录
mkdir release
cd release
编译
cmake -D MAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_OPENCL=OFF -D WITH_CUDA=OFF ..
make
实验截图
编译过程中,先进行cmake,在使用make编译更新。图fig.3和fig.4是执行cmake指令开始和结果的截图;图fig.5是进行make指令的结果图。可以看出,编译过程中,环境需要的包及依赖安装编译完毕。
fig.3
fig.4
fig.5
安装
sudo make install
实验截图
该过程与以上安装过程类似,特别是make过程,所以不贴截图。仅显示安装该指令的开始的截图。
fig.6
配置链接库
PS: 配置链接库只在系统的内部进行,并不会在终端进行显示,所以该部分没有截图
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf
sudo ldconfig
验证
打开OpenCV test文件夹
make
./DisplayImage 728697338116277641.jpg
实验截图
这里要先执行指令打开OpenCV test文件夹,使用make指令,编译其中的程序,使得./DisplayImage这个指令合法化,因为图像文件就在这个文件夹内,所以./DisplayImage后面接上图像文件的名字即可。否则,则需要添加文件路径。如果能弹出窗口显示出对应的图片,则安装成功。
fig.7
fig.8
安装OpenCL
选择sdk
OpenCL是一系列库和头文件,需要根据硬件安装对应的SDK,也就是说,如果希望使用Intel CPU作为并行设备,则必须安装Intel SDK,如果使用NVIDIA GPU作为并行设备,则必须安装NVIDIA SDK。我使用的是虚拟机ubantu 16.04版本,所以选择Intel SDK。
解压tgz文件
tar zxvf intel_sdk_for_opencl_2016_ubuntu_6.3.0.1904_x64.tgz
实验截图
先把镜像放入某个文件夹,再在终端对sdk文件进行解压,因为是tgz文件,所以说使用tar指令进行解压。
fig.9
安装依赖
安装libssl-dev lsb-core libicu-dev等包(依赖)
sudo apt install dkms xz-utils openssl libnuma1 libpciaccess0 bc curl libssl-dev lsb-core libicu-dev
实验截图
fig.10
安装注册文件
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
实验截图
fig.11
执行指令,下载程序包
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
实验截图
fig.12
检查更新系统已有的包文件
sudo apt-get update
实验截图
fig.13
安装刚才下载的依赖
sudo apt-get install mono-complete
实验截图
fig.14
进入目录,开始安装
sudo sh install_GUI.sh
实验截图
安装过程中,基本是一路next下去,直到安装到“Options”页面时,点击“Customize”自定义安装组件,选择除了“Set of OpenCL(TM) files for Android* target”以外的所有组件。否则之后执行clinfo指令时,无法检测设备。
这里只放入安装开始界面的截图,表示指令在执行,安装过程开始。
fig.15
安装后,在命令行中输入clinfo就能看到平台和设备。
clinfo
实验截图
可以看出平台和设备都完整的显示在截图上。
fig.16
fig.17
到这里安装结束。但安装过程中还是出现了不少问题。接下来会分析出现的错误及解决方法。
问题分析与解决
- 依赖无法安装
一开始安装的时候,我使用的虚拟机是14.04版本的,直接安装第一步的依赖,最后发现ffmpeg这个包无法下载安装,但选择忽视,直到之后安装sdk时,在fig.15截图中弹出报错界面,尝试多次依旧是这个问题,最后认为是虚拟机版本太低,没有ffmpeg这个依赖,导致无法下载。之后选择新建一个虚拟机,改为16.04版本后,该问题就可以解决了。
- 安装16.04虚拟机报错
因为虚拟机是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。所以主机会对虚拟机的文件安全权限有一定的限制,导致出现如下图的问题。最后通过修改文件夹的属性,将限制的属性勾选,例如写入,读取等。
fig.18
- 安装clinfo
这是细节性被忽略的问题,一开始,我没有进入相应的路径进行安装clinfo,提前使用如下安装指令,导致最后安装出现如下报错,之后安装好依赖后,这个问题就解决了
sudo apt install clinfo
fig.19
实验感想
一开始不知道ubantu 14.04的版本不支持某一些依赖,重装了几次出现了如上的第一个问题,后来放弃了,本来想选择装双系统,但是装了双系统的同学建议我最好不要装,因为双系统有优点,自然就会有缺点,除了耗费相应的硬盘空间之外,维护相对难度更大,需要修改bios等权限时就会更困难。最要命的一点是,要是安装的系统出现崩溃时,很有可能导致双系统都不能运行,那就只能对双系统说拜拜了。最后尝试新建一个16.04版本的虚拟机,虽然还是出现了不少其他小问题,但是都挺好解决的,这里就不分析了。