|
山雨欲来风满楼:R600统一渲染架构初探
山雨欲来风满楼:R600统一渲染架构初探
Unified Shader Model引入ALU(算术逻辑引擎)的概念
R600即将在下个月中旬发布,一些图形芯片爱好者对R600的核心架构的优劣也展开了讨论,本文略过结果不表,笔者在这里抛砖引玉,介绍一点有关R600核心架构的东西。
当然,提到DirectX 10显卡的架构设计自然离不开微软Vista API的要求。此前一些关于Windows Vista的图形API名称有很多说法,例如DirectX Next和Windows Graphics Foundation 2.0,这个曾经被微软称为WGF2.0的图形API在概念上,比DirectX 9有了翻天覆地的变化,现在已经正式命名为我们大家熟知的DirectX 10 API。
对于GPU来说,Unified Shader Model将用ALU(算术逻辑引擎)的概念来替代我们熟悉的像素渲染和顶点渲染流水线的概念。ALU可以执行对顶点操作的指令,又能够执行对象素操作的指令。如果说,更强大灵活的可编程能力,高速度和高精度的3D运算是DirectX9时代的终极追求,那么在Unified Shader Model已经将GPU超标量体系的概念运用到一个更新的层次。Direct 10时代的GPU内部那么多ALU甚至能够根据需要随意切换调用,从而极大的提升游戏的表现。
SIMD单指令多数据操作:矢量与标量运算
什么是SIMD单指令多数据操作?
但是,相对于API简单的定义来说,要将GPU的象素处理和顶点处理抽离出原有体系,并且整合为一个执行单元的难度是非常大的。因为2个处理单元分别位于GPU处理流程的不同位置。与此同时使用了Unified Shader Model之后,GPU内部必须保证数量众多的算术逻辑单元才能使得GPU执行效率不至于太低。这样势必就会导致GPU内部集成更多的晶体管,导致成本和发热持续上升。
我们再来看一下底层单元的工作对象,比如在像素处理的时候,我们是使用的R、G、B三个数值来对颜色进行描述,除此之外还有对透明度描述的Alpha值,这就构成了完整的RGBA四通道。对于顶点而言,同样有对应的XYZW四个代表坐标的通道。
对一个像素进行整体操作的时候,单指令多数据(Single Instruction Multiple Data,SIMD)就成为一种重要的操作方法。一个vector(矢量)就是n个scalar(标量),对于图形处理来说一般来说n=4。所以,通常GPU的ALU指令发射端只有一个,但却可以同时计算4个通道的数据。
在同一个时钟周期内,GPU的ALU里进行的一次这种变量操作,被称做1D scalar操作。由于大多数GPU的ALU被设计成在一个时钟周期能执行4次这样的并行的1D运算的能力,所以它们的ALU执行能力被称做4D vector,也就是矢量操作。在显卡内不管是进行像素渲染还是顶点变换,4D矢量运算都比较普遍,连CPU领域我们也看得到基于SIMD的SSE系列指令集。
但是4D矢量运算也有比较头痛的缺点,那就是指令发射能力与ALU的负载能力并不能达到完美的结合。操作中4D运算的份量比较重,但这并不意味着不存在1D、2D、3D的运算,一个4D的矢量运算单元被用来跑这类轻量级指令,运算能力的闲置就让人痛心了。特别是Unified Shader架构,前面已经提到过Vertex Shader和Pixel Shader在运算压力上的不平衡,让闲置状况更为突出。即使有Co-issue技术助阵,整体实际利用率还是只能在70%上下徘徊。
R600与G80在底层架构上的分歧
为了避免这种问题,在底层单元的设计上,G80系列选择了基于1D标量运算的Scalar ALU来替代传统的Vector ALU。 G80具备128个1D scalar流处理器,也就是ALU,每个ALU都能在一个时钟周期内吞吐1调标准的mad指令(2Flops),如果按照人们通常习惯上的4D(3D+1D) vector ALU被称为一个管线(Pipeline)来说,具备相当于大概32条普通管线的理论浮点算术运算能力(Flops); 虽然1D的标量单元,在利用率上不会出现矢量单元的闲置,但要达到4D SIMD运算单元的运算能力,运算单元的数量和频率都需要提升。也就是说,如果是同频的Shader单元,4个1D和1个4D才能基本形成均势。
在2005年的时候,ATi表示,R600将比Xbox 360的Xeno处理器快得多,Pixel Shader数量有可能达到64以上。ATi希望能够在Unified Shader模型上获得更多改进,一方面为了提高芯片运行效率,另一方面则不愿在Unified Shader技术上输于nVIDIA,后者已多次宣称在该技术上支持良好。熊
下面是2006年当时网上流传的一份R600规格表:
生产工艺:65nm
渲染管线:64条 (Vec4+Scalar)
纹理映射单元:32个
光栅操作处理器:32个
执行效率:每时钟周期128次渲染操作
核心频率:800MHz
浮点处理能力:512GFLOP/s
三角形生成率:20亿/s
像素填充率:25.6GB/s
显存:256-bit 512MB 1.8GHz GDDR4
显存带宽:57.6GB/s
架构:WGF2.0(Windows Graphics Foundation 2.0)统一架构
目前这份规格表可以看到,一再跳票延期的R600,依然采用的是较为传统的矢量运算单元(Vector ALU),具备64个4D SIMD单元+1D的SISD单元,也即64个Vect5D着色单元,总共可以产生320个标量单元。相比NVIDIA的G80有128个标量单元,但是工作频率在1.35GHz,比R600的740MHz标量单元速度更快,但是R600管线的复杂度可以弥补工作频率的不足。如果R600运行在750MHz,那么它的理论吞吐能力为750MHz×64个×[(1+2)×4]Flops=576GFlops/s,而目前G80的MIME架构频率为1350MHz,那么它的理论吞吐能力就为1350MHz×128个×(2x1)×1]Flops=518.4GFlops/s。
当然,在R600正式面世之前,所有有关R600的预测和分析都存在着不确定的因素。只有等R600正式发布并公开更多技术细节以后,我们看到了其在基于DirectX10测试中的表现,才能做出最终的评判 |
|