中国科学院软件研究所研究员吴恩华
综观计算机图形学的发展进程, 可以毫不夸张地说, 图形学的每次重大进展都与图形处理硬件的突破密切相关。最突出的例子莫过于八十年代初期Geometry Engine芯片的推出对于二十年来图形发展和变革所产生的巨大影响。Geometry Engine(GE)从设计上可以由一个寄存器的定制码定制出不同的功能,分别用于图形流水线中的几何变换﹑裁剪计算﹑投影缩放等。
而在初期设计的IRIS(Integrated Raster Imaging System)系列中, 12个GE单元即可组成完整的三维图形流水线。举例来说, 从GL直至今天作为事实上图形界面工业标准的OpenGL, 一个为人熟知的、最突出的特点就是将其造型变换(Modeling Transformation)与观察变换(Viewing Transformation)结合为一体, 用 ModelView矩阵栈直接完成其统一的变换过程以及复杂物体的层次造型。而这一特点恰恰是完全秉承了20年前源于GE的最初设计系统,只不过最初的设计只使用了8层深度的硬件矩阵栈而已。
令人不无感叹的是, GE诞生之前多少年来关于图形接口标准输出流水线是(如PHIGS)否(如GKS/GKS3D) 应该包括造型功能的争论从此变得无足轻重,而在图形国际标准中将造型变换与观察变换截然分开处理的理所当然的做法和理论从此成了过眼云烟。再优雅不过的设计也要服从于硬件运行的最佳效果, 因此尽管人们在使用GL/OpenGL的ModelView矩阵栈编程时大感不爽,历经二十多年的磨砺亦变得习惯成自然了。
伴随着PC级微机的崛起和普及,多年来计算机图形的大部分应用发生了从工作站向微机的转移,而这种转移甚至发生在象虚拟现实﹑计算机仿真这样的实时(中﹑小规模)应用中。实时用的计算机游戏的普及亦是这一发展的标志。这一切的发生从很大程度上源自于图形硬件的发和革新。随着计算技术和集成电路技术的发展,图形硬件的更新速度迅猛。GPU(Graphics cessing Unit)自1999年首先由nVidia公司提出来后,就其发展的速度而言,是CPU更迭度的三倍多。目前图形芯片的主要市场被nVidia和ATI(被AMD收购)这两家公司占领,从高端到低端都有应的产品来满足市场。
新的图形硬件带来一些新的特征,这些特征概括起来有如下几方面:
1)在顶点级和像素级提供了灵活的可编程特性;
2)在顶点级和像素级运算上都支持IEEE32位浮点运算;
3)支持多遍绘制的操作,这样避免了多次的 CPU 与 GPU 之间的数据交换;
4)支持绘制到纹理的功能(Render-to-Texture/pbuffer),从而避免将计算结果拷贝到纹理这一比较费时的过程;
因此当GPU的功能越来越强时,与图形有关的处理便自然而然地从CPU向GPU转移。最先发生的转移是最靠近应用程序的几何变换部分,其中包括造型变换和观察变换;其次是局部或特殊光照效果的计算和生成。当顶点级和象素级的可编程功能越来越灵活时,图形本身的处理速度和灵活性都得到了前所未有的提高。而当 GPU内部象素级的纹元达到可以参与编程的运算时,向着可作通用计算的方向发展。这时,基于GPU的通用计算便应运而生了。
基于GPU的通用计算(GPGPU: General Purpose GPU)指的是利用图形卡来实现一般意义上的计算,而不单纯是绘制。比如利用GPU来实现矢量、矩阵的基本代数运算,然后在这个基础上如何实现一些相对复杂的运算,如线性方程组的求解,从而实现复杂应用问题的求解。
相对于以前采用固定渲染管道的图形硬件,上述提到的这些新特征无疑加快了GPU在通用计算方面的应用。2003年被认为是图形硬件被用来做通用计算的一个里程碑,GPU在2003年已经进入计算的主流。而采用图形硬件来做通用计算的主要目的是为了加速,加速的动力来自这些新硬件所具有的以下主要优势:
1)一定的并行性。这一功能主要是通过多个渲染管道和RGBA四个颜色通道同时计算来体现的,另外在一个时钟周期内可以同时获取2个甚至更多副纹理。顶点程序的多个渲染管道意味着一个时钟周期可以并行处理多个顶点,而对于像素程序同样如此。相对于并行机而言,图形卡提供的并行性虽然很弱,但它在十分廉价的基础上为很多应用提供了一个很好的并行方案,尤其是对于图形本身的应用来说。
2)高密集的运算。由于图形卡内部的内存接口位宽大于CPU上的位宽,如GeForce FX的内存位宽达256 位,显然高于CPU上32位的位宽,这样整个计算的带宽大大提高。GPU相对于CPU来说,更适应传输大块的数据,虽然CPU上有Cache以加速整个计算过程,但CPU上的Cache相对于图形卡显存来说太小,一般只有64KB,而现在的显存大多都在64M以上,由此可见一斑。
3)减少了GPU与CPU的数据通信。尤其是当整个应用针对图形生成的时候,不再需要在CPU与GPU之间进行多次数据交换,从而可以让CPU解放出来做其他的事情。这些优势使得GPU比CPU更适用于流处理计算,因此 GPU也被认为是一个SIMD的并行机或者流处理器,可以用于处理大规模数据集,使得应用得到加速。而相比之下,CPU本质上是一个标量计算模型,而计算单元偏少,主要针对复杂控制和低延迟而非高带宽进行了若干优化。另外实时绘制语言的出现无疑更是加快了GPU在通用计算上的应用,如Cg、HLSL以及GLSL或者其他更为高级的面向通用计算的绘制语言的出现使得人们更容易编程实现这些运算。
阅读(1697) | 评论(0) | 转发(0) |