2024年10月11日发(作者:谷梁飞光)
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统一架构核心之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(环状)总线进行
连接。
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超标量架构。
5D Superscalar超标量架构
AMD历代着色器演进
通过上图就可以清楚的看到,SIMD(单指令多数据流)的超标量架构可以执行任意组合形
式的混合指令,在一个Stream Processing Units内部的5个ALU可以在单个时钟周期内进行
5次MAD(Multiply-Add,乘加)运算,其中全功能的ALU除了MAD之外还能执行一些
函数(SIN、COS、LOG、EXP等)运算,在特殊条件下提高了运算效率。
对比总结:英伟达的所采用的MIMD(多指令流多数据流)标量架构的G80核心需要占
用不少额外的晶体管,所以在流处理器数量和理论运算能力方面稍显吃亏,但优点是GPU
Shader执行效率很高;而AMD所采用的SIMD(单指令多数据流)超标量架构的R600核心则
用较少的晶体管数实现了更多的流处理器数量和更高的理论运算能力,不过在执行效率方面
则需要视情况而定了
N卡第二、三次GPU统一架构设计革新
GPU架构的革新其实和CPU架构的革新很相似,比如说Tick-Tock(工艺年-构架年)模
式。Tick-Tock(工艺年-构架年)是英特尔所提出的芯片技术发展战略模式,Tick-Tock:奇
数年更新制作工艺,偶数年更新微架构。其实在GPU的研发过程中也同样是借鉴到了这种
Tick-Tock模式。
Tick工艺年里,G92和RV670在核心架构上并无太大改动,而主要体现在工艺制程的革
新。
G92和RV670:核心架构没有任何变化
●N卡第二次GPU统一架构设计革新
而真正的核心架构革新当属GT200架构核心的推出,即NVIDIA第2代统一架构核心。
GT200构架图
GT200在结构上与G80具有一定的传承性。他们的前端构造是基本相同的,整体来讲两
者之间大部分的区别来自于规模上的差异。GTX200核心微架构给我们主要带来如下改进:
一、 每个SM可执行线程上限提升:G80/G92核心每个SM(即不可拆分的8核心流处
理器)单元最多可执行768条线程,而GTX200核心的每个SM可执行高达1024条线程,
同时GTX200还拥有更多的SM单元,故而芯片性能实力是之前的2.5倍。
二、 每个SM单元的指令寄存器翻倍:GTX200与G80核心在SM单元结构上基本相同
的,但功能有所提升,在执行线程数增多的同时,NVIDIA还将每个SM单元中间的Local
Memory容量翻倍(从16K到32K)。Local Memory用于存储SM即将执行的上千条指令,
容量增大意味着可以存储更多的指令、超长的指令、或是各种复杂的混合式指令,这对于提
高SM的执行效能大有好处。
三、增加了atomic单元以及SIMT特性:atomic单元的添加使得GT200具备了原子操作
的能力,atomic单元和原子操作的引入也为未来NVIDIA构架最终实现并行化设计起到了关
键的先导作用;SIMT特性的引入则可以使得程序员在进行指令搭建的过程中无需考虑GPU
究竟是SIMD还是MIMD,从而将性能优化的方向专注于shader的拆分,合并,灵活搭配
以及Thread管理方面。
GT200与G80的异同
●N卡第三次GPU统一架构设计革新
NVIDIA的GF100架构核心可谓是一款“千呼万唤始出来”的GPU,可能是因为40nm制
程良品率不足或者是NVIDIA希望力求打造一颗在DX11和GPU通用计算方面都相当完美
的核心,所以这款GPU真的让玩家等的太就了。
GF100架构设计
整体上看GF100核心架构,大致由四块组成,而这四大块就是GPC(
Graphics Processing
Cluster,图形处理器
簇),每个GPC单元都包含独立的几何引擎以及光栅化流水线,GPC
模块之间透过新加入的L2 cache进行通讯、kernel和Thread的协调以及数据共享。这无
疑使得GF100的三角形吞吐量有了将近300%的提升,也实现了并行的分块化的渲染动作,
更使得DirectX 11所要求的TS单元直接融入到了整个光栅化流水线内部。
Polymorph Engines和Raster Engines在GF100中的设计
同时,我们在GF100核心架构图和SM架构图上可以看到,相比G80/92和GT200
核心架构多了Polymorph Engines和Raster Engines功能模块。那么这两个模块有什么作
用了?
多形体引擎(PolyMorph Engine)
多形体引擎则要负责顶点拾取(Vertex Fetch)、细分曲面(Tessellation)、视口转
换(Viewport Transform)、属性设定(Attribute Setup)、流输出(Stream Output)等五
个方面的处理工作,DX11中最大的变化之一细分曲面单元(Tessellator)就在这里。Fermi
GF100产品中有16个多形体引擎,每个SM一个,或者说每个GPC拥有四个。
光栅引擎(Raster Engine)
光栅引擎严格来说光栅引擎并非全新硬件,只是此前所有光栅化处理硬件单元的组合,
以流水线的方式执行边缘/三角形设定(Edge/Triangle Setup)、光栅化(Rasterization)、Z轴压缩
(Z-Culling)等操作,每个时钟循环周期处理8个像素。GF100有四个光栅引擎,每组GPC
分配一个,整个核心每周期可处理32个像素。
总而言之:GF100核心架构是自GPU进入DX10之后的最重大的一次架构革新,其在图
形架构和并行计算架构方面都有着革命性的突破。我们在GF100身上看得到了高效、高针
对性、贴近需求的GPU架构设计理念。
A卡第二、三次GPU统一架构设计革新
进过了R600架构设计的阵痛期,AMD似乎要在第二次GPU架构革新战争中扬眉吐气。
而事实也证明了:这款相比于GT200更小巧的芯片,却永远着更大的魔力。
●A卡第三次GPU统一架构设计革新
AMD在RV770这款GPU核心架构上的革新可谓“大刀阔斧”,几乎对所有的模块都进行
了改进,而从市场端所反应的销量来看:这确实是一次很不错的架构革新。
RV770 GPU系统架构图
通过上面的架构图我们首先来看看流处理器部分:RV670/R600是纵向4组SIMD阵列,
每组16个Shader,每个Shader 5个流处理器;RV770是横向10组SIMD阵列,每组16个
Shader,每个Shader 5个流处理器,也就是说流处理器部分只是单纯的规模扩充;其次、纹
理单元和光栅单元部分数量翻了2.5倍,且抗锯齿算法已经由R600/RV670的流处理器部分
转移至光栅单元部分,因此RV770的AA效率大幅提高;最后、RV770放弃了使用多年沿
用的环形总线,回归了交叉总线结构设计,有效提高了显存利用率,并节约了显存带宽。总
之:RV770的整体架构的全面革新使得其相比RV670有了前所未有的改变。
●A卡第三次GPU统一架构设计革新
虽然说AMD抢在竞争对手NVIDIA之前发布了DX11显卡,但是相比较晚发布的GF100
核心架构而言,RV870架构在改进方面显得有些微不足道。
RV870(又称Cypress)架构设计
对比RV870和RV770核心架构我们发现,RV870并非RV770一样将1600个流处理器
设计在同一区域,而是将1600个流处理器分为2组各800个流处理器。所以我们可以这样
认为:除了显存位宽维持256bit不变之外,Cypress的其它所有规格都正好是RV770的两倍,
而且在流处理器部分可以看作是双核心的设计,几乎就是并排放置了两颗RV770核心。
RV870的相关特性
在RV870核心架构设计中,AMD仅为其配备了合乎DirectX 11要求的寄存器资源,改
进了UTDP对多线程的支持,在前端的几何单元中插入了一组TS单元,同时将运算单元中
的GDS提升到了64K。除此之外,我们仅能见到进一步放大的VLIW core规模和其他配套
的纹理资源及后端资源。各资源的整体比例较之RV770并未发生本质性的改变,VLIW(Very
Long Instruction Word,超长指令字) core的操作管理方式及周边资源密度也未见任何实质性
的变化,甚至其UTDP单元也依旧维持着抢占式多线程的管理方式。
总之:除了增加了对DX11的支持,RV870(Cypress)相比RV770的改进而言可谓十分有
限。也许AMD将HD5000系列显卡的宣传重心转移到了40nm工艺制程、新一代GDDR5
显存和Eyefinity多屏显示器技术上面去了。
回顾总结:GPU架构设计思想是关键
OK,进过了前面的详细阐述,至少您已经对GPU架构已经有了一个相对全面的了解,
最后我们就为大家总结下GPU架构革新的相关启示:
DX9到DX10是一大转折点:结束管线时代,开启GPU统一渲染架构时代
在DX9时代,大家都是通过“(像素)管线”来衡量显卡的性能等级,而到了DX10时代,
统一渲染架构的引入使得显卡不再区分“像素”和“顶点”,因此“管线”这种说法逐渐淡出了大
家的视野,取而代之的是全新统一渲染架构的“流处理器”,“流处理器”的数量直接影响着显
卡的性能。
统一渲染架构
R80与R600的经典之战:牢记历史,我们会更深入的认识A/N之间的GPU大战
从DX10到DX10.1再到DX11,转眼间显卡已经发展到了第四代,但实际上不管AMD
还是NVIDIA,它们的新一代显卡都是在最早的DX10显卡架构基础上不断修改、优化、改
进或扩充而来的。换句话说,即便是到了现如今的DX11时代,NVIDIA与ATI的性能大战
依然是G80与R600架构的延续罢了。
GPU统一渲染架构革新首次交锋
看今朝GF100 PK RV970(Cayman):并行度是双方架构决定性的差异
并行度是双方架构决定性的差异
GF100采用了将几何引擎完全融入到流水线中同时将流水线并行化的GPC结构设计,
而RV970则采用了在RV870基础上继续维持几何引擎的独立,但几何引擎内部拆分成对
等的两部分并实现并行化的结构设计。由此可见,AMD在GPU并行架构设计也开始在需
求合理改进的途径,但从几何过程与流水线结合的紧密程度上去分析,NVIDIA的并行化结
构设计似乎更加给力一些。
通过以上的基本了解和大致分析,希望玩家朋友对GPU架构图有一个相对清晰的认
识,能够在对其他GPU架构图的解析上起到触类旁通的效用,并循序渐进的实现个人升级
为GPU达人的最终梦想。
2024年10月11日发(作者:谷梁飞光)
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统一架构核心之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(环状)总线进行
连接。
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超标量架构。
5D Superscalar超标量架构
AMD历代着色器演进
通过上图就可以清楚的看到,SIMD(单指令多数据流)的超标量架构可以执行任意组合形
式的混合指令,在一个Stream Processing Units内部的5个ALU可以在单个时钟周期内进行
5次MAD(Multiply-Add,乘加)运算,其中全功能的ALU除了MAD之外还能执行一些
函数(SIN、COS、LOG、EXP等)运算,在特殊条件下提高了运算效率。
对比总结:英伟达的所采用的MIMD(多指令流多数据流)标量架构的G80核心需要占
用不少额外的晶体管,所以在流处理器数量和理论运算能力方面稍显吃亏,但优点是GPU
Shader执行效率很高;而AMD所采用的SIMD(单指令多数据流)超标量架构的R600核心则
用较少的晶体管数实现了更多的流处理器数量和更高的理论运算能力,不过在执行效率方面
则需要视情况而定了
N卡第二、三次GPU统一架构设计革新
GPU架构的革新其实和CPU架构的革新很相似,比如说Tick-Tock(工艺年-构架年)模
式。Tick-Tock(工艺年-构架年)是英特尔所提出的芯片技术发展战略模式,Tick-Tock:奇
数年更新制作工艺,偶数年更新微架构。其实在GPU的研发过程中也同样是借鉴到了这种
Tick-Tock模式。
Tick工艺年里,G92和RV670在核心架构上并无太大改动,而主要体现在工艺制程的革
新。
G92和RV670:核心架构没有任何变化
●N卡第二次GPU统一架构设计革新
而真正的核心架构革新当属GT200架构核心的推出,即NVIDIA第2代统一架构核心。
GT200构架图
GT200在结构上与G80具有一定的传承性。他们的前端构造是基本相同的,整体来讲两
者之间大部分的区别来自于规模上的差异。GTX200核心微架构给我们主要带来如下改进:
一、 每个SM可执行线程上限提升:G80/G92核心每个SM(即不可拆分的8核心流处
理器)单元最多可执行768条线程,而GTX200核心的每个SM可执行高达1024条线程,
同时GTX200还拥有更多的SM单元,故而芯片性能实力是之前的2.5倍。
二、 每个SM单元的指令寄存器翻倍:GTX200与G80核心在SM单元结构上基本相同
的,但功能有所提升,在执行线程数增多的同时,NVIDIA还将每个SM单元中间的Local
Memory容量翻倍(从16K到32K)。Local Memory用于存储SM即将执行的上千条指令,
容量增大意味着可以存储更多的指令、超长的指令、或是各种复杂的混合式指令,这对于提
高SM的执行效能大有好处。
三、增加了atomic单元以及SIMT特性:atomic单元的添加使得GT200具备了原子操作
的能力,atomic单元和原子操作的引入也为未来NVIDIA构架最终实现并行化设计起到了关
键的先导作用;SIMT特性的引入则可以使得程序员在进行指令搭建的过程中无需考虑GPU
究竟是SIMD还是MIMD,从而将性能优化的方向专注于shader的拆分,合并,灵活搭配
以及Thread管理方面。
GT200与G80的异同
●N卡第三次GPU统一架构设计革新
NVIDIA的GF100架构核心可谓是一款“千呼万唤始出来”的GPU,可能是因为40nm制
程良品率不足或者是NVIDIA希望力求打造一颗在DX11和GPU通用计算方面都相当完美
的核心,所以这款GPU真的让玩家等的太就了。
GF100架构设计
整体上看GF100核心架构,大致由四块组成,而这四大块就是GPC(
Graphics Processing
Cluster,图形处理器
簇),每个GPC单元都包含独立的几何引擎以及光栅化流水线,GPC
模块之间透过新加入的L2 cache进行通讯、kernel和Thread的协调以及数据共享。这无
疑使得GF100的三角形吞吐量有了将近300%的提升,也实现了并行的分块化的渲染动作,
更使得DirectX 11所要求的TS单元直接融入到了整个光栅化流水线内部。
Polymorph Engines和Raster Engines在GF100中的设计
同时,我们在GF100核心架构图和SM架构图上可以看到,相比G80/92和GT200
核心架构多了Polymorph Engines和Raster Engines功能模块。那么这两个模块有什么作
用了?
多形体引擎(PolyMorph Engine)
多形体引擎则要负责顶点拾取(Vertex Fetch)、细分曲面(Tessellation)、视口转
换(Viewport Transform)、属性设定(Attribute Setup)、流输出(Stream Output)等五
个方面的处理工作,DX11中最大的变化之一细分曲面单元(Tessellator)就在这里。Fermi
GF100产品中有16个多形体引擎,每个SM一个,或者说每个GPC拥有四个。
光栅引擎(Raster Engine)
光栅引擎严格来说光栅引擎并非全新硬件,只是此前所有光栅化处理硬件单元的组合,
以流水线的方式执行边缘/三角形设定(Edge/Triangle Setup)、光栅化(Rasterization)、Z轴压缩
(Z-Culling)等操作,每个时钟循环周期处理8个像素。GF100有四个光栅引擎,每组GPC
分配一个,整个核心每周期可处理32个像素。
总而言之:GF100核心架构是自GPU进入DX10之后的最重大的一次架构革新,其在图
形架构和并行计算架构方面都有着革命性的突破。我们在GF100身上看得到了高效、高针
对性、贴近需求的GPU架构设计理念。
A卡第二、三次GPU统一架构设计革新
进过了R600架构设计的阵痛期,AMD似乎要在第二次GPU架构革新战争中扬眉吐气。
而事实也证明了:这款相比于GT200更小巧的芯片,却永远着更大的魔力。
●A卡第三次GPU统一架构设计革新
AMD在RV770这款GPU核心架构上的革新可谓“大刀阔斧”,几乎对所有的模块都进行
了改进,而从市场端所反应的销量来看:这确实是一次很不错的架构革新。
RV770 GPU系统架构图
通过上面的架构图我们首先来看看流处理器部分:RV670/R600是纵向4组SIMD阵列,
每组16个Shader,每个Shader 5个流处理器;RV770是横向10组SIMD阵列,每组16个
Shader,每个Shader 5个流处理器,也就是说流处理器部分只是单纯的规模扩充;其次、纹
理单元和光栅单元部分数量翻了2.5倍,且抗锯齿算法已经由R600/RV670的流处理器部分
转移至光栅单元部分,因此RV770的AA效率大幅提高;最后、RV770放弃了使用多年沿
用的环形总线,回归了交叉总线结构设计,有效提高了显存利用率,并节约了显存带宽。总
之:RV770的整体架构的全面革新使得其相比RV670有了前所未有的改变。
●A卡第三次GPU统一架构设计革新
虽然说AMD抢在竞争对手NVIDIA之前发布了DX11显卡,但是相比较晚发布的GF100
核心架构而言,RV870架构在改进方面显得有些微不足道。
RV870(又称Cypress)架构设计
对比RV870和RV770核心架构我们发现,RV870并非RV770一样将1600个流处理器
设计在同一区域,而是将1600个流处理器分为2组各800个流处理器。所以我们可以这样
认为:除了显存位宽维持256bit不变之外,Cypress的其它所有规格都正好是RV770的两倍,
而且在流处理器部分可以看作是双核心的设计,几乎就是并排放置了两颗RV770核心。
RV870的相关特性
在RV870核心架构设计中,AMD仅为其配备了合乎DirectX 11要求的寄存器资源,改
进了UTDP对多线程的支持,在前端的几何单元中插入了一组TS单元,同时将运算单元中
的GDS提升到了64K。除此之外,我们仅能见到进一步放大的VLIW core规模和其他配套
的纹理资源及后端资源。各资源的整体比例较之RV770并未发生本质性的改变,VLIW(Very
Long Instruction Word,超长指令字) core的操作管理方式及周边资源密度也未见任何实质性
的变化,甚至其UTDP单元也依旧维持着抢占式多线程的管理方式。
总之:除了增加了对DX11的支持,RV870(Cypress)相比RV770的改进而言可谓十分有
限。也许AMD将HD5000系列显卡的宣传重心转移到了40nm工艺制程、新一代GDDR5
显存和Eyefinity多屏显示器技术上面去了。
回顾总结:GPU架构设计思想是关键
OK,进过了前面的详细阐述,至少您已经对GPU架构已经有了一个相对全面的了解,
最后我们就为大家总结下GPU架构革新的相关启示:
DX9到DX10是一大转折点:结束管线时代,开启GPU统一渲染架构时代
在DX9时代,大家都是通过“(像素)管线”来衡量显卡的性能等级,而到了DX10时代,
统一渲染架构的引入使得显卡不再区分“像素”和“顶点”,因此“管线”这种说法逐渐淡出了大
家的视野,取而代之的是全新统一渲染架构的“流处理器”,“流处理器”的数量直接影响着显
卡的性能。
统一渲染架构
R80与R600的经典之战:牢记历史,我们会更深入的认识A/N之间的GPU大战
从DX10到DX10.1再到DX11,转眼间显卡已经发展到了第四代,但实际上不管AMD
还是NVIDIA,它们的新一代显卡都是在最早的DX10显卡架构基础上不断修改、优化、改
进或扩充而来的。换句话说,即便是到了现如今的DX11时代,NVIDIA与ATI的性能大战
依然是G80与R600架构的延续罢了。
GPU统一渲染架构革新首次交锋
看今朝GF100 PK RV970(Cayman):并行度是双方架构决定性的差异
并行度是双方架构决定性的差异
GF100采用了将几何引擎完全融入到流水线中同时将流水线并行化的GPC结构设计,
而RV970则采用了在RV870基础上继续维持几何引擎的独立,但几何引擎内部拆分成对
等的两部分并实现并行化的结构设计。由此可见,AMD在GPU并行架构设计也开始在需
求合理改进的途径,但从几何过程与流水线结合的紧密程度上去分析,NVIDIA的并行化结
构设计似乎更加给力一些。
通过以上的基本了解和大致分析,希望玩家朋友对GPU架构图有一个相对清晰的认
识,能够在对其他GPU架构图的解析上起到触类旁通的效用,并循序渐进的实现个人升级
为GPU达人的最终梦想。