随便拿起一个DIYer写下的一份PC配置单,图形卡(video card)往往是必不可少的部分。当被问及为何会钟情于独立的图形卡而不是选择主板自带的集成显示芯片的时候,得到的答案往往惊人的一致——为了游戏。是的,人类仅仅是为了满足自己的七情六欲,我们的PC才拥有了无比强大的运算能力。甚至比起同期的图形子系统,PC里其他各部分都相形见绌。从R300到NV40,再到现在最新的G80,每一代旗舰GPU的晶体管都大大超过了同期的顶级CPU,也在挑战其同时代半导体工艺的极限。不过,GPU正如其名字“graphics processing unit(图形处理器)”一样,纵然有再强大的运算能力,也只能在其转司的实时图形渲染领域内一展手脚。仅仅靠娱乐市场就支撑起NV40和G80这种怪兽级别的半导体芯片,这种情况让人难以想象。不过,既然在很多特定领域,GPU都能提供比同时代CPU更为强大的处理能力,那么是否有人想过让图形处理器来替代CPU充当这些程序中运算的主角,或者是“帮助”CPU更快的完成运算任务呢?答案是肯定的。
似乎在一夜之间,GPU用于通用计算(General Purpose GPU)及其相关方面的问题成为一个十分热门的话题。GPGPU指的是利用图形卡来进行一般意义上的计算,而不是单纯的绘制。让人们感到惊奇的是,在计算机图形处理器多年巡视发展的进程中,几乎没有人认真的预言过这一重大应用。而在今天,由于GPU具备了极高的性能和前所未有的发展速度以及普及率,使得人们对于GPU的这一新的应用前景给予了空前高的期望和热情。下面一些数字也许能帮助你更加深刻的了解人们为什么对于GPU通用处理如此关注。
自诞生起,GPU就将摩尔定律的定义大大扩展。研究表明,从1993年开始,GPU的性能以每年2.8倍的速度增长,这个数字大大超过了PC其他子系统的发展速度。
一块工作频率为3.0GHz的Pentium 4处理器,其晶体管数目为1.25亿个,即使算上SSE指令集的SIMD(单指令并发多数据流,这种情况是浮点吞运算下吐能力的最理想状况),也只有6GFlops的峰值浮点处理能力,而同期的一块NV40 GPU就有2.22亿个晶体管。峰值浮点运算能力很轻易超过40GFlops。
GPU拥有自己的独立子存储系统--显存,它拥有比系统主内存高得多的带宽。Intel曾经为它的Pentium 4 XE系列处理器所拥有的1066MHz前端总线所提供的8.6GB/S的带宽倍感自豪,而同期一块普通的GeForce 6800就拥有20GB/S以上的显存带宽。
由上面几点可以看出,因为具备强大的并行处理能力和极高的存储器带宽,GPU如果被抽象成一个“流处理器”(Stream Processor),来用于诸如科学运算、数据分析、线性代数、流体模拟等需要大量重复的数据集运算和密集的内存存取的应用程序,那么我们就能获得一些比CPU强悍得多的计算能力。相比之下,CPU本质上是一个标量计算模型,计算单元偏少,主要针对复杂控制和低延迟而非高带宽优化。正是因为这些优势,使得GPU比CPU更适用于流处理计算。目前,AMD和NVIDIA两大图形芯片巨头都提出了自己的GPGPU方案。