在字符时代,用户的计算机上并不存在“显卡”这个概念。但自从有了
GUI图形化操作界面之后,显卡就变得越来越重要了,图形化的操作界面需要对大量数据进行关联与处理操作,特别是3D游戏的发展更是为图形化技术的进步注入了强大动力。时至今日,图形子系统已经发展成为PC中强悍的一个分支,单就计算能力而言,图形子系统的速度以及运算能力甚至数倍、数十倍于
CPU。如果坐拥一座“金山”却不知道合理利用,没有比这更愚蠢的行为了,下一阶段业界的开发重点就是如何发掘显卡这座金山富裕的计算资源为我们所用。
归根到底,我们的数字世界都是数字“0”与“1”的集合,而处理器要做的事情就是对这两个数字各种不同的排列组合做出反应——现在世界上有数以百亿计的各类处理器正在从事着这样的工作。以我们熟悉的PC系统来说,很多重要的控制指令以及数据运算工作都是由CPU来完成的,我们形象地将CPU称为整台计算机的“神经中枢”。
当前CPU与GPU计算能力的对比简表 | |
CPU/GPU型号 |
对应32位单精度浮点运算能力 |
英特尔Core i7 965 |
72 GFLOPS |
NVIDIA GeForce GTX 280 |
933 GFLOPS |
AMD Radeon HD 4870 X2 |
2.4 TFLOPS(单颗4870核心减一半)* |
*注释:FLOPS= Floating-point Operations Per Second, |
中枢可以完成很多工作、处理各类指令,但如果就运算速度以及计算能力来说,CPU远远不如图形计算核心GPU,以我们现在顶级的英特尔Core i7 965处理器来说,在默认情况下,它的浮点计算能力只有NVIDIA GeForce GTX 280 CPU的1/13,与AMD的Radeon HD 4870 X2相比差距就更大了。于是我们就陷入了一种尴尬境地,CPU作为指令发布者,它可以完成一些“战略性”的部署与决策,而“事必躬亲”明显是强人所难。如果我们换种思路,将这些小事儿交给速度更快的GPU去完成,效果是不是事半功倍呢?
用具体的例子来说,以往我们使用Adobe Photoshop CS4时,打开一张大容量的RAW照片时会感到机器明显变慢;在对图片进行缩放、旋转等操作时往往需要等上更长的时间。这是因为传统的处理方式需要通过CPU来对图片中的每一个像素进行运算,图片越复杂所需要的时间就越多,只有等全部操作完成后,我们才能在电脑屏幕上看到输出结果。而使用GPU进行计算时,CPU只需要告诉GPU现在要去处理哪张图片,还要对它进行哪些操作,这种CPU与GPU之间的交流沟通在瞬间就可以完成;而GPU的执行效率要远远高于CPU,所以当我们开启软件的GPU加速功能之后,这些操作会变得异常迅速和高效。几乎在一瞬间,你就可以看到完成之后的结果,是不是比以前的操控体验更加舒适了呢?使用GPU加速的好处还远不止这些,以前我们只能对图片进行2D范围内的操作,而现在我们甚至可以对图片三维空间的旋转、扭曲等操作。
以前提到超级计算机,大家肯定会在第一时间想到“至强”、“皓龙”以及“CELL”等名字,因为集群服务器或者超级计算机都是基于多路CPU架构基础之上的。不过在去年11月份,NVIDIA正式发布了面向个人的“超级计算机”——Tesla,别看这个小家伙其貌不扬,但性能却非常强悍。
Tesla可以像普通PC那样放在你的书桌之上,内置一颗4核处理器还有3~4个GPU单元——在搭配4枚GPU时,960个流处理器可以实现每秒钟4万亿次的计算能力。与传统的超级计算机相比,其价格只有传统产品的1%不到而且非常省电,举例来说,在4年前上海超级计算中心所采购的曙光
4000A(10万亿次)需要近亿元人民币,占地1/4个足球场,现在你只需要两台半Tesla就可以获得相当性能的“个人超级计算机”。看来GPU绝对是一个多面手,不仅颠覆了我们的视界,还同样颠覆了原有的架构体系以及超级计算机高高在上的运算成本。
让GPU帮助CPU去做更多的事情,这种想法并不是什么新鲜事儿了。早在三年前,AMD就首先倡导了一种“General Purpose GPU(GPGPU)”的概念,他们(当时的ATI)并为此专门提供了Stream SDK(开发工具包),这实际上就是一个针对当时镭系列显卡的一个开发环境,不过受限于编程语言的问题,只有深入了解Radeon驱动语言的程序员才能够进行深层次开发,这个原因导致了用户入门门槛过高。
与AMD的“犹抱琵琶半遮面”相比,NVIDIA的工程师做得更彻底一些,他们提出用通用性非常高的C语言为蓝本,让开发人员直接用C语言编写程序,然后通过一个特殊的SDK——CUDA将这些程序变成GPU可以看得懂的语言,并让GPU将工作进行下去。在去年6月份时NVIDIA颁布了CUDA 2.0版本,目前已经可以对各种知名应用软件提供支持,是现在市场上成熟的此类程序。
纵然CUDA红透了半边天,业界也清楚地看到仅靠一家公司之力,很难在这个领域有更深层次的作为,这方面在IT领域有很多前车之鉴。有基于此,在去年12月份,在APPLE公司的牵头下,标准化团体Khronos Group批准了异构计算用标准API——“OpenCL 1.0”。
按照这项计划,日后半导体厂商将推出支持OpenCL API的元件驱动器以及支持OpenCL指令的编译器;在程序员端,只要软件开发人员按照标准编写源代码,就可让程序在A公司的CPU上、B公司的DSP又或者C公司的GPU上面运行,而无需按照处理器的架构以及厂商的专用程序来进行“定制生产”。这样一来就可以提高处理器的选择自由度,并让程序能够以优化的方式得到运行。AMD公司表示将在今年上半年让“Stream SDK”支持OpenCL 1.0,由于Stream SDK采用C语言扩展而成的“Brook+”作为编程语言,所以AMD方面表示将继续使用Brook+用于高抽象度的编程环境,这与OpenCL使用C语言作为基础并不矛盾。
NVIDIA方面也表示,CUDA将在第一时间支持OpenCL标准,而且目前的OpenCL程序都是以
GeForce显卡作为初期版本的测试平台,在今年第二季度,NVIDIA将提供支持OpenCL的正式版本供用户下载使用。而且NVIDIA方面负责开发的工程师同样表示,CUDA将作为一种“高抽象度语言”继续提供给研发人员。
如此看来,虽然大家在底层问题上达成了共识,不过AMD与NVIDIA两家公司却仍然为未来留有后手。不过这种影响也仅仅针对参与开发工作的程序员,对于普通用户来说,根本感觉不到API具体语言对自己的影响。就好像我们日常食用的大米,用户只需要付费从商店中购买就是了,不需要管它是产自山里面的梯田,又或者是规模化经营的水田。
现在我们已经知道GPU能够被赋予更多的功能与应用方式,但你知道使用GPU之后,能够给你带来多大的效率提升吗?
18倍:使用显卡(GPU)对高清视频进行编码运算时,其效率能够达到使用CPU时的18倍。
36倍:伊利诺伊大学厄本那香槟分校的研究人员使用GPU进行分子动力学研究,其速度是传统工作站的36倍。
50倍:在使用Matlab进行AccelerEyes计算时,CPU的效率是CPU的50倍。
100倍:在进行天体物理N-body算法模拟时,GPU的运算速度是CPU的100倍。
149倍:牛津大学的研究人员,使用CUDA 开发包研制金融模拟程序,其运行速度是传统方式的149倍!
相信未来还会有更多突破……