归根到底,我们的数字世界都是数字“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版本,目前已经可以对各种知名应用软件提供支持,是现在市场上成熟的此类程序。