当前位置:文档之家 > gpu的结构解析

gpu的结构解析

GTX680架构解析GPU版开普勒三大定律

2012年03月22日 21:01 出处:泡泡网【原创】作者:孙敏杰编辑:孙敏杰

GPU图形架构:改革还是革命?

泡泡网显卡频道3月22日“什么?GTX680的流处理器数量是1536个?而且GTX680的流处理器与核心同频率,不再是两倍了?这规格简直和HD6970一模一样!AMD的

HD7970刚开始学习NVIDIA的架构,现在NVIDIA的GTX680又学AMD了,你们这是要闹哪样啊?”

gpu的结构解析

相信很多人听到GTX680的规格时,都会产生这样一种想法。在GTX680发布之前,各种小道消息不胫而走之时,笔者也很纳闷,NVIDIA的Kepler架构到底发生了什么样的变化?难不成N/A双方真的要互相学习、取长补短?

gpu的结构解析

在新一代GTX680发布前夕,NVIDIA召开了多场技术讲座,NVIDIA总部的专家为全球各大媒体编辑详细解读了新一代Kepler(开普勒)架构的技术特性,笔者经过深入学习研究之后,今天就为大家揭开谜底——新一代GPU图形架构到底谁更先进?

NVIDIA和AMD的GPU架构相关名词解读:

1. NVIDIA喜欢用物理学家的名字来为GPU架构命名,从DX10开始第一代叫做Tesla (特斯拉)、第二代是Fermi(费米)、第三代是Kepler(开普勒)、第四代是Maxwell (麦克斯韦),这些科学家的大名是如雷贯耳,就不做解释了。

2. Kepler(开普勒)是NVIDIA新一代的GPU架构代号,基于开普勒架构第一颗GPU 的代号是GK104,基于GK104核心的首款显卡是GeForce GTX 680。

3. AMD以前GPU代号和NVIDIA一样也是字母+数字,但从DX11时代开始GPU的代号用单词来命名,比如HD5000系列的架构代号是EverGreen(常青树),高端HD5870核心代号Cypress(柏树)、中端HD5770核心代号Juniper(杜松);

HD6000的架构代号是North Island(北方群岛),高端HD6970核心代号Cayman (开曼群岛),中端HD6870核心代号Barts(圣巴特,加勒比海某小岛);

HD7000的架构代号是Sourth Island(南方群岛),高端HD7970核心代号Tahiti(大溪地),中端HD7870核心代号Pitcairn(南太平洋某英属群岛),主流HD7770核心代号Cape Verde(佛得角,非洲最南边岛国)。

GPU图形架构的阴阳之争

今年一月份,在AMD发布HD7970时,我们曾详细的分析过AMD代号为南方群岛的“Graphics Core Next”架构。这是AMD收购ATI之后的近5年来第一次对GPU架构进行“伤筋动骨”的“手术”,而架构调整的核心内容则是为并行计算优化设计,我们发现AMD的GCN架构与NVIDIA的GPU有很多相似之处。

gpu的结构解析

当时笔者曾感慨:“在流处理器部分,终于不用费劲的把AMD和NVIDIA GPU架构分开介绍了,因为GCN与SM已经没有本质区别了。剩下的只是缓存容量、流处理器簇的数量、线程调度机制的问题,双方根据实际应用自然会有不同的判断,自家的前后两代产品也会对这些数量和排列组合进行微调。AMD向NVIDIA的架构靠拢,证明了他这么多年来确实是在错误的道路上越走越远,还好浪子回头金不换,这次GCN架构简直就是大跃进!”

促使AMD做出革命性改进的一大原因,就是从R600开始SIMD(单指令多数据流)VILW(超长指令集)的效率问题,AMD的GPU固然拥有恐怖的浮点运算能力,但很多时候都不能完全发挥出来,由此导致游戏性能和计算性能都要大打折扣。此后的四代产品虽然在R600的基础上修修补补,但始终未能从根本上解决问题。

gpu的结构解析

AMD承认,从VLIW到GCN是GPU的革命,这次革命NVIDIA几年前就完成了

NVIDIA的GPU从G80时代开始,其MIMD(多指令多数据流)一直以高效能而著称,但也存在一个让人头疼的问题——GPU流处理器数量较少、浮点运算能力太低,这同样限制了N卡在游戏以及计算方面的实际性能。

AMD的SIMD架构可以用较少的晶体管造出庞大数量的流处理器、拥有恐怖的理论浮点运算能力;而NVIDIA的MIMD架构必须使用更多的晶体管制造出看似比较少的流处理器,理论浮点运算能力相差很远。双方走的都是极端路线,AMD以数量弥补效率的不足,而NVIDIA以效率弥补数量的劣势。

6年前从G80和R600开始,NVIDIA和AMD在GPU架构上分道扬镳,这么多年经历了风风雨雨之后,发现极左或极右路线都有各自的局限性,修正主义治标不治本,唯有走中间路线才是正道!不过中间路线也有不同的走法,有些人还是偏左、有些人还是偏右……AMD的方向:SIMD的另一种形式

从GPU外围模块来看,AMD的Tahiti和上代Cayman相比变化不大,只是强化了曲面细分单元,加入了双异步计算引擎而已。

gpu的结构解析

HD6970代号为Cayman的GPU核心架构图

gpu的结构解析

HD7970代号为Tahiti的GPU核心架构图

最大的改变来自于流处理器部分,原有的SIMD引擎不见了,取而代之的是GCN阵列,那SIMD引擎与GCN阵列有什么本质区别呢?

gpu的结构解析

Cayman拥有20个SIMD引擎,每个SIMD引擎内部包括16个这样的4D矢量运算单元

gpu的结构解析

Tahiti拥有32个GCN阵列,每个GCN阵列里面包括4个SIMD-16单元Tahiti的每个GCN阵列里面包括4个SIMD单元,每个SIMD单元内部包括16个1D 标量运算单元。这样的话Cayman的SIMD引擎是16x4=64个流处理器,而Tahiti的GCN 阵列是4x16=64个流处理器,总数量虽然没有变化,但架构上是截然相反的设计——Tahiti 相对于Cayman来说革命性的改变就是把4D矢量运算单元改成了1D标量运算单元!

但是,GCN架构与NVIDIA的CUDA架构还是有明显的区别,那就是GCN里面包括了4个SIMD-16单元,标量流处理器被硬性拆分为4个小组,而NVIDIA的SM则没有这种设计,所有流处理器都一视同仁。

NVIDIA的道路:从MIMD到SIMT

尽管AMD的架构在向NVIDIA靠拢,但双方还是有明显区别,而且NVIDIA也在不断的改变。至于NVIDIA和AMD历代产品架构上的变化,之前多篇文章中都已经交代过了,这里就不再重复,我们通过这个简单的数字变化,来了解一下:

gpu的结构解析

先看看AMD方面,从R600一直到Cypress,可以说一直在堆SIMD,动辄翻倍,架构没有任何变化;从Cypress到Cayman变化也不大,只是把矢量单元从5D改为4D;从Cayman到Tahiti可以说是质变,SIMD被GCN取代,4D矢量运算单元改为1D标量运算单元。

而NVIDIA方面,则是不停的对GPU的G PC、SM、CUDA核心等配比进行微调,在微调的过程中经历了两次突变:第一次是GT200到GF100,首次引出了G PC(图形处理器集群)的概念,GPC数量减少但SM数以及流处理器数量增加不少;第二次就是现在了,从GF100到GK104,SM数量减少,但流处理器数量暴增!

改变是为了适应形式的变化,解决此前出现的一些问题,那NVIDIA的架构有什么问题呢?此前我们多次提到过,虽然NVIDIA的GPU在效能方面占尽优势,但也不是完美无缺的——NVIDIA最大的劣势就是流处理器数量较少,导致理论浮点运算能力较低。当然这只是表面现象,其背后的本质则是MIMD(多指令多数据流)的架构,相当一部分比例的晶体管消耗在了指令发射端和控制逻辑单元上面,所以流处理器数量始终低于对手。

gpu的结构解析

GF110和GK104芯片对比图

为了保证GPU性能持续增长,NVIDIA必须耗费更多的晶体管、制造出更大的GPU 核心,而这些都需要先进的、成熟的半导体制造工艺的支持。NVIDIA之所以在GF100(GTX480)时代落败,并非架构或者研发端出了什么问题(GF110/GTX580的成功可以证明),而是核心太大导致40nm工艺无法支撑,良率低下漏电流难以控制,最终导致核心不完整且功耗巨大。如此一来,NVIDIA原有的架构严重受制于制造工艺,并非可持续发展之路。

为此,NVIDIA将芯片架构逐步转向了SIMT的模式,即Single Instruction Multiple Threads(单指令多线程),SIMT有别与AMD的SIMD,SIMT的好处就是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支。纯粹使用SIMD 不能并行的执行有条件跳转的函数,很显然条件跳转会根据输入数据不同在不同的线程中有不同表现,这个只有利用SIMT才能做到。

SIMT在硬件部分的结构还是要比SIMD复杂一些,NVIDIA还是更注重效率一些,所以NVIDIA的流处理器数量还是要比AMD少,但差距已经没以前那么夸张了。

开普勒之架构:流处理器暴增之谜

基于效能和计算能力方面的考虑,NVIDIA与AMD不约而同的改变了架构,NVIDIA 虽然还是采用SIMT架构,但也借鉴了AMD“较老”的SIMD架构之作法,降低控制逻辑单元和指令发射器的比例,用较少的逻辑单元去控制更多的CUDA核心。于是一组SM当中容纳了192个核心的壮举就变成了现实!

gpu的结构解析

通过上面这个示意图就看的很清楚了,CUDA核心的缩小主要归功于28nm工艺的使用,而如此之多的CUDA核心,与之搭配的控制逻辑单元面积反而缩小了,NVIDIA强化运算单元削减控制单元的意图就很明显了。

gpu的结构解析

Fermi的硬件相关性检查变为Kepler的软件预解码

此时相信有人会问,降低控制单元的比例那是不是意味着NVIDIA赖以成名的高效率

架构将会一去不复返了?理论上来说效率肯定会有损失,但实际上并没有想象中的那么严重。NVIDIA发现线程的调度有一定的规律性,编译器所发出的条件指令可以被预测到,此前这部分工作是由专门的硬件单元来完成的,而现在可以用简单的程序来取代,这样就能节约不少的晶体管。

随意在开普勒中NVIDIA将一大部分指令派发和控制的操作交给了软件(驱动)来处理。而且GPU的架构并没有本质上的改变,只是结构和规模以及控制方式发生了变化,只要驱动支持到位,与游戏开发商保持紧密的合作,效率损失必然会降到最低——事实上NVIDIA著名的The Way策略就是干这一行的!

gpu的结构解析

The Way(游戏之道)计划可以保证NVIDA的GPU架构与游戏完美兼容这方面NVIDIA与AMD的思路和目的是相同的,但最终体现在架构上还是有所区别。NVIDIA的架构被称为SIMT(Single Instruction Multiple Threads,单指令多线程),NVIDIA 并不像AMD那样把多少个运算单元捆绑为一组,而是以线程为单位自由分配,控制逻辑单元会根据线程的任务量和SM内部CUDA运算单元的负载来决定调动多少个CUDA核心进行计算,这一过程完全是动态的。

但不可忽视的是,软件预解码虽然大大节约了GPU的晶体管开销,让流处理器数量和运算能力大增,但对驱动和游戏优化提出了更高的要求,这种情况伴随着AMD度过了好多年,现在NVIDIA也要面对相同的问题了,希望他能做得更好一些。

开普勒之核心:SMX与SM的改动细节

全新的Kepler相比上代的Fermi架构改变了什么,看架构图就很清楚了:

gpu的结构解析

Fermi GF100/GF110核心架构图

gpu的结构解析

Kepler GK104核心架构图

GK104相比GF110,整体架构没有大的改变,GPU(图形处理器集群)维持4个,显存控制器从6个64bit(384bit)减至4个64bit(256bit),总线接口升级至PCIE 3.0。剩下的就是SM方面的改变了:

gpu的结构解析

GF100和GF104的SM架构图

这里之所以要把GF104这颗中端核心的SM架构图也列出来,是因为GF104相比高端的GF100核心做了一些细小的改动,这些改动也被沿用到了GK104当中。另外从核心代号上来看,GK104其实就是用来取代GF104的,而取代GF100的核心另有他人。

gpu的结构解析

GK104的SMX架构图

NVIDIA把GK104的SM(不可分割的流处理器集群)称为SMX,原因就是暴增的CUDA核心数量。但实际上其结构与上代的SM没有本质区别,不同的只是各部分单元的

数量和比例而已。具体的区别逐个列出来进行对比:

gpu的结构解析

1. NVIDIA现在把流处理器称为CUDA核心;

2. SFU(Special Function Units,特殊功能单元)是比CUDA核心更强的额外运算单元,

可用于执行抽象的指令,例如正弦、余弦、倒数和平方根,图形插值指令也在SFU上执行;

3. Warp是并行线程调度器,每一个Warp都可以调度SM内部的所有CUDA核心或者SFU;

4. Dispatch Unit是指令分派单元,分则将Warp线程中的指令按照顺序和相关性分配给不

同的CUDA核心或SFU处理;

5. LD/ST就是载入/存储单元,可以为每个线程存储运算源地址与路径,方便随时随地的从缓存或显存中存取数据;

6. TMU是纹理单元,用来处理纹理和阴影贴图、屏幕空间环境光遮蔽等图形后期处理;

通过以上数据对比不难看出,GK104暴力增加CUDA核心数量的同时,SFU和TMU 这两个与图形或计算息息相关处理单元也同比增加,但是指令分配单元和线程调度器还有载入/存储单元的占比都减半了。这也就是前文中提到过的削减逻辑控制单元的策略,此时如

何保证把指令和线程填满一个CUDA核心,将是一个难题。

开普勒之频率:CUDA频率不再是双倍

除了CUDA核心数量大增之外,开普勒架构还有个很明显的改变,那就是CUDA核

心的频率不再是GPU频率的两倍,现在整颗GPU所有单元的工作频率都是相同的,

GTX680的默认频率达到了1GHz!

NVIDIA的上代产品,比如GTX560Ti,一些AIC的超频版本默认核心频率可达900MHz,CUDA频率是1800MHz。按理说如果新一代架构改变不是很大的话,在28nm的帮助下核心频率到1GHz没有问题,那CUDA频率应该可以到2GHz才对。而现在的情况则是CUDA 的频率“被减半了”。

gpu的结构解析

NVIDIA官方对CUDA与核心同频的解释是——功耗原因,为了尽可能的控制GTX680的功耗,不再让CUDA工作在两倍频率下。

对于这种解释,笔者并不理解,如果CUDA频率真能工作在2GHz下,性能提升两倍,此时功耗增长两倍又如何?如此增加功耗是值得的,并不影响GTX680显卡的“每瓦性能”。

所以,笔者猜测此次CUDA与核心同频,应该有别的原因,以下猜测纯属虚构,大家随便看看不要当真:

原因一:此次NVIDIA对SMX的结构进行了大幅度的调整,除了控制逻辑单元削减外,过于密集CUDA单元结构也发生了一些变化,导致CUDA单元或控制逻辑单元上不了更高的频率,所以现在就和AMD一样同频了;

原因二:保留实力。NVIDIA官方发言人在AMD发布HD7970之后曾表示:AMD GCN 架构“南方群岛”核心的表现并没有超出NVIDIA的预期,一切尽在掌握之中。而Kepler架构则将比南方群岛要强出许多,因为本来NVIDIA为新架构设计的对手是AMD更强的新产品,但实际上南岛并未达到NVIDIA的设想性能。

原因三:确实是功耗问题,强行让CUDA工作在双倍频率下对GPU的电路设计提出了很高的要求,28nm新工艺目前可能还尚未完全吃透,上高频有一定的难度。

虽然CUDA频率达不到两倍,但NVIDIA通过加入类似Intel睿频的技术,一定程度上提高了工作频率,性能也同比增长,而且高于预期,或者说是对手不如预期。

开普勒之显存:频率全面超越对手

我们先来回顾一下显存控制器的发展史:

NVIDIA:G80(384bit)-G92(256bit)-GT200(512bit)-GF100(384bit)

AMD:

R600(512bit)-RV670(256bit)-RV770(256bit)-Cypress(256bit)-Cayman(256bit)-Tahiti(384b it)

gpu的结构解析

384bit显存应该是高端显卡的标配

●GK104核心为什么只有256bit显存?

大家应该注意到了,NVIDIA近年来的高端显卡,很少有256bit显存的设计,现在就连AMD都升级到384bit显存,256bit已经很难在跻身为高端,为什么NVIDIA新一代的GTX680居然降级到了256bit?

答案在其核心代号上面,GK104的定位就是取代GF104/GF114,它并非是NVIDIA 最高端的GPU,显存方面自然不会用最高端的配置。

●GTX680显存频率弥补位宽不足,首次达到6GHz!

另外,之前我们反复提到过,AMD从HD4870开始第一次使用GDDR5显存,GDDR5的标准几乎可以说是AMD的人一手制定的,AMD历代GPU凭借GDDR5超高频率的优势,以较低的显存位宽很好的控制了成本。

gpu的结构解析

而NVIDIA从GTX480开始也使用了GDDR5显存,但频率一直都上不去,GTX400和GTX500系列显卡的显存频率一直在4000MHz上下徘徊。NVIDIA的显卡在GPU频率方面超频能力还不错,但显存的超频空间几乎没有,即便有液氮的助力也无济于事。

gpu的结构解析

现在,随着开普勒的发布,NVIDIA在显存频率上面终于反超AMD,重新设计的显存控制器突破了频率的桎梏,瞬间从4000MHz飙升至6000MHz,带宽提升达50%之多,这个幅度就相当于把256bit免费升级至384bit,显存带宽不再是瓶颈了。

开普勒之其它:多形体引擎和缓存设计

最后再来看看开普勒架构在其它方面的改进:

●多形体引擎2.0:

从GTX480开始,NVIDIA就宣称只有自己“做对了DX11”,因为GF100核心拥有多达16个多形体引擎,每个多形体引擎内部都有独立的曲面细分单元,而HD5870整颗Cypress核心只有1个曲面细分单元。通过专项测试来看,GTX480的曲面细分和几何性能都遥遥领先于HD5870。