并行计算综述
- 格式: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计算资源;实现以线程为调度单位的细粒度数据和任务并行计算。