并行计算综述
- 格式:docx
- 大小:28.73 KB
- 文档页数:6
图形处理器的通用计算研究综述
摘 要 多年来计算机图形处理器以大大超过摩尔定律的速度高速发展。图形处理器的发展极大地提高了计算机图形处理的速度和图形质量,并促进了与计算机图形相关应用领域的快速发展,与此同时,图形处理器绘制流水线的高速度和并行性以及近年来发展起来的可编程功能为图形处理以外的通用计算提供了良好的运行平台,这使得基于GPU的通用计算成为近两三年来人们关注的一个研究热点。本文从介绍GPU的发展历史及其现代GPU的基本结构开始,阐述GPU用于通用计算的技术原理,以及用于通用计算的主要领域和最新发展情况。最后,展望了GPU应用于通用计算的发展前景,并从软件和硬件两方面分析了这一领域未来所面临的挑战。
关键字 GPU; GPGPU; CUDA; 通用计算; 可编程性
1引言
计算机图形处理器GPU(Graphics Processing Unit)具有极高计算性能和相对廉价的成本,以超过摩尔定律的速度更新硬件,从2003年后在通用计算领域图形处理器GPGPU(General-Purpose Computing Graphics Processing Unit)取得长足发展。在学术界人们研制了以下典型处理器芯片:斯坦福大学的Imagine、Merrimac及国防科学技术大学的飞腾FT64[1],而飞腾处理器已成功应用于“天河一号”超级计算机的设计中。在工业界Nvidia[6]、AMD等公司持续更新其GPU硬件产品,利用推广软件的方式来扩大各自硬件产品的生态圈,目前Nvidia在通用计算领域中成果显著。
国内吴恩华教授[2-3]总结了2004年之前GPU的发展历史和现代GPU基本结构,阐述了通用计算的技术原理、软件工具及详细的发展之路,总结了各种应用领域的进展,如流体模拟、代数计算、数据库应用、频谱分析等。国外Owens研究团队综述了2008年之前GPGPU 的硬件及软件方面的应用进展[4-5],分别从GPU体系、计算编程模型、软件开发环境和编程语言等方面作了详细介绍;然后重点分析了GPU计算中的关键技术和算法问题。本文重点关注最近3年内GPGPU发展过程中关键技术的研究与进展,特别是由于海量数据处理的需要,单节点GPU受到硬件限制,多GPU系统和GPU集群的应用研究成为新热点。本文第2节介绍GPU通用计算的发展;第3节介绍GPGPU中关键技术的研究及进展;第4节介绍GPU通用计算的应用;最后总结现有研究面临的挑战和展望未来工作。
2 GPU通用计算发展
2.1 GPU的提出及最早的通用计算应用
GeForce 256—代号NVl0于1999年8月发布。这是图形芯片领域创世之作,也是第一款提出GPU概念的产品。GeForce 256所采用的核心技术有硬体T&L、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬体T&L技术可以说是GPU的标志。GeForce 256称作GPU原因就在于Geforce256创新性的在图形芯片集成了T&L(几何光照转换)功能,使得GPU具有了初步的几何处理能力,完美的解决了CPU几何吞吐量不够的瓶颈。
2.2 Shader的出现及其快速发展
在面向图形计算GPU渐渐找到了发展方向,这个方向就是给予用户更价逼真更加迅捷快地视觉体验,与此同时GPU架构遇到一些烦。首要问题就是,为了呈现更加丰富多彩的图形图像效果,不能只依靠三角形生成和固定光影转换。Shader概念的提出,使得程序员可通过它构建3D场景难度大大降低。当时最最重要的改进是增加对浮点数据的处理能力,以前GPU只能对整数进行处理,改进后提高渲染精度,使最终处理的色彩格式达到电影级别。Shader Model 2.0时代突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让设计师更加自如的的创造出更炫丽的效果。在通用性计算方面,浮点运算让GPU已经具备了通用计算的基础,这一点让GPU在通用计算方面高速发展成为了可能。
2.3 GPGPU的概念及其发展
GPGPU[7]全称General Purpose GPU,它是一种支持通用计算的图像处理器, 它除了像一般的显卡一样拥有图像处理功能之外, 还能够像 CPU一样提供一定的通用计算能力。当前,
在产业界 AMD 公司和 NVIDIA 公司都已经在生产这种支持通用计算的GPU , 对应的典型显卡有 Firestream 系列和 GTX 系列。也就是将GPU用于3D图形处理已外的通用计算,由于图形处理器硬件以大大超过摩尔定律的速度发展,人们开始挖掘图形处理器的强大计算能力来从事非图形方面的应用,并称为图形处理器通用计算(general purpose computing on the
GPU,GPGPU)。现在其应用领域已扩展到了几何造型、数值计算、流体模拟、场景绘制等领域。最初的GPGPU开发使用图形学API编程,在这种模式下,程序人员不仅要掌握需要实现的计算,还要对图形学硬件有深入的了解,使得的开发难度很大,传统的GPU并没有得到广泛的应用。2003开始,斯坦福大学的Lan Buck等人对ANSI C进行了拓展,开发了Brook编译器,大大简化了开发的过程。但是早期的Brook编译的效率很低。还由于受到GPU架构的限制,Brook也缺乏有效的数据通信机制。而后,AMD/ATI公司在其GPGPU通用计算产品Stream中采用了Brook的改进版本Brook+作为高级开发语言。由于Brook+还有一些限制,所以在灵活性方面并不如CUDA好。而且由于过多的封装,效率也并不很高,不支持多GPU,Rook+的kernel不支持高级的GPU命令,比如本地共享内存和原子操作等。已经被提交到了Source Forge上,已经没有太多的维护了。
3 GPGPU关键技术及进展
3.1 GPU编程模型
3.1.1片内编程模型
从片内与片间两个角度分析编程模型的发展。对于早期GPU片内,在数据并行编程模型基础上,程序员将各种算法映射到绘图流水线中,以此挖掘GPU硬件并行性。随着可编程部件功能增强,出现了以顶点、子素处理器等硬件为基础的渲染模型(Shader Model)。为解决片内负载均衡问题,统一各种可编程部件后出现了统一渲染模型(United Shader Model)[8]。CTM[9]对GPU片内编程模式有重要影响,抽象化GPU硬件来降低对底层的依赖,把开发控制策略返还编程人员。此后,由于更适合通用计算的流处理器SP(Stream Programming)的出现,流式编程模型(Stream Programming Model)逐渐成熟,并在Brook和CUDA编程语言中应用[10-11]。
3.1.2 片间编程模型
GPU长期以协处理或加速器的方式存在,因此GPU与CPU之间的耦合关系对片间编程模型有影响,如Nvidia GPU与CPU之间是松耦合关系,而larrabee与Fusion是紧耦合关系.松耦合体系侧重向用户提供灵活的编程模型,如OpenCL[12]存在数据并行模型、任务并行模型和混合编程模型,根据不同应用程序的性能特点灵活选择适当编程模型;CUDA也针对片间松耦合体系,基本编程模型是数据并行模型[13],而且是细粒度数据并行。此外CUDA中提供流的机制,用户运用多流可以达到任务并行执行,因此在某种程度上CUDA给出一种任务并行编程的途径。在松耦合体系中存在一个问题,由于CPU即是计算管理者又是执行者,因此CPU未被充分利用。而片间紧耦合体系有效解决了该问题,平衡编程模型能在GPU与CPU之间合理分配计算负载,充分利用CPU计算资源;实现以线程为调度单位的细粒度数据和任务并行计算。 3.1.3 编程模型发展方向
未来编程模型预计向两个方向发展。为降低并行程序设计复杂性和提高非专业开发人员的效率,GPU片内要出现元编程模式.元程序设计是编写生成代码的程序。在元编程模式中自动生成任务划分、通信等代码,编程人员更专注于特定领域的算法设计。GPU片间通信能力增强后,片间编程模型必然向分布式方向演化。如CUDASA中的分布式编程模式能有效解决负载均衡和全局存储管理、通信的问题,降低GPU集群应用程序的开发难度[14]。
3.2 GPU开发语言
GPU开发语言从专门的着色语言、面向流计算模型的流语言,发展到现在的面向通用计算领域的编程语言。以下分3个方面介绍:GPU编程语言起源着色语言(Shading Language),如GLSL、HLSL、Cg[5]。着色语言是独立图形处理硬件的高级编程语言,为了开发者灵活、方便控制并行图形渲染.存在两个局限性:(1)对底层图形库依赖性强,可移植性差;(2)开发难度大,不仅要掌握并行开发技术,而且要了解硬件结构和图形库细节。 随着非图形计算应用的增多,各种领域的用户对通用编程语言的需求增大。两大GPU厂商为扩大各自硬件产品的生态圈,分别推出不同通用计算语言,Ndivia的CUDA和AMD的Brook+。CUDA以C语言为基础,由于具备了以下两个优点,从而迅速增加了用户数量:(1)封装图形编程底层转化算法;(2)降低编程难度,用户无需考虑计算模型和操作资源的限制,利于集中设计特定应用领域算法。
4 GPU通用计算的应用
4.1在医疗领域的应用
(一)Folding@home项目,它(模拟蛋白质折叠)是一个研究研究蛋白质折叠,误折,聚合及由此引起的相关疾病的分布式计算工程。我们使用联网式的计算方式和大量的分布式计算能力来模拟蛋白质折叠的过程从而缩短人类对于癌症、阿兹海默症、帕金森氏症等的攻克过程。在NVIDIA@GeForce@GPU(图形处理器)上运行Folding@home客户端的实际结果表明,蛋白质折叠模拟工作的速度比当今的CPU快140倍。在Folding@home中应用如此强大的处理性能彻底改变了这一项目,极大地缩短了我们进行生物医学研究所需的时间。
(二)基于GPU通用计算的体绘制,体绘制是一种直接由三维数据产生屏幕上二维图像的技术。体绘制的相关研究实验分别从传统的基于GPU的体绘制和基于GPU通用计算的体绘制两个方面进行。传统体绘制使用吸收发射光照,CPU计算代理几何面,GPU绘制代理几何面用GPU通用计算时,使用阴影模型,GPU更新代理几何面,GPU进行多遍渲染。实验结构表明,基于GPU通用计算的体会绘制无论是在代理几何更新速度还是体绘制速度都明显优于基于传统GPU的体绘制。因此,在体绘制方面GPU的通用计算能力是值得肯定的。
4.2在计算机网络领域的应用
在GPU 3D云计算网络应用方面,典型的应用有:建筑师及其客户将能够审阅精密的建筑模型,包括白天或黑夜不同设置下所渲染出的模型。在线买家将能够互动地设计家庭室内装潢、重新摆放家具以及查看家纺的装饰方式,所有这些都具备完美、精确的光照效果。这些成功案例表明未来我们网店选购时,可以实时的查看产品的三维立体动画,预览衣服、鞋子等的“试穿”效果,在房屋中随意摆放家具、调节灯光“体验”是否满足要求,这些强大的网络应用让人看到GPU计算在网络方面无限美好的未来。
5 结束语
GPU的通用计算能力已经在图形图像、医疗、高性能计算、网络等各个领域展取得了突破性的进展。随着GPU通用计算的继续高速的发展,今后将会引领出更多更好的应用技术,我们应该持续热衷于GPU通用性的研究和高度的关注GPU通用技术的发展,以挖掘出更强的GPU通用计算能力。图形处理器通用计算经过多年的发展,未来仍将继续保持高速发展。GPGPU的关键技术研究中存在如下挑战:(1)由于GPU硬件标准很难统一,因此导致编程模型中难以合理分配异构计算资源。而对硬件体系不敏感、高度抽象的通用编程语言一直会存在调试困难的挑战;(2)各种领域中的软件和算法向GPU移植的难题始终限制GPGPU发展,设计高可靠性和复用性的公共并行算法库是一种有效的解决途径;(3)有效地解决分布式共享存储模型中的数据一致性问题及造成的性能损失;(4)设计优化控制GPU缓存的普适性算法,对提高各类算法性能有重要价值. GPU通用计算的应用领域尚需拓展,复杂网络研究中社会网络、生物蛋白网络等均存在数据量大、计算密度大的重要算法,因此对复杂网络并行算法的研究是个崭新的交叉研究方向。
参考文献:
[1] Yang Xue-Jun, Yan Xiao-Bo, Xing Zuo-Cheng, Deng Yu, Jiang Jiang, Du Jing, Zhang Ying.
Fei teng 64 stream processing system: Architecture, compiler, and programming. 2009,
20(8):1142-1156
[2] Wu En-Hua. State of the art and future challenge on general purposr computation by praphics
processing unit. Journal of Software, 2004, 15(10):1493-1504