抛弃CPU 迎接GPGPU计算新时代

技术空间

前言

几年来,以NVIDIA和ATI为首的两大阵营在显卡性能方面展开了一场又一场的较量,曾经的DirectX 7也一路狂飙升级到了DirectX 9。可是一直以来桌面3D显卡的功能似乎都仅限于加速渲染各种3D游戏画面,在不玩游戏的时候显卡的强大处理能力就被白白地浪费掉了。另一方面,随着显卡性能的不断提升,当今众多GPU在浮点运算能力上已经能够超越顶级x86 CPU十倍甚至数十倍,如果将显卡如此惊人的浮点运算能力运用起来,那将会极大地加速各种浮点运行的速度,为此业界提出了GPGPU的设想。新一轮显卡竞赛由此展开……

一“芯”多用 GPGPU走向前台

自从GeForce 3拉开GPU可编程序幕之后,所有显卡厂商都开始在GPU的可编程性能上苦下功夫。到了DirectX 9时代,微软定义的Shader已经赋予了程序员极大的灵活性,程序员需要实现的多数图形效果,都能通过编写Shader实现。所谓的Shader实际上就是一段段专门为GPU编写的代码,用于实现各种特定的图形操作。在DirectX 9问世的同时,微软推出的HLSL(High Level Shader Language)更是帮助程序员摆脱了用汇编指令编写Shader的初级阶段,转而采用类似于C++这样的高级语言来编写Shader指令。从GPU整个发展趋势看,我们不难发现GPU已经越来越多地具有CPU的通用性和灵活性。

此时就有人设想,如果将Shader替换成其他可执行的程序,显卡是否也能极大地加速这些程序的运行呢?要知道,一颗主频为3GHz的 Pentium 4处理器的理论浮点计算速度为12GFLOPs/s,而GeForce 8800GTX的计算能力则达到惊人的500GFLOPs/s——与CPU相比,GPU在浮点运算上的优势非常明显!为此人们提出了GPGPU的设想。

GPGPU全称是General Purpose GPU,即通用计算图形处理单元的意思。GPGPU着重于利用GPU的可编程性,让GPU去实现处理3D图形以外的计算应用。在已经发表的众多论文中,GPU已经能够实现音频处理、有限元分析、流体模拟等众多应用。对GPGPU进行深入研究是从2003年开始的,在那年的SIGGRAPH 2003大会上,许多业界泰斗级人物发表了关于利用GPU进行各种运算的设想和实验模型。会议还特地安排了时间进行GPGPU的研讨交流。

可惜的是当时的GPU大多只能支持Shader Model 2,无论在指令长度还是流控制方面都无法满足最基本的通用计算需要,这让GPGPU的研究进度变得缓慢。到了DirectX 9 Shader Model 3.0时代,新的Shader Model在指令槽、流控制方面的显著增强使得对应GPU的可编程性能得到了大大的提升。GPGPU的研究由此进入快车道。

小知识:GPGPU项目研究中的先行者是英国剑桥大学的BionicFx课题组。早在2004年9月,剑桥大学的BionicFx课题组便宣布在NVIDIA的GeForce FX 5900产品中实现了专业的实时音频处理功能,并且准备进行商业化的运作,对其产品进行销售,给音乐创作者带来实惠。随后,该解决方案被命名为“音视频互换技术”(Audio Video Exchange)。从BionicFx课题组透露的流程图中我们可以看到BionicFx的工作原理就是把待处理的音频数据转换成图形数据,然后再交由GPU处理,最终把计算完成的图形数据还原为音频。可惜两年过去了,BionicFx课题组最后还是没能成功。

其实把GPU当作普通处理器使用依然有着不小的难度,其中最要命的恐怕就是GPU是被专门设计来处理图形,因此它的编程语言架构和编程环境都难通用。GPU运行非图形程序时,往往需要依靠极其复杂的算法和较为曲折的流程,GPU的强大运算潜力很多时候就在这样的迂回过程中被一点点耗尽。除此以外,由于没有统一的API和驱动支持,GPGPU程序的开发者不得不针对每个GPU架构开发对应的软件版本,使得整个项目的推进难度倍增。

与此同时,STI(Sony/Toshiba/IBM)推出了Cell处理器,Cell处理器更倾向于MIMD(Multiple Instruction Multiple Data)方面的应用,Cell处理器架构的可编程性更好,实现起来也简单。这使得许多需要大量并行和密集浮点运算的应用开始把目光投向了这款划时代的CPU,由此看来GPGPU的研究前途暗淡……

重现曙光 AMD/ATI Firestream

就在人们认为GPGPU的研究即将偃旗息鼓的时候,ATI在2006年8月却惊人地宣布即将联手斯坦福大学在其Folding@Home项目中提供对ATI Radeon X1900 GPU的支持。在这款显卡中,GPGPU将显著地加快Folding@Home的运算速度。Folding@Home是一款基于分布式原理的蛋白质折叠计算软件,通过这个软件可以让全球众多空闲的PC连接起来,一起并行计算各种蛋白质折叠,从而缩短人类对于癌症、阿兹海默症、帕金森氏症等的攻克过程。毫无疑问,在GPGPU研究上,ATI跨出了极具意义的一步。

因为在设计的时候,Folding@home就被设计成一种支持大量数据并行处理并且不必频繁调用已完成数据的应用模式,所以将GPGPU技术应用在这个软件上就再合适不过了。由于当今所有GPU都基于SIMD(Single Instruction Multiple Data)架构,这就意味着设计者可以把需要进行处理的数据变成一个个片段(Fragment),然后依次送入GPU中进行处理从而得出结果。众所周知,GPU中往往拥有8条甚至更多的流水线,因此程序也可以一次送入至少8个片段进行并行处理,然后由GPU输出结果。业界把这样的计算形象地称作流计算(Stream Computing)。事实上,在Radeon X1900这样的GPU内部,可以让几十个甚至几百个片断流并行处理,GPU所展现的运算性能不言而喻。在Folding@Home的初步测试中,Radeon X1900的性能已经数倍于Core 2 Duo处理器,斯坦福Foldin@Home开发组更是宣称在充分优化之后,Radeon X1900的性能还可以在原基础上得到数倍提升。

在AMD收购ATI之后,趁热打铁推出了企业级流数据加速这样的概念。根据AMD的说法,企业用户只需要购买一片专门的流数据处理加速器,即可获得显著的系统性能提升。从AMD公布的图片上我们不难看出,这个被称作FireStream的流处理器实际上就是拥有1GB显存容量的Radeon X1900显卡。

与此同时,AMD还公布了流处理器的调用接口。这个被称作Close To Metal ”(CTM)的接口将会包含在FireStream驱动中,允许程序的编写者绕过DirectX或者OpenGL两大API直接调用原始指令集和显存。在AMD自己的测试中,在执行相同运算任务的情况下,采用CTM接口的运行速度是采用OpenGL接口运行速度的8倍。除此以外,CTM接口还将免费开放,供程序员使用。

进一步发展NVIDIA CUDA

尽管在DirectX 9时代NVIDIA并没有在GPGPU领域有太多的作为。但是凭借GeForce 8800GTX这款业界首个DirectX 10 GPU,NVIDIA在GPU通用计算方面实现了大步跨越,在新的通用计算领域后来居上。

由于DirectX 10要求显卡采用统一渲染架构,这就意味显卡的所有处理单元都能同时支持Vertex Shader、Pixel Shader和Geometry Shader。但是NVIDIA显然不满足于DirectX 10的基本要求,GeForce 8800GTX拥有的128个Stream Processor不仅可以完成上面的所有操作,还能实现物理加速和其他功能的计算。统一渲染架构加上强大的执行单元,使得程序员无须考虑传统GPU上的VS和PS比例,在开发程序的时候自然更为灵活高效。

除此以外NVIDIA还公布了被称作Compute Unified Device Architecture(统一计算设备架构)的GPU通用计算技术。这个技术首次为程序员带来了和C语言类似的GPGPU程序开发环境,并且也在驱动中加入了对GeForce显卡原始指令和显存的控制支持。它和AMD Firestream的不同之处在于,CUDA提供的开发环境加上GeForce 8800GTX的统一渲染架构使得程序员在编写程序的时候操作更加简单。在执行效率方面,CUDA和DirectX 10显卡的配合显然也将会高出AMD Firestream不少。

1-d10-1.jpg
GPU在流体力学计算中的应用效果
1-d10-2.jpg
GPU应用在地形模拟计算中
1-d10-3.jpg
使用GPGPU技术进行运算的Folding@Home
1-d10-4.jpg
AMD Firestream流处理加速器

结语

对于所有用户来说,我们都将会从未来的GPGPU研究和应用中获益。未来显卡不但能加速3D画面的渲染,还可以加速各种音频处理、表单计算,甚至浮点运算密集的视频、音频压缩等计算。到时,显卡这一名词也许将会成为历史,取而代之的将会是具有图形加速功能的流处理器。