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统一架构核心之G80
2006年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统一架构核心之R600
2007年5月,AMD收购ATI之后推出的第一款DirectX 10 GPU——R600正式发布了。R600由一套几何处理单元,独立的线程仲裁器UTDP,与仲裁机构相连的SPU(流处理器)和TMU(纹理贴图)单元,以及完整的后端所组成。整个构架以ringbus(环状)总线进行连接。
相比大胆革新的G80核心架构,从Stream Processing Units这一处可以观察出:R600身上有些许传统GPU的影子,因为SPU依然采用的是SIMD(单指令多数据流)架构。R600拥有4个SIMD阵列,每个SIMD阵列包括了16个Stream Processing Units,这样总共就是64个,但不能简单地认为它拥有64个流处理器,因为R600的每个Units内部包含了5个ALU,从微观上来看即:5D Superscalar超标量架构。
通过上图就可以清楚的看到,SIMD(单指令多数据流)的超标量架构可以执行任意组合形式的混合指令,在一个Stream Processing Units内部的5个ALU可以在单个时钟周期内进行5次MAD(Multiply-Add,乘加)运算,其中全功能的ALU除了MAD之外还能执行一些函数(SIN、COS、LOG、EXP等)运算,在特殊条件下提高了运算效率。
对比总结:英伟达的所采用的MIMD(多指令流多数据流)标量架构的G80核心需要占用不少额外的晶体管,所以在流处理器数量和理论运算能力方面稍显吃亏,但优点是GPU Shader执行效率很高;而AMD所采用的SIMD(单指令多数据流)超标量架构的R600核心则用较少的晶体管数实现了更多的流处理器数量和更高的理论运算能力,不过在执行效率方面则需要视情况而定了。