作者:飞鸿惊雪
本文主要探究OpenCL的GPU和多核CPU的异构计算问题,主要简要阐述了什么是OpenCL异构计算,讲述CPU和GPU各自的特点,并且把他们结合起来做异构计算的前景。然后具体讲述在高性能实验室Linux工作站上如何搭建多GPU和多核CPU异构OpenCL环境。最后用实验验证了所安装的OpenCL异构计算环境能够正常工作,说明什么是OpenCL的多GPU与多核CPU异构环境的platform,device等。
1 何为OpenCL异构计算
OpenCL不仅仅是一种计算机语言,更是一个非常好的API,它可以使得开发者很容易的开发出跨平台的GPU计算程序,充分利用GPU强大的计算能力然后应用在各种领域。同时OpenCL对于异构运算的支持也开始明朗化。
图1 OpenCL标准所提倡的CPU-GPU异构计算
我们知道CPU和GPU各有所长,一般而言CPU擅长处理不规则数据结构和不可预测的存取模式,以及递归算法、分支密集型代码和单线程程序。这类程序任务拥有复杂的指令调度、循环、分支、逻辑判断以及执行等步骤。例如,操作系统、文字处理、交互性应用的除错、通用计算、系统控制和虚拟化技术等系统软件和通用应用程序等等。而GPU擅于处理规则数据结构和可预测存取模式。例如,光影处理、3D 坐标变换、油气勘探、金融分析、医疗成像、有限元、基因分析和地理信息系统以及科学计算等方面的应用。
图2 AMD GPU在OpenCL下的存储体系
尽管在不少方面GPU表现优异,但在一段时间内,还会维持CPU与GPU各自发展的态势,它们可以继续在各自擅长的领域发挥作用,而未来的演进方向是相互取长补短,走向融合,而OpenCL正是它们融合与并行发展的连接桥梁。从CPU角度来讲,为了提高处理能力,以前是多线程,目前是多核,将来的发展方向是众核。
OpenCL的标准很大程度上决定了它的未来。获得整个计算机/视频硬件行业的支持也将起到帮助作用。从独立软件开发商的角度来看,OpenCL是通向混合(GPU/CPU)计算的大门。任何涉足高性能计算领域的人都会告诉你,在非标准的API上投入资金和时间是一项具有风险的业务,而OpenCL显然具备更大的潜力。
在Open CL下编程模型
正向不断增加吞吐量和提高能效性的方向发展;而从GPU角度来讲,其可编程性能本来是在芯片内部固化的程序,然后发展到局部可编程,最后是完全可编程。也就是说,GPU是在提高所处理的吞吐量的同时,向通用处理的方向发展。
2 Linux工作站下搭建OpenCL环境
Linux的OpenCL环境。
其中的硬件和操作系统等配置如下:
高性能实验室workstation-1:
1 Redhat Linux 6.1 64位操作系统
2 64位AMD 6核处理器,32G内存,500G硬盘,双显卡
3 显卡1:华硕HD 6870:AMD的GPU芯片ATI Radeon HD 6870
4 显卡2:NVIDIA Quadro FX 4800
高性能实验室workstation-2:
1. Arch Linux 64位操作系统
2. 64位AMD 6核处理器,32G内存,500G硬盘,双显卡
3. 显卡1:NVIDIA Quadro FX 4800
4. 显卡2:NVIDIA Quadro FX 4800
GPU显卡的环境配置主要步骤是先装显卡驱动,再装OpenCL SDK;而AMD CPU的环境配置只要直接安装AMD 的OpenCL SDK就行了,像workstation-1中,已经为显卡安装了AMD OpenCL SDK因此可以直接使用CPU;而像workstation-2如果打算在多核CPU上运行程序,则也要在安装一个AMD OpenCL SDK维AMD的CPU提供OpenCL环境。具体环境的配置如下。
2.1 RedHat Linux 6.1工作环境搭建
Linux文本模式下安装ATI显卡驱动,再在图形界面下安装AMD OpenCL SDK。
2.1.1 安装ATI显卡驱动
华硕HD 6870显卡的GPU芯片为ATI Radeon HD 6870,到AMD主页上下载最新的显卡驱动,这里是ati-driver-installer-8.85.7.2-x86.x86_64.run。
安装驱动
进入Linux下的文本命令行模式(也即启动方式为3),root根用户下运行命令:
[cpp] view plain copy
- ./ati-driver-installer-8.85.7.2-x86.x86_64.run
直到显卡驱动成功,会出现如下显示:
[cpp] view plain copy
1. Created directory fglrx-install.0PFT89
2. Verifying archive integrity... All good.
3. Uncompressing ATI Catalyst(TM) Proprietary Driver-8.911
4. ......................................................................................................
5. ==================================================================
6. ATI Technologies Catalyst(TM) Proprietary Driver Installer/Packager
7. ==================================================================
8. Detected configuration:
9. Architecture: i686 (32-bit)
10. X Server: X.Org 6.9 or later
配置驱动程序,运行下面的命令
[cpp] view plain copy
1. aticonfig --initial
没有输出错误信息,说明安装正常。
重新设为X Window模式(即为启动方式5),重启,下面安装AMD OpenCL SDK。
2.1.2 安装AMD OpenCL SDK
下载64位AMD OpenCL SDK软件AMD-APP-SDK-v2.5-RC2-lnx64.tgz
解压原始AMD openCL SDK包
[cpp] view plain copy
1. su
2. mkdir SDK-install
3. cd SDK-install
4. cp AMD-APP-SDK-v2.5-lnx64.tgz ./
5. tar -xvzf AMD-APP-SDK-v2.5-lnx64.tgz
6. rm AMD-APP-SDK-v2.5-lnx64.tgz
运行自动安装sh
[cpp] view plain copy
1. ./ Install-APP.sh
重启机器
[cpp] view plain copy
1. reboot
运行测试程序,激活OpenCL环境
[cpp] view plain copy
1. cd /opt/AMDAPP/samples
2. make
编译正常,没有出错!
按理说不需要这一步,因为样例程序可以不编译测试,但是不知为何这个opencl不编译样例程序就不能正常运行,必须要编译,搞不懂。
到samples/opencl/bin/x86_64下运行编译好的样例程序
[cpp] view plain copy
1. cd opencl/bin/x86_64
2. ./FFT
运行正常没有出错!
注意:必须到OpenCl安装目录make编译一遍,不然OpenCL环境没被激活,不能使用。
2.2 Arch Linux工作环境搭建
该工作站中,有两个NVIDIA的显卡,还有一个AMD的多核CPU,因此安装步骤主要是以下三步:
NVIDIA显卡驱动;
NVIDIA的OpenCL SDK--供NVIDIA的GPU使用;
AMD的OpenCL SDK--供AMD多核CPU使用;
具体的安装步骤和2.1节中形似,这里不多冗述。