GPU发展简史
GPU(Graphic Processing Unit),中文翻译为“图形处理器”,在现代计算机系统中的作用变得原来越重要。 20世纪六、七十年代,受硬件条件的限制,图形显示器只是计算机输出的一种工具。限于硬件发展水平,人们只是纯粹聪软件实现的角度来考虑图形用户界面的规范问题。此时还没有GPU的概念
GPU概念在20世纪70年代末和80年代初被提出,使用单片集成电路(monolithic)作为图形芯片,此时的GPU被用于视频游戏和动画方面,它能够很快地进行几张图片的合成(仅限于此)。在20世纪80年代末到90年代初这段时间内,基于数字信号处理芯片(digital signal processor chip)的GPU被研发出来,与前代相比速度更快、功能更强,当然价格是非常昂贵。在1991年,S3 Graphics公司研制出第一个单芯片2D加速器,到了1995年,主流的PC图形芯片厂商都在自己的芯片商增加了对2D加速器的支持。
1998年NVIDIA公司宣布modern GPU的研发成功
标志着GPU研发的历史性突破成为现实。通常将20世纪70年代末到1998年的这一段时间称之为pre-GPU时期,而自1998年往后的GPU称之为modern GPU。在pre-GPU时期,一些图形厂商,如SGI、Evans & Sutherland,都研发了各自的GPU,这些GPU在现在并没有被淘汰,依然在持续改进和被广泛的使用,当然价格也是非常的高昂。modern GPU 使用晶体管(transistors) 进行计算,在微芯片(microchip)中,GPU所使用的晶体管已经远远超过 CPU。例如,Intel在2.4GHz的Pentium IV上使用5千5百万 (55 million)个晶体管;而NVIDIA 在GeForce FX GPU上使用超过1亿2千5百万(125 million)个晶体管,在NVIDDIA 7800 GXT上的晶14体管达到3亿2百万(302 million)个。
回顾GPU的发展历史
自1998年后可以分为4个阶段。NVIDIA于1998年宣布Modern GPU研发成功,这标志着第一代 Modern GPU的诞生,第一代GPU包括NVIDIA TNT2, ATI 的Rage和3Dfx的Voodoo。这些GPU可以独立于CPU进行像素缓存区的更新,并可以光栅化三角面片以及进行纹理操作,但是缺乏三维顶点的空间坐标变换能力,这意味着“必须依赖于CPU 执行顶点坐标变换的计算”。这一时期的GPU功能非常有限,只能用于纹理组合的数学计算或者像素颜色值的计算。 1999年,nvidia推出了一款可以用“惊变”来形容的显示核心代号NV10的geforce 256。nVidia率先将硬体T&L整合到显示核中。T&L原先由CPU负责,或者由另一个独立处理机处理。T&L是一大进步,原因是显视核心从CPU接管了大量工作。硬件T&L引擎带来的效果是,3D模型可以用更多的多边形来描绘,这样就拥有了更加细腻的效果。而对于Lighting来说,CPU不必再计算大量的光照数据,直接通过显卡就能获得更好的效能。同时,这一阶段的GPU对于纹理的操作也扩展到了立方体纹理(cube map)。NVIDIA的GeForce MAX, ATI的Radeon 7500等都是在这一阶段研发的。
-
1999年,nvidia推出了一款可以用“惊变”来形容的显示核心代号NV10的geforce 256。 nVidia率先将硬体T&L整合到显示核中。T&L原先由CPU负责,或者由另一个独立处理机处理。T&L是一大进步,原因是显视核心从CPU接管了大量工作。硬件T&L引擎带来的效果是,3D模型可以用更多的多边形来描绘,这样就拥有了更加细腻的效果。而对于Lighting来说,CPU不必再计算大量的光照数据,直接通过显卡就能获得更好的效能。同时,这一阶段的GPU对于纹理的操作也扩展到了立方体纹理(cube map)。NVIDIA的GeForce MAX, ATI的Radeon 7500等都是在这一阶段研发的。
-
2001年是第三代modern GPU的发展时期,这一时期研发的 GPU提供vertex programmability(顶点编程能力),如GeForce 3,GeForce 4Ti, ATI 的8500等。 这些GPU 允许应用程序指定一个序列的指令进行顶点操作控制(GPU编程的本质!),这同样是一个具有开创意义的时期,这一时期确立的GPU编程思想一直延续到今天,不但深入到工程领域帮助改善人类日常生活(医疗、地质勘探、游戏、电影等),而易开创或延伸了计算机科学的诸多研究领域(体绘制、光照模拟、人群动画、通用计算等)。同时,Direct8 和OpenGl都本着与时俱进的精神,提供了支持vertex programmability的扩展。不过,这一时期的GPU还不支持像素级的编程能力,即fragment programmability (片段编程能力)
所谓Vertex,就是我们熟悉的组成3D图形的顶点,由于设计3D模型是基于坐标空间内部设计的,所以Vertex信息包含了3D模型在空间内的坐标等信息。Vertex Shader则是对于Vertex信息哟运算编程器,可以通过赋予特定的算法而在工作中改变3D模型的外形, Vertex Shader顶点运算单元可以直接检索显存中的材质数据。现在的游戏场景越来越复杂了。所涉及到的材质和多边形数量都非常惊人。顶点材质技术可以极大的提高GPU在处理复杂的游戏场景时的效率。并且游戏开发人员还可以利用Vertex Shader的这一新的特性,充分发挥想象,实现很多非常漂亮的特效。例如在星际争霸2demo片中展示的神族母舰黑洞的技能效果。
第四代GPU 的发展时期从2002年末到2003年。NVIDIA的GeForceFX 和ATI Radeon 9700同时在市场的舞台上闪亮登场,这GPUvertex programmability lfragment Programmability. miDirectx flOpenGL T#JAPI. Я #vertex programmability flfragment programmability。 í2003年起,可编程图形处理器正式诞生,并且由于DirectX 和 OpenGL锲而不舍的追赶潮流,导致基于图形硬件的编程技术, 简称GPU 编程,也宣告诞生。
GPU的优越性
由于GPU具有高并行结构,所以GPU在处理图形数据和复杂 算法方面拥有比CPU更高的效率。CPU大部分面积为控制器和寄 存器,与之相比,GPU拥有更多的ALU(Arithmetic Logic Unit,逻 辑运算单元)用于数据处理,这样的结构适合对密集型数据进行 并行处理。
GPU 采用流式并行计算模式,可对每个数据进行独立的并 行计算,所谓“对数据进行独立计算”,即,流内任意元素的计 算不依赖于其它同类型数据,例如,计算一个顶点的世界位置坐 标,不依赖于其他顶点的位置,所谓“并行计算”是指“多个数 据可以同时被使用,多个数据并行运算的时间和1个数据单独执 行的时间是一样的”。所以,在顶点处理程序中,可以同时处理 N个顶点数据。
GPU的缺陷
由于“任意一个元素的计算不依赖于其它同类型数据”,导 致“需要知道数据之间相关性的”算法,在GPU 上难以得到实现, 一个典型的例子是射线与物体的求交运算。GPU 中的控制器少 于CPU,致使控制能力有限。另外,进行GPU编程必须掌握计算 机图形学相关知识,以及图形处理API,入门门槛较高,学习周 期较长,尤其国内关于GPU编程的资料较为匮之,这些都导致了 学习的难度。在早期,GPU编程只能使用汇编语言,开发难度高、 效率低,不过,随着高级Shader language 的兴起,在GPU 上编程 已经容易多了。
GPU的更多应用
科学可视化计算:由于人体CT、地质勘探、气象数据、流体力学 等科学可视化计算处理的数据量极大,仅仅基于CPU 进行计算完 全不能满足实时性要求,而在GPU 上进行计算则可以在效率上达 到质的突破,许多在cPU 上非常耗时的算法,如体绘制中的光线 投射算法,都可以成功移植到GPU上,所以基于GPU的科学可视 化研究目前己经成为主流。 通用算法:基于GPU进行通用计算的研究逐渐成为热点,被称之 AIESEE& S SSPGESSREOTP器品兴装是片我头器 经在GPU上得到了实现,并有不谷的性能表现,目前,线性代数, 物理仿真和光线跟踪算法都已经成功的移植到GPU上。在国内, 中国科学院计算技术研究所进行了基于GPU的串匹配算法的实现


...