10年GPU通用计算回顾

  • 格式:docx
  • 大小:1.83 MB
  • 文档页数:22

显卡只能玩游戏? 10年GPU通用计算回顾 2010年04月06日 08:42 中关村在线[硬件频道] [选购指导] [评测试用] [行情快报] [新闻新品] [知识技巧] [攒机推荐] [论坛]作者:中关村在线濮元恺第1页:硬件T&L单元催生GPU诞生前言:从世界上第一款GPU横空出世到今天,显卡已经走过了10年历史。

GPU在这10年演变过程中,我们看到GPU从最初帮助CPU分担几何吞吐量,到Shader单元初具规模,然后出现Shader单元可编程性,到今天GPU通用计算领域蓬勃发展这一清晰轨迹。

这10年包含了无数设计者艰辛努力的成果,GPU也用自己的发展速度创造了半导体行业的奇迹,而GPU当今成就的见证者,正是我们的无数硬件玩家和游戏爱好者。

我们可以肯定以GPU诞生初期的设计定位和市场需求,没有人敢相信今天GPU能走上通用计算这条道路,正所谓无心插柳柳成荫。

● 硬件T&L单元催生GPU诞生Geforce 256——代号NV10于1999年8月发布。

这是图形芯片领域开天辟地的产品,也是第一款提出GPU概念的产品。

GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。

Geforce 256所采用的核心技术有硬体T&L、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬体T&L技术可以说是GPU的标志。

Geforce 256诞生1999年,已经凭借RivaTNT2在图形芯片界立足的NVIDIA,主动放弃帮自己打下江山的Riva品牌,新启用的Geforce强调力量并沿用至今,并衍生出驱动品牌Forceware及芯片组品牌nForce。

Geforce256之所以被称作GPU原因就在于Geforce256划时代的在图形芯片内部集成了T&L(几何光照转换)功能,使得GPU拥有初步的几何处理能力,彻底解决了当时众多游戏瓶颈发生在CPU几何吞吐量不够的瓶颈。

Geforce 256显卡的出色表现,NVIDIA强大的技术实力得到全面释放,这块显卡是真正的全面领先型产品,而不是靠16bit色和32bit色的区域优势或者是单纯依赖特定的3D API 支持。

T&L几何光照转换原先由CPU负责,或者由另一个独立处理机来负责处理(例如一些旧式工作站显视卡)。

较强劲的3dfx Voodoo2 和 Rendition Verite显示核心已整合了几何(三角形)建构,但硬件T&L仍是一大进步,原因是拥有该技术的显示核心从CPU接管了大量工作。

硬件T&L单元让Geforce 256几乎成为一个全新的GPU标准,也让GPU更加独立自主。

DirectX 7.0推出获得众多支持不可否认在成功的背后,离不开微软推出的图形API——DirectX 7.0的鼎力支持。

DirectX 7.0最大的特色就是支持T&L,在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。

使用了T&L功能后,这两种效果的计算用显示卡的GPU 来计算,这样就可以把CPU从繁忙的劳动中解脱出来。

同时从另一个角度提升了GPU在PC 系统中的地位。

值得一提的是GeForce2首开了GPU通用计算的先河,凭借其强大的多纹理处理性能,结合纹理环境参数和纹理函数可以实现一些很灵活的应用。

它具有Texture Shader以及Register Combiner单元,有一定的数值计算能力。

开发人员可以利用Texture Shader的依赖纹理进行数据访问,用Register Combiner进行计算。

GeForce2被用于求解数学上的扩散方程,成为GPU通用计算的最早应用。

1f96第2页:Shader概念形成 GPU走上“邪路”● Shader单元概念形成,GPU开始走上“邪路”面向图形计算,让GPU逐渐找到了自己的方向,这个方向就是给予用户更真更快地视觉体验,但是GPU架构也遇到一些问题亟待解决。

首要问题就是,要实现更加复杂多变的图形效果,不能仅仅依赖三角形生成和固定光影转换。

虽然当时游戏画面的提高基本上都是通过大量的多边形、更复杂的贴图来实现的。

但是后期发展中,顶点和像素运算的需求量猛增。

每个顶点都包含许多信息,比顶点上的纹理信息,散光和映射光源下表现的颜色,所以在生成多边形的时候带上这些附加运算,就可以带来更多的效果,但这也更加考验顶点和像素计算能力。

研究人员发现,同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大。

可编程模型与旧有的预定义模型是不同的。

这种模型中,数据是透过virtual machine 以一个类似于带有特殊汇编指令集的pre-arranged(事先安排好)程序进行处理的,程序员可以直接对其进行编程。

凭借可编程几何管线和可编程像素管线,使用者可以自由的控制几何和像素的代码设计。

这对于图形开发者是空前的,他们可以通过基本的着色器,利用开发工具,产生全新的、极具创造力的效果。

也正是可编程管线的引入,为GPU发展翻开了新的篇章,GPU开始向SIMD 处理器方向发展,凭借强大的并行处理性能,使得GPU开始用有了部分流式处理器特征。

UT2003已经模拟出比较真实的场景Shader概念的提出,意味着程序员可通过它们实现3D场景构建的难度大大降低。

通过VS和PS的渲染,可以很容易的宁造出真实的水面动态波纹光影效果。

此时DirectX的权威地位终于建成。

Pixel Shader(顶点着色器)和Vertex Shader(像素着色器)硬件逻辑,真正支持像素和顶点的可编程。

虽然当时可编程性很弱,硬件限制太多,顶点部分出现可编程性,像素部分可编程性有限。

但这的确是硬件T&L之后PC图形技术的又一重大飞跃。

3D娱乐的视觉体验也因此向接近真实迈进了一大步,波光粼粼的水面是那个时期用于演示Shader能力的典型DEMO,相比之下DirectX 7绘制的水面效果就单调得多。

Shader单元概念提出之后,无论NVIDIA还是ATI,都在做强显卡前端(Setup Engine 及其相关部分,如光栅器Rasterizer、设定Setup和顶点装配器Vertex Assembler)的同时,逐渐将竞争重点放在显卡核心部分——Pixel Shader(顶点着色器)和Vertex Shader (像素着色器),无论是Radeon 8500还是Geforce Ti 4200都内置的规格和频率更强的PS和VS单元。

同时显卡的后端ROP(光栅化引擎,负责完成像素的输出)也逐渐强大,各种各样的多重采样AA模式和更高的抗锯齿模式逐步得以实现。

第3页:Shader Model 2.0 Shader编程性增强● Shader Model 2.0时代到来,Shader编程性逐步增强随后到来的DirectX 9.0时代,让Shader单元具备了更强的可编程性。

2002年底微软发布的DirectX9.0中,PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。

全新的Vertex Shader(顶点着色引擎)编程将比以前复杂得多,新的Vertex Shader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。

PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。

Mark 2003第四项游戏测试Mother Nature基于Shader Model 2.0的3D Mark 2003第四项游戏测试Mother Nature,对Shader 单元运算复杂度和材质大小提出非常严苛的要求,当时只有高端显卡才能流畅通过该测试。

VS 2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX 8)的VS性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。

最重要的一点改进是增加对浮点数据的处理功能,以前GPU只能对整数进行处理,改进后提高渲染精度,使最终处理的色彩格式达到电影级别。

Shader Model 2.0时代突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。

而从通用性方面理解,支持浮点运算让GPU已经具备了通用计算的基础,这一点是至关重要的。

如果说DirectX 8中的Shader单元还是个简单尝试的话,DirectX 9中的Shader则成为了标准配置。

除了版本升级到2.0外,DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消,在较低DirectX版本游戏运行时会使用VS单元模拟执行硬件T&L单元的功能。

第4页:Shader快速发展灵活度不断提升● S hader计算能力快速发展,灵活度不断提升在图形渲染中,GPU中的可编程计算单元被称为着色器(Shader),着色器的性能由DirectX中规定的Shader Model来区分。

GPU中最主要的可编程单元式顶点着色器和像素着色器。

为了实现更细腻逼真的画质,GPU的体系架构从最早的固定单元流水线到可编程流水线,到DirectX 8初步具备可编程性,再到DirectX 10时代的以通用的可编程计算单元为主、图形固定单元为辅的形式,最新的DirectX 11更是明确提出通用计算API Direct Compute 概念,鼓励开发人员和用户更好地将GPU作为并行处理器使用。

图形流水线中可编程单元的行为由Shader单元定义,并可以由高级的Shading语言(例如NV的Cg,OpenGL的GLSL,Microsoft的HLSL)编写。

Shader源码被译为字节码,然后在运行时由驱动程序将其转化为基于特定GPU的二进制程序,具备可移植性好等优势。

传统的图形渲染流线中有两种不同的可编程着色器,分别是顶点着色单元(Vertex Shader,VS)和像素着色单元(Pixel Shader,PS)。

表一和表二比较详细地罗列出从Shader 2.0到Shader 4.0像素着色单元和顶点着色单元的演进过程。