GPU架构“征途之旅”即日起航显卡GPU架构之争永远是DIY玩家最津津乐道的话题之一,而对于众多普通玩家来说经常也就看看热闹而已。
大多数玩家在购买显卡的时候其实想的是这款显卡是否可以满足我实际生活娱乐中的应用要求,而不大会很深入的关注GPU的架构设计。
不过,如果你想成为一个资深DIY玩家,想与众多DIY高手“高谈阔论”GPU架构设计方面的话题的时候,那么你首先且必须弄明白显卡GPU架构设计的基本思想和基本原理,而读懂GPU架构图正是这万里长征的第一步。
显卡帝手把手教你读懂GPU架构图通过本次GPU架构图的“征途之旅”,网友朋友将会和显卡帝共同来探讨和解密如下问题:一、顶点、像素、着色器是什么;二、SIMD与MIMD的架构区别;三、A/N在统一渲染架构革新中的三次交锋情况如何;四、为什么提出并行架构设计;五、A/N两家在GPU架构设计的特点及其异同点是什么。
以上目录也正是本文的大致行文思路,显卡帝希望能够通过循序渐进的分析与解读让众多玩家能够对GPU架构设计有个初步的认识,并且能够在读完本文之后能对GPU架构图进行独立认知与分析的基本能力,这将是本人莫大的欣慰。
非统一架构时代的GPU架构组件解读上世纪的绝大多数显示加速芯片都不能称之为完整意义上的GPU,因为它们仅仅只有像素填充和纹理贴图的基本功能。
而NVIDIA公司在1999年所发布的GeForce 256图形处理芯片则首次提出了GPU的概念。
GPU所采用的核心技术有硬件T&L、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件T&L (Transform and Lighting,多边形转换与光源处理)技术可以说是GPU问世的标志。
演示硬件几何和光影(T&L)转换的Demo● 传统的固定渲染管线渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。
在某种程度上可以把渲染管线比喻为工厂里面常见的各种生产流水线,工厂里的生产流水线是为了提高产品的生产能力和效率,而渲染管线则是提高显卡的工作能力和效率。
什么叫一条“像素渲染管线”?简单的说,传统的一条渲染管线是由包括Pixel Shader Unit (像素着色单元)+ TMU(纹理贴图单元) + ROP(光栅化引擎)三部分组成的。
用公式表达可以简单写作:PS=PSU+TMU+ROP 。
从功能上看,PSU完成像素处理,TMU负责纹理渲染,而ROP则负责像素的最终输出。
所以,一条完整的像素管线意味着在一个时钟周期完成至少进行1个PS运算,并输出一次纹理。
● Shader(着色器)的引入而GPU的下一次重大革新则是引入了Shader(着色器)。
着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编辑性,从而可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制。
这极大的提高了图像的画质。
而从GeForce 3到GeForce 9,GPU的发展都是一直基于这种用于显卡硬件几何架构/渲染过程的Shader来进行的。
传统(像素)管线/Shader示意图● Shader(着色器)的分类早期的Shader(着色器)有两种,一种是顶点着色器,称为Vertex Shader(OpenGL称为vertex program),取代固定渲染管线中的变换和光照部分,程序员可以自己控制顶点变换、光照等。
另一种是像素着色器,称为Pixel Shader(OpenGL称为fragment program),取代固定渲染管线中的光栅化部分,程序员可以自己控制像素颜色和纹理采样等。
3D场景的对象都是由顶点形成关于顶点,我们需要小小说明一下:所有3D场景的对象都是由顶点形成。
一个顶点是X、Y、Z坐标形成的3D空间中的一点,多个顶点聚在一起(至少四个)可形成一个多边形,如三角形、立方体或更复杂的形状,将材质贴在其上可使该组件(或几个排好的组件)看起来更真实。
上图的3D立方体就是由八个顶点所形成,使用大量顶点,可形成弧线形对象等较复杂的图像。
传统shader指令结构● GPU的像素着色单元和顶点着色单元在图形处理中,最常见的像素都是由RGB(红绿蓝)三种颜色构成的,加上它们共有的信息说明(Alpha),总共是4个通道。
而顶点数据一般是由XYZW四个坐标构成,这样也是4个通道。
在3D图形进行渲染时,其实就是改变RGBA四个通道或者XYZW四个坐标的数值。
为了一次性处理1个完整的像素渲染或几何转换,GPU的像素着色单元和顶点着色单元从一开始就被设计成为同时具备4次运算能力的算数逻辑运算器(ALU)。
SIMD和MIMD两种结构你知道吗?在我们继续介绍GPU架构设计之前我们需要对SIMD和MIMD这两种结构进行一个详细的说明。
1966年,MichealFlynn根据指令和数据流的概念对计算机的体系结构进行了分类,这就是所谓的Flynn分类法。
Flynn将计算机划分为四种基本类型,即SISD、MIMD、SIMD、MISD。
SIMD(Single Instruction Single Data Stream,单指令单数据流)结构传统的顺序执行的计算机在同一时刻只能执行一条指令(即只有一个控制流)、处理一个数据(即只有一个数据流),因此被称为单指令单数据流计算(Single Instruction Single Data Stream,SISD)。
MIMD(多指令流多数据流)结构而对于大多数并行计算机而言,多个处理单元都是根据不同的控制流程执行不同的操作,处理不同的数据,因此,它们被称作是多指令流多数据流计算机,即MIMD(Multiple Instruction Stream Multiple Data Stream,简称MIMD)计算机,它使用多个控制器来异步地控制多个处理器,从而实现空间上的并行性。
● 传统SIMD架构在执行效率下降的原因分析数据的基本单元是Scalar(标量),就是指一个单独的值,GPU的ALU进行一次这种变量操作,被称做1D标量。
由于传统GPU的像素着色单元和顶点着色单元从一开始就被设计成为同时具备4次运算能力的算数逻辑运算器(ALU),所以GPU的ALU在一个时钟周期可以同时执行4次这样的并行运算,所以ALU的操作被称做4D Vector(矢量)操作。
一个矢量就是N个标量,一般来说绝大多数图形指令中N=4。
图形指令中标量与矢量由于顶点和像素的绝大部分运算都是4D Vector,它只需要一个指令端口就能在单周期内完成4倍运算量,显然SIMD架构能够有效提升GPU的矢量处理性能以使效率达到100%。
但如果4D SIMD架构一旦遇上1D标量指令的时候,效率就会陡然降至原来的1/4,而其他的3/4模块几乎被闲置。
为了解决这种资源被浪费的情况,ATI和NVIDIA在进入DX9时代后相继采用混合型设计,比如R300就采用了3D+1D的架构,允许Co-issue操作(矢量指令和标量指令可以并行执行),NV40以后的GPU支持2D+2D和3D+1D两种模式,虽然很大程度上缓解了标量指令执行效率低下的问题,但依然无法最大限度的发挥ALU运算能力,尤其是一旦遇上分支预测的情况,SIMD在矢量处理方面高效能的优势将会大大降低。
分析一下其中的原因,我们可以得知:在早期,传统的1条渲染管线包含了4个基本单元,而大多数程序指令都是4D的,所以执行效率会很高。
然而随着API的不断革新以及游戏设计中复杂的Shader指令的发展,4D指令的出现比例开始逐步下降,而1D/2D/3D等混合指令开始大幅出现,故而传统的管线式架构效率开始越来越低下。
GPU架构大变革:统一渲染架构袭来微软DirectX 10对于统一渲染架构的提出,可谓是GPU架构设计的一场大变革。
它的核心思想是:将Vertex Shader(顶点着色)和Pixel Shader(像素着色)单元合并成一个具备完整执行能力的US(Unified Shader,统一渲染)单元,指令可以直接面向底层的ALU 而非过去的特定单元,所以在硬件层面US可以同时吞吐一切shader指令,同时并不会对指令进行任何的修改,也不会对shader program的编写模式提出任何的强迫性的改变要求。
GS(几何着色器)、PS(像素着色器)、VS(顶点着色器)首次三位一体:US从DirectX 10开始,微软真正将注意力开始转向了Shader效率上来,借助提升Shader效率来提升对应设计的运算单元的整体运行效率,而最终给玩家的体现就是带来流畅度(帧数)的提升。
当然也可以用来进行更复杂和灵活的其他操作。
●N卡第一代GPU统一架构核心之G802006年11月,NVIDIA发布了业界第一款DirectX 10构架的GPU——G80。
G80由一套完整的包含仲裁资源的几何处理单元,与之相连的8个SM阵列,6组TA(纹理寻址)和6组ROP(光栅化引擎)单元组成,整个构架以高速crossbar(交叉)总线直连。
G80的标量流处理器架构NVIDIA在G80核心架构上把原来的4D着色单元完全打散,流处理器统统由矢量设计改为了标量运算单元。
每一个ALU都有自己的专属指令发射器,初代产品拥有128个这样的1D运算器,称之为流处理器(SP)。
这些流处理器可以按照动态流控制智能的执行各种4D/3D/2D/1D指令,无论什么类型的指令执行效率都能接近于100%。
G80这种标量流处理器即MIMD(多指令流多数据流)架构。
虽然说G80将GPU Shader执行效率提升到了一个新高度,但我们知道:4个1D标量ALU和1个4D矢量ALU的运算能力是相当的,前者需要4个指令发射端和4个控制单元,而后者只需要1个,如此一来MIMD架构所占用的晶体管数就远大于了SIMD架构,这正是采用MIMD架构的G80核心的软肋。
●A卡第一代GPU统一架构核心之R6002007年5月,AMD收购ATI之后推出的第一款DirectX 10 GPU——R600正式发布了。
R600由一套几何处理单元,独立的线程仲裁器UTDP,与仲裁机构相连的SPU(流处理器)和TMU(纹理贴图)单元,以及完整的后端所组成。
整个构架以ringbus(环状)总线进行连接。
R600的超标量流处理器架构相比大胆革新的G80核心架构,从Stream Processing Units这一处可以观察出:R600身上有些许传统GPU的影子,因为SPU依然采用的是SIMD(单指令多数据流)架构。
R600拥有4个SIMD阵列,每个SIMD阵列包括了16个Stream Processing Units,这样总共就是64个,但不能简单地认为它拥有64个流处理器,因为R600的每个Units内部包含了5个ALU,从微观上来看即:5D Superscalar超标量架构。