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等都是在这一阶段研发的。

Screenshot 2022-12-05 at 2.19.46 PM.png

  • 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 (片段编程能力)

Screenshot 2022-12-05 at 2.22.55 PM.png

所谓Vertex,就是我们熟悉的组成3D图形的顶点,由于设计3D模型是基于坐标空间内部设计的,所以Vertex信息包含了3D模型在空间内的坐标等信息。Vertex Shader则是对于Vertex信息哟运算编程器,可以通过赋予特定的算法而在工作中改变3D模型的外形, Vertex Shader顶点运算单元可以直接检索显存中的材质数据。现在的游戏场景越来越复杂了。所涉及到的材质和多边形数量都非常惊人。顶点材质技术可以极大的提高GPU在处理复杂的游戏场景时的效率。并且游戏开发人员还可以利用Vertex Shader的这一新的特性,充分发挥想象,实现很多非常漂亮的特效。例如在星际争霸2demo片中展示的神族母舰黑洞的技能效果。

Screenshot 2022-12-05 at 2.24.35 PM.png

第四代GPU 的发展时期从2002年末到2003年。NVIDIA的GeForceFX 和ATI Radeon 9700同时在市场的舞台上闪亮登场,这GPUvertex programmability lfragment Programmability. miDirectx flOpenGL T#JAPI. Я #vertex programmability flfragment programmability。 í2003年起,可编程图形处理器正式诞生,并且由于DirectX 和 OpenGL锲而不舍的追赶潮流,导致基于图形硬件的编程技术, 简称GPU 编程,也宣告诞生。

Screenshot 2022-12-05 at 2.27.12 PM.png

GPU的优越性

由于GPU具有高并行结构,所以GPU在处理图形数据和复杂 算法方面拥有比CPU更高的效率。CPU大部分面积为控制器和寄 存器,与之相比,GPU拥有更多的ALU(Arithmetic Logic Unit,逻 辑运算单元)用于数据处理,这样的结构适合对密集型数据进行 并行处理。

Screenshot 2022-12-05 at 2.27.57 PM.png

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的串匹配算法的实现