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

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

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

了,你们这是要闹哪样啊?”

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

在新一代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有很多相似之处。

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

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

R600的基础上修修补补,但始终未能从根本上解决问题。

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相比变化不大,只是强化了曲面细分单元,加入了双异步计算引擎而已。

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

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

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

Cayman

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

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历代产品架构上的变化,之前多篇文章中都已经交代过了,这里就不再重复,我们通过这个简单的数字变化,来了解一下:

先看看

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

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

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

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个核心的壮举就变成了现实!

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

Fermi的硬件相关性检查变为

Kepler的软件预解码

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

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

The Way(游戏之道)计划可以保证NVIDA的GPU架构与游戏完美兼容

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

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

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

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

Fermi GF100/GF110核心架构图

Kepler GK104核心架构图

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

GF100和GF104的SM架构图

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

GK104的SMX架构图

NVIDIA把GK104的SM(不可分割的流处理器集群)称为SMX,原因就是暴增的CUDA核心数量。但实际上其结构与上代的SM没有本质区别,不同的只是各部分单元的数量和比例而已。具体的区别逐个列出来进行对比:

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的频率“被减半了”。

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(384bit)

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超高频率的优势,以较低的显存位宽很好的控制了成本。

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

现在,随着开普勒的发布,

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

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

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

● 多形体引擎2.0:

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

AMD方面当然也意识到了孽弱的曲面细分性能是个瓶颈,一方面强调“曲面没必要分太细”,另一方面也在新一代产品中不断的加强曲面细分性能。

根据AMD

官方的说法,HD6870通过双超线程分配处理器将中等程度的曲面细分性能提高了2倍;HD6970通过双图形引擎又提升了2倍;而HD7970则重新设计了曲面细分单元,在所有等级下都可以达到HD6970的4倍!最终HD7970的曲面细分能力相比HD5870提升了10倍左右!

在AMD不断更新架构的同时,NVIDIA的DX11 GPU没有变化(GF110和GF100是一样的),显然HD7970的曲面细分性能已经超越了GTX580。这次该NVIDIA着急了。

在开普勒架构中,我们看到了多形体引擎2.0版,结构上没有什么变化,但处理能力翻倍了。NVIDIA称,Kepler的多形体引擎在同频率下的性能是Fermi的两倍,而且新引擎在重度曲面细分情况下的效率更高,性能损失更小。

DX11理论曲面性能性能测试,横轴为细分级别

值得注意的是,GK104只有8个多形体引擎,而GF110有16个多形体引擎,但最终GTX680的曲面细分性能比GTX580还要强,看来单个引擎的效能确实翻倍了,超出那部分的性能应该是高达1GHz频率的贡献。

可以看出,NVIDIA的曲面细分单元在重度细分模式下的效率更好一些,低级别模式下HD7970并不差还略占优势,但级别越高差距就越大。根据目前DX11游戏的发展趋势来看,“曲面没必要分太细”的说法已经过时,不然AMD也就成倍的增加曲面细分性能了,未来的DX11游戏会加入高精度曲面细分引擎,届时N卡的优势会得到体现。

● 更快的高速缓存:

GK104的缓存设计与GF100没有区别,都是一级缓存、一级纹理缓存、二级缓存这样的层级设计,而且缓存容量的配比也没有变化,但因为模块化设计的关系,总容量有所减少。

缓存架构让各流水线之间可以高效地通信,减少了显存读写操作

GK104的每个SMX当中配有64KB的Shared Memory/L1,GK104总共拥有8个SMX,所以一级缓存的总容量是512KB。 GK104的每个光栅单元/64bit显存控制器配有128KB的L2,GK104总共有4个64bit显存控制器,所以二级缓存的总容量也是512KB。

与GF100的1MB一级缓存、768KB的二级缓存相比,GK104的缓存容量确实小了很多,这个可以通过芯片透视图明显的看出。

虽然缓存容量变小了,但速度快了很多,NVIDIA强调GK104的L2带宽比GF110增加了73%,其中改进的算法提高了30%的缓存命中率,另外的43%则是得益于高达1GHz的核心频率。此外,原子操作的吞吐量也大增3.5倍,尤其是单一共享地址的原子操作可提升11.7倍之多!

● 更多的纹理单元:

GK104的每个SMX内部拥有16个纹理单元,8个SMX总计128个纹理单元;GF110的每个SM内部拥有4个纹理单元,16个SM总计64个纹理单元;可以看出GK104这次大幅增加CUDA核心数量的同时,也没有忘记纹理单元。

除了数量翻倍之外,纹理存取的限制也放开了,以前因为DX11 API的限制,GPU最多只能对128个纹理进行操作,而现在GK104可以使用超过100万像素的纹理贴图,而且可以并行的对多个纹理同时操作,在使用超大纹理时的CPU占用率大幅下降。但由于微软DirectX API的限制,目前GK104的这些特性还只能在OpenGL API中体现,未来版本的DirectX可能会加入支持。

总结:开普勒与南方群岛谁更先进?

长篇大论的分析相信大家看得都很累,最后我们将Tahiti与GK104这两颗GPU

的所有规格都列出来,进行全方位的对比:

下面就通过数据分析一下架构的特性:

1. GK104的晶体管数比GF110减少了,但流处理器数量达到了三倍,NVIDIA改进架构、提高浮点运算的努力效果显著。但是,同为1536个流处理器,GK104的晶体管数要远大于Cayman核心,这就证明了SIMT还是要比SIMD更消耗晶体管;

2. GTX680的核心与显存频率都创新高,但是TDP却不到200W,这都要归功于它小核心的设计、以及不再使用双倍CUDA频率的作法,NVIDIA控制功耗的作法成效显著;

3. Tahiti的晶体管数是GK104的1.22倍,流处理器数量是1.33倍,这两个数字差距不是很大,N/A双方自DX10时代以来头一次达到了相似的晶体管利用率;

4. 从Cayman到Tahiti,AMD用了1.63倍的晶体管数才让流处理器数量达到了原来的1.33倍;从GF110到GK104,NVIDIA减少了晶体管数量却让流处理器达到原来的三倍;可以看出双方都在向对方的架构靠拢,目的只有一个,就是提高GPU的运算效能;

通过之前的测试数据来看,AMD的GCN架构相比上代确实提高了GPU的效能。而NVIDIA方面,通过我们的测试来看,GTX680的性能也是远超GTX580。

在核心面积、晶体管数量、功耗、流处理器数量、显存容量、显存位宽得各方面都不占优势(唯一的优势就是频率)的情况下,GTX680的综合性能能够超越HD7970,Kepler与南方群岛的架构孰优孰劣,相信大家已经心里有数了。

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

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

了,你们这是要闹哪样啊?”

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

在新一代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有很多相似之处。

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

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

R600的基础上修修补补,但始终未能从根本上解决问题。

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相比变化不大,只是强化了曲面细分单元,加入了双异步计算引擎而已。

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

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

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

Cayman

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

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历代产品架构上的变化,之前多篇文章中都已经交代过了,这里就不再重复,我们通过这个简单的数字变化,来了解一下:

先看看

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

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

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

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个核心的壮举就变成了现实!

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

Fermi的硬件相关性检查变为

Kepler的软件预解码

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

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

The Way(游戏之道)计划可以保证NVIDA的GPU架构与游戏完美兼容

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

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

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

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

Fermi GF100/GF110核心架构图

Kepler GK104核心架构图

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

GF100和GF104的SM架构图

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

GK104的SMX架构图

NVIDIA把GK104的SM(不可分割的流处理器集群)称为SMX,原因就是暴增的CUDA核心数量。但实际上其结构与上代的SM没有本质区别,不同的只是各部分单元的数量和比例而已。具体的区别逐个列出来进行对比:

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的频率“被减半了”。

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(384bit)

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超高频率的优势,以较低的显存位宽很好的控制了成本。

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

现在,随着开普勒的发布,

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

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

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

● 多形体引擎2.0:

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

AMD方面当然也意识到了孽弱的曲面细分性能是个瓶颈,一方面强调“曲面没必要分太细”,另一方面也在新一代产品中不断的加强曲面细分性能。

根据AMD

官方的说法,HD6870通过双超线程分配处理器将中等程度的曲面细分性能提高了2倍;HD6970通过双图形引擎又提升了2倍;而HD7970则重新设计了曲面细分单元,在所有等级下都可以达到HD6970的4倍!最终HD7970的曲面细分能力相比HD5870提升了10倍左右!

在AMD不断更新架构的同时,NVIDIA的DX11 GPU没有变化(GF110和GF100是一样的),显然HD7970的曲面细分性能已经超越了GTX580。这次该NVIDIA着急了。

在开普勒架构中,我们看到了多形体引擎2.0版,结构上没有什么变化,但处理能力翻倍了。NVIDIA称,Kepler的多形体引擎在同频率下的性能是Fermi的两倍,而且新引擎在重度曲面细分情况下的效率更高,性能损失更小。

DX11理论曲面性能性能测试,横轴为细分级别

值得注意的是,GK104只有8个多形体引擎,而GF110有16个多形体引擎,但最终GTX680的曲面细分性能比GTX580还要强,看来单个引擎的效能确实翻倍了,超出那部分的性能应该是高达1GHz频率的贡献。

可以看出,NVIDIA的曲面细分单元在重度细分模式下的效率更好一些,低级别模式下HD7970并不差还略占优势,但级别越高差距就越大。根据目前DX11游戏的发展趋势来看,“曲面没必要分太细”的说法已经过时,不然AMD也就成倍的增加曲面细分性能了,未来的DX11游戏会加入高精度曲面细分引擎,届时N卡的优势会得到体现。

● 更快的高速缓存:

GK104的缓存设计与GF100没有区别,都是一级缓存、一级纹理缓存、二级缓存这样的层级设计,而且缓存容量的配比也没有变化,但因为模块化设计的关系,总容量有所减少。

缓存架构让各流水线之间可以高效地通信,减少了显存读写操作

GK104的每个SMX当中配有64KB的Shared Memory/L1,GK104总共拥有8个SMX,所以一级缓存的总容量是512KB。 GK104的每个光栅单元/64bit显存控制器配有128KB的L2,GK104总共有4个64bit显存控制器,所以二级缓存的总容量也是512KB。

与GF100的1MB一级缓存、768KB的二级缓存相比,GK104的缓存容量确实小了很多,这个可以通过芯片透视图明显的看出。

虽然缓存容量变小了,但速度快了很多,NVIDIA强调GK104的L2带宽比GF110增加了73%,其中改进的算法提高了30%的缓存命中率,另外的43%则是得益于高达1GHz的核心频率。此外,原子操作的吞吐量也大增3.5倍,尤其是单一共享地址的原子操作可提升11.7倍之多!

● 更多的纹理单元:

GK104的每个SMX内部拥有16个纹理单元,8个SMX总计128个纹理单元;GF110的每个SM内部拥有4个纹理单元,16个SM总计64个纹理单元;可以看出GK104这次大幅增加CUDA核心数量的同时,也没有忘记纹理单元。

除了数量翻倍之外,纹理存取的限制也放开了,以前因为DX11 API的限制,GPU最多只能对128个纹理进行操作,而现在GK104可以使用超过100万像素的纹理贴图,而且可以并行的对多个纹理同时操作,在使用超大纹理时的CPU占用率大幅下降。但由于微软DirectX API的限制,目前GK104的这些特性还只能在OpenGL API中体现,未来版本的DirectX可能会加入支持。

总结:开普勒与南方群岛谁更先进?

长篇大论的分析相信大家看得都很累,最后我们将Tahiti与GK104这两颗GPU

的所有规格都列出来,进行全方位的对比:

下面就通过数据分析一下架构的特性:

1. GK104的晶体管数比GF110减少了,但流处理器数量达到了三倍,NVIDIA改进架构、提高浮点运算的努力效果显著。但是,同为1536个流处理器,GK104的晶体管数要远大于Cayman核心,这就证明了SIMT还是要比SIMD更消耗晶体管;

2. GTX680的核心与显存频率都创新高,但是TDP却不到200W,这都要归功于它小核心的设计、以及不再使用双倍CUDA频率的作法,NVIDIA控制功耗的作法成效显著;

3. Tahiti的晶体管数是GK104的1.22倍,流处理器数量是1.33倍,这两个数字差距不是很大,N/A双方自DX10时代以来头一次达到了相似的晶体管利用率;

4. 从Cayman到Tahiti,AMD用了1.63倍的晶体管数才让流处理器数量达到了原来的1.33倍;从GF110到GK104,NVIDIA减少了晶体管数量却让流处理器达到原来的三倍;可以看出双方都在向对方的架构靠拢,目的只有一个,就是提高GPU的运算效能;

通过之前的测试数据来看,AMD的GCN架构相比上代确实提高了GPU的效能。而NVIDIA方面,通过我们的测试来看,GTX680的性能也是远超GTX580。

在核心面积、晶体管数量、功耗、流处理器数量、显存容量、显存位宽得各方面都不占优势(唯一的优势就是频率)的情况下,GTX680的综合性能能够超越HD7970,Kepler与南方群岛的架构孰优孰劣,相信大家已经心里有数了。


    相关文章

    [数字信号处理]课程心得

    <数字信号处理>课程心得之 DSP 技术在计算机领域的应用 姓名:XX 班级:电气XXXX 班 短暂的一学期很快就过去了,在这个学期里,通过对<数字信号处理>课程的学习, 我了解到了DSP 的基本概念和基本内容.我平 ...

    认清GPU的流处理器作用 别被它的数量忽悠

    2009-7-10 作者: 天一 来源: 万方数据 AMD-ATI显卡(以下简称A卡)和NVIDIA(以下简称N卡)在流处理器数量上的巨大差异给Tommy造成的困惑相信许多读者也有.其实,这个情况和不同厂商.相近行能的GPU的二级缓存数量存 ...

    AMD的黎明之光!HBM显存技术解析

    2015-05-30 16:57:13  出处:中关村在线   编辑:鲲鹏   人气: 32655 次    评论(80) 让小伙伴们也看看: 0 收藏文章 在忍耐了长达两个产品周期的时间之后,AMD终于来到了自己命运的十字路口. 毫无疑问 ...

    手机微处理器

    手机微处理器 随着社会的发展,生活节奏的逐渐加快,人们对相互之间交流的便捷.信息获取的速度的要求也越来越高.于是,手机成为了我们生活中一个不可或缺的组成部分.但是,日常生活中,人们在选择手机时总是关注其通话的质量.摄像头的像素.音响的音质等 ...

    物理学史及相关试题及答案

    高考物理学史 1.牛顿(英) :牛顿三定律和万有引力定律,光的色散,光的微粒说 卡文迪许(英) :利用卡文迪许扭秤首测万有引力恒量 库仑(法) :库仑定律,利用库仑扭秤测定静电力常量 奥斯特(丹麦) :发现电流周围存在磁场 安培(法) :磁 ...

    酷睿i.酷睿2双核.酷睿双核.奔腾双核.赛扬双核系列的区别

    酷睿i.酷睿2双核.酷睿双核.奔腾双核.赛扬双核系列的区别 同样是双核处理器,Intel公司就有酷睿I.酷睿双核(包括1代和2代).奔腾双核.赛扬双核等,简直可以说有无数个型号.本文简单讲述一下它们的区别: 酷睿是英文单词core的音译,译 ...

    高一物理上册知能优化训练题8

    1.关于天体运动,下列说法中正确的是( ) A .天体的运动与地面上物体的运动所遵循的规律是不同的 B .天体的运动是最完美.最和谐的匀速圆周运动 C .太阳东升西落,所以太阳绕地球运动 D .太阳系的所有行星都围绕太阳运动 答案:D 2( ...

    万有引力1

    新人教版高中物理必修二第六章万有引力与航天行星的运动第一节1.首先发现行星绕太阳运动的轨道是椭圆,揭示行星运动规律的科学家是_开普勒,他是在 仔细研究了第谷的观测资料,经过了四年的刻苦计算的基础上总结出来了. 2.古人认为天体的运动是最完美 ...

    高一物理必修二期末试题及答案

    6.开普勒分别于1609年和1619年发表了他发现的行星运动规律,后人称之为开普勒行星运 期末试题 一.单项选择题 1.关于物体的动能,下列说法正确的是( ) A .质量大的物体,动能一定大 B .速度大的物体,动能一定大 C .速度方向变 ...