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

2019-01-30 22:13:52 围观 : 159
网址:http://www.atlatl.net
网站:快3彩票

  3. Tahiti的晶体管数是GK104的1.22倍,流处理器数量是1.33倍,这两个数字差距不是很大,N/A双方自DX10时代以来头一次达到了相似的晶体管利用率; 1. GK104的晶体管数比GF110减少了,但流处理器数量达到了三倍,NVIDIA改进架构、提高浮点运算的努力效果显著。但是,同为1536个流处理器,GK104的晶体管数要远大于Cayman核心,这就证明了SIMT还是要比SIMD更消耗晶体管; 长篇大论的分析相信大家看得都很累,最后我们将Tahiti与GK104这两颗GPU的所有规格都列出来,进行全方位的对比: 改变是为了适应形式的变化,解决此前出现的一些问题,那NVIDIA的架构有什么问题呢?此前我们多次提到过,虽然NVIDIA的GPU在效能方面占尽优势,但也不是完美无缺的——NVIDIA最大的劣势就是流处理器数量较少,导致理论浮点运算能力较低。当然这只是表面现象,其背后的本质则是MIMD(多指令多数据流)的架构,相当一部分比例的晶体管消耗在了指令发射端和控制逻辑单元上面,所以流处理器数量始终低于对手。 除了CUDA核心数量大增之外,开普勒架构还有个很明显的改变,那就是CUDA核心的频率不再是GPU频率的两倍,现在整颗GPU所有单元的工作频率都是相同的,GTX680的默认频率达到了1GHz! 为此,NVIDIA将芯片架构逐步转向了SIMT的模式,即Single Instruction Multiple Threads(单指令多线程),SIMT有别与AMD的SIMD,SIMT的好处就是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支。 纯粹使用SIMD不能并行的执行有条件跳转的函数,很显然条件跳转会根据输入数据不同在不同的线程中有不同表现,这个只有利用SIMT才能做到。 对于这种解释,笔者并不理解,如果CUDA频率线GHz下,性能提升两倍,此时功耗增长两倍又如何?如此增加功耗是值得的,并不影响GTX680显卡的“每瓦性能”。 2. GTX680的核心与显存频率都创新高,但是TDP却不到200W,这都要归功于它小核心的设计、以及不再使用双倍CUDA频率的作法,NVIDIA控制功耗的作法成效显著; 原因二:保留实力。NVIDIA官方发言人在AMD发布HD7970之后曾表示:AMD GCN架构“南方群岛”核心的表现并没有超出NVIDIA的预期,一切尽在掌握之中。而Kepler架构则将比南方群岛要强出许多,因为本来NVIDIA为新架构设计的对手是AMD更强的新产品,但实际上南岛并未达到NVIDIA的设想性能。 而NVIDIA方面,则是不停的对GPU的GPC、SM、CUDA核心等配比进行微调,在微调的过程中经历了两次突变:第一次是GT200到GF100,神圣联盟和大联盟,首次引出了GPC(图形处理器集群)的概念,GPC数量减少但SM数以及流处理器数量增加不少;第二次就是现在了,从GF100到GK104,SM数量减少,但流处理器数量暴增! 与GF100的1MB一级缓存、768KB的二级缓存相比,GK104的缓存容量确实小了很多,这个可以通过芯片透视图明显的看出。 AMD方面当然也意识到了孽弱的曲面细分性能是个瓶颈,一方面强调“曲面没必要分太细”,另一方面也在新一代产品中不断的加强曲面细分性能。根据AMD官方的说法,HD6870通过双超线程分配处理器将中等程度的曲面细分性能提高了2倍;HD6970通过双图形引擎又提升了2倍;而HD7970则重新设计了曲面细分单元,在所有等级下都可以达到HD6970的4倍!最终HD7970的曲面细分能力相比HD5870提升了10倍左右! 相信很多人听到GTX680的规格时,都会产生这样一种想法。在GTX680发布之前,各种小道消息不胫而走之时,笔者也很纳闷,NVIDIA的Kepler架构到底发生了什么样的变化?难不成N/A双方真的要互相学习、取长补短? 通过上面这个示意图就看的很清楚了,CUDA核心的缩小主要归功于28nm工艺的使用,而如此之多的CUDA核心,与之搭配的控制逻辑单元面积反而缩小了,NVIDIA强化运算单元削减控制单元的意图就很明显了。 这里之所以要把GF104这颗中端核心的SM架构图也列出来,是因为GF104相比高端的GF100核心做了一些细小的改动,这些改动也被沿用到了GK104当中。另外从核心代号上来看,GK104其实就是用来取代GF104的,而取代GF100的核心另有他人。 另外,之前我们反复提到过,AMD从HD4870开始第一次使用GDDR5显存,GDDR5的标准几乎可以说是AMD的人一手制定的,AMD历代GPU凭借GDDR5超高频率的优势,以较低的显存位宽很好的控制了成本。 随意在开普勒中NVIDIA将一大部分指令派发和控制的操作交给了软件(驱动)来处理。而且GPU的架构并没有本质上的改变,只是结构和规模以及控制方式发生了变化,只要驱动支持到位,与游戏开发商保持紧密的合作,效率损失必然会降到最低——事实上NVIDIA著名的The Way策略就是干这一行的! NVIDIA把GK104的SM(不可分割的流处理器集群)称为SMX,原因就是暴增的CUDA核心数量。但实际上其结构与上代的SM没有本质区别,不同的只是各部分单元的数量和比例而已。具体的区别逐个列出来进行对比: 原因三:确实是功耗问题,强行让CUDA工作在双倍频率下对GPU的电路设计提出了很高的要求,28nm新工艺目前可能还尚未完全吃透,上高频有一定的难度。 原因一:此次NVIDIA对SMX的结构进行了大幅度的调整,除了控制逻辑单元削减外,过于密集CUDA单元结构也发生了一些变化,导致CUDA单元或控制逻辑单元上不了更高的频率,所以现在就和AMD一样同频了; 此时相信有人会问,降低控制单元的比例那是不是意味着NVIDIA赖以成名的高效率架构将会一去不复返了?理论上来说效率肯定会有损失,但实际上并没有想象中的那么严重。NVIDIA发现线程的调度有一定的规律性,编译器所发出的条件指令可以被预测到,此前这部分工作是由专门的硬件单元来完成的,而现在可以用简单的程序来取代,这样就能节约不少的晶体管。 最大的改变来自于流处理器部分,原有的SIMD引擎不见了,取而代之的是GCN阵列,那SIMD引擎与GCN阵列有什么本质区别呢? 答案在其核心代号上面,GK104的定位就是取代GF104/GF114,它并非是NVIDIA最高端的GPU,显存方面自然不会用最高端的配置。 4. 从Cayman到Tahiti,AMD用了1.63倍的晶体管数才让流处理器数量达到了原来的1.33倍;从GF110到GK104,NVIDIA减少了晶体管数量却让流处理器达到原来的三倍;可以看出双方都在向对方的架构靠拢,目的只有一个,就是提高GPU的运算效能; NVIDIA的GPU从G80时代开始,其MIMD(多指令多数据流)一直以高效能而著称,但也存在一个让人头疼的问题——GPU流处理器数量较少、浮点运算能力太低,这同样限制了N卡在游戏以及计算方面的实际性能。 SIMT在硬件部分的结构还是要比SIMD复杂一些,NVIDIA还是更注重效率一些,所以NVIDIA的流处理器数量还是要比AMD少,但差距已经没以前那么夸张了。 泡泡网显卡频道3月20日“什么?GTX680的流处理器数量是1536个?而且GTX680的流处理器与核心同频率,不再是两倍了?这规格简直和HD6970一模一样!AMD的HD7970刚开始学习NVIDIA的架构,现在NVIDIA的GTX680又学AMD了,你们这是要闹哪样啊?” 在新一代GTX680发布前夕,NVIDIA召开了多场技术讲座,NVIDIA总部的专家为全球各大媒体编辑详细解读了新一代Kepler(开普勒)架构的技术特性,笔者经过深入学习研究之后,今天就为大家揭开谜底——新一代GPU图形架构到底谁更先进? NVIDIA的上代产品,比如GTX560Ti,一些AIC的超频版本默认核心频率可达900MHz,CUDA频率是1800MHz。按理说如果新一代架构改变不是很大的线nm的帮助下核心频率到1GHz没有问题,那CUDA频率应该可以到2GHz才对。而现在的情况则是CUDA的频率“被减半了”。 6. TMU是纹理单元,用来处理纹理和阴影贴图、屏幕空间环境光遮蔽等图形后期处理; 除了数量翻倍之外,纹理存取的限制也放开了,以前因为DX11 API的限制,GPU最多只能对128个纹理进行操作,而现在GK104可以使用超过100万像素的纹理贴图,而且可以并行的对多个纹理同时操作,在使用超大纹理时的CPU占用率大幅下降。但由于微软DirectX API的限制,目前GK104的这些特性还只能在OpenGL API中体现,未来版本的DirectX可能会加入支持。 从GPU外围模块来看,AMD的Tahiti和上代Cayman相比变化不大,只是强化了曲面细分单元,加入了双异步计算引擎而已。 但是,GCN架构与NVIDIA的CUDA架构还是有明显的区别,那就是GCN里面包括了4个SIMD-16单元,标量流处理器被硬性拆分为4个小组,而NVIDIA的SM则没有这种设计,所有流处理器都一视同仁。 为了保证GPU性能持续增长,NVIDIA必须耗费更多的晶体管、制造出更大的GPU核心,而这些都需要先进的、成熟的半导体制造工艺的支持。NVIDIA之所以在GF100(GTX480)时代落败,并非架构或者研发端出了什么问题(GF110/GTX580的成功可以证明),而是核心太大导致40nm工艺无法支撑,良率低下漏电流难以控制,最终导致核心不完整且功耗巨大。如此一来,NVIDIA原有的架构严重受制于制造工艺,并非可持续发展之路。 从GTX480开始,NVIDIA就宣称只有自己“做对了DX11”,因为GF100核心拥有多达16个多形体引擎,每个多形体引擎内部都有独立的曲面细分单元,而HD5870整颗Cypress核心只有1个曲面细分单元。通过专项测试来看,GTX480的曲面细分和几何性能都遥遥领先于HD5870。 大家应该注意到了,NVIDIA近年来的高端显卡,很少有256bit显存的设计,现在就连AMD都升级到384bit显存,256bit已经很难在跻身为高端,为什么NVIDIA新一代的GTX680居然降级到了256bit? AMD的SIMD架构可以用较少的晶体管造出庞大数量的流处理器、拥有恐怖的理论浮点运算能力;而NVIDIA的MIMD架构必须使用更多的晶体管制造出看似比较少的流处理器,理论浮点运算能力相差很远。双方走的都是极端路线,AMD以数量弥补效率的不足,而NVIDIA以效率弥补数量的劣势。 通过之前的测试数据来看,AMD的GCN架构相比上代确实提高了GPU的效能。而NVIDIA方面,通过我们的测试来看,GTX680的性能也是远超GTX580。 值得注意的是,GK104只有8个多形体引擎,而GF110有16个多形体引擎,但最终GTX680的曲面细分性能比GTX580还要强,看来单个引擎的效能确实翻倍了,超出那部分的性能应该是高达1GHz频率的贡献。 而NVIDIA从GTX480开始也使用了GDDR5显存,但频率一直都上不去,GTX400和GTX500系列显卡的显存频率一直在4000MHz上下徘徊。NVIDIA的显卡在GPU频率方面超频能力还不错,但显存的超频空间几乎没有,即便有液氮的助力也无济于事。 GK104的每个SMX内部拥有16个纹理单元,8个SMX总计128个纹理单元;GF110的每个SM内部拥有4个纹理单元,16个SM总计64个纹理单元;可以看出GK104这次大幅增加CUDA核心数量的同时,也没有忘记纹理单元。 在核心面积、晶体管数量、功耗、流处理器数量、显存容量、显存位宽得各方面都不占优势(唯一的优势就是频率)的情况下,GTX680的综合性能能够超越HD7970,Kepler与南方群岛的架构孰优孰劣,相信大家已经心里有数了。■ 尽管AMD的架构在向NVIDIA靠拢,但双方还是有明显区别,而且NVIDIA也在不断的改变。至于NVIDIA和AMD历代产品架构上的变化,之前多篇文章中都已经交代过了,这里就不再重复,我们通过这个简单的数字变化,来了解一下: 虽然缓存容量变小了,但速度快了很多,NVIDIA强调GK104的L2带宽比GF110增加了73%,其中改进的算法提高了30%的缓存命中率,另外的43%则是得益于高达1GHz的核心频率。此外,原子操作的吞吐量也大增3.5倍,尤其是单一共享地址的原子操作可提升11.7倍之多! 促使AMD做出革命性改进的一大原因,就是从R600开始SIMD(单指令多数据流)VILW(超长指令集)的效率问题,AMD的GPU固然拥有恐怖的浮点运算能力,但很多时候都不能完全发挥出来,由此导致游戏性能和计算性能都要大打折扣。此后的四代产品虽然在R600的基础上修修补补,但始终未能从根本上解决问题。 2.SFU(Special Function Units,特殊功能单元)是比CUDA核心更强的额外运算单元,可用于执行抽象的指令,例如正弦、余弦、倒数和平方根,图形插值指令也在SFU上执行; 3. Warp是并行线程调度器,每一个Warp都可以调度SM内部的所有CUDA核心或者SFU; 在开普勒架构中,我们看到了多形体引擎2.0版,结构上没有什么变化,但处理能力翻倍了。NVIDIA称,Kepler的多形体引擎在同频率下的性能是Fermi的两倍,而且新引擎在重度曲面细分情况下的效率更高,性能损失更小。 这方面NVIDIA与AMD的思路和目的是相同的,但最终体现在架构上还是有所区别。NVIDIA的架构被称为SIMT(Single Instruction Multiple Threads,单指令多线程),NVIDIA并不像AMD那样把多少个运算单元捆绑为一组,而是以线程为单位自由分配,控制逻辑单元会根据线程的任务量和SM内部CUDA运算单元的负载来决定调动多少个CUDA核心进行计算,这一过程完全是动态的。 1. NVIDIA喜欢用物理学家的名字来为GPU架构命名,从DX10开始第一代叫做Tesla(特斯拉)、第二代是Fermi(费米)、第三代是Kepler(开普勒)、第四代是Maxwell(麦克斯韦),这些科学家的大名是如雷贯耳,就不做解释了。 4. Dispatch Unit是指令分派单元,分则将Warp线程中的指令按照顺序和相关性分配给不同的CUDA核心或SFU处理; 现在,随着开普勒的发布,NVIDIA在显存频率上面终于反超AMD,重新设计的显存控制器突破了频率的桎梏,瞬间从4000MHz飙升至6000MHz,带宽提升达50%之多,这个幅度就相当于把256bit免费升级至384bit,显存带宽不再是瓶颈了。 通过以上数据对比不难看出,GK104暴力增加CUDA核心数量的同时,SFU和TMU这两个与图形或计算息息相关处理单元也同比增加,但是指令分配单元和线程调度器还有载入/存储单元的占比都减半了。这也就是前文中提到过的削减逻辑控制单元的策略,此时如何保证把指令和线程填满一个CUDA核心,将是一个难题。 虽然CUDA频率达不到两倍,但NVIDIA通过加入类似Intel睿频的技术,一定程度上提高了工作频率,性能也同比增长,而且高于预期,或者说是对手不如预期。 NVIDIA官方对CUDA与核心同频的解释是——功耗原因,为了尽可能的控制GTX680的功耗,不再让CUDA工作在两倍频率下。 GK104的每个光栅单元/64bit显存控制器配有128KB的L2,GK104总共有4个64bit显存控制器,所以二级缓存的总容量也是512KB。 全新的Kepler相比上代的Fermi架构改变了什么,看架构图就很清楚了: 所以,笔者猜测此次CUDA与核心同频,应该有别的原因,以下猜测纯属虚构,大家随便看看不要当真: 7年前从G80和R600开始,NVIDIA和AMD在GPU架构上分道扬镳,这么多年经历了风风雨雨之后,发现极左或极右路线都有各自的局限性,修正主义治标不治本,唯有走中间路线才是正道!不过中间路线也有不同的走法,有些人还是偏左、有些人还是偏右 基于效能和计算能力方面的考虑,NVIDIA与AMD不约而同的改变了架构,NVIDIA虽然还是采用SIMT架构,但也借鉴了AMD“较老”的SIMD架构之作法,降低控制逻辑单元和指令发射器的比例,用较少的逻辑单元去控制更多的CUDA核心。于是一组SM当中容纳了192个核心的壮举就变成了现实! 今年一月份,在AMD发布HD7970时,我们曾详细的分析过AMD代号为南方群岛的“Graphics Core Next”架构。这是AMD收购ATI之后的近5年来第一次对GPU架构进行“伤筋动骨”的“手术”,而架构调整的核心内容则是为并行计算优化设计,我们发现AMD的GCN架构与NVIDIA的GPU有很多相似之处。 GK104相比GF110,整体架构没有大的改变,GPU(图形处理器集群)维持4个,显存控制器从6个64bit(384bit)减至4个64bit(256bit),总线。剩下的就是SM方面的改变了: 当时笔者曾感慨:“在流处理器部分,终于不用费劲的把AMD和NVIDIA GPU架构分开介绍了,因为GCN与SM已经没有本质区别了。剩下的只是缓存容量、流处理器簇的数量、线程调度机制的问题,双方根据实际应用自然会有不同的判断,自家的前后两代产品也会对这些数量和排列组合进行微调。AMD向NVIDIA的架构靠拢,证明了他这么多年来确实是在错误的道路上越走越远,还好浪子回头金不换,这次GCN架构简直就是!” 可以看出,NVIDIA的曲面细分单元在重度细分模式下的效率更好一些,低级别模式下HD7970并不差还略占优势,但级别越高差距就越大。根据目前DX11游戏的发展趋势来看,“曲面没必要分太细”的说法已经过时,不然AMD也就成倍的增加曲面细分性能了,未来的DX11游戏会加入高精度曲面细分引擎,届时N卡的优势会得到体现。 在AMD不断更新架构的同时,NVIDIA的DX11 GPU没有变化(GF110和GF100是一样的),显然HD7970的曲面细分性能已经超越了GTX580。这次该NVIDIA着急了。 5. LD/ST就是载入/存储单元,可以为每个线程存储运算源地址与路径,方便随时随地的从缓存或显存中存取数据; Tahiti的每个GCN阵列里面包括4个SIMD单元,每个SIMD单元内部包括16个1D标量运算单元。这样的话Cayman的SIMD引擎是16x4=64个流处理器,而Tahiti的GCN阵列是4x16=64个流处理器,总数量虽然没有变化,但架构上是截然相反的设计——Tahiti相对于Cayman来说革命性的改变就是把4D矢量运算单元改成了1D标量运算单元! 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(佛得角,非洲最南边岛国)。 GK104的缓存设计与GF100没有区别,都是一级缓存、一级纹理缓存、二级缓存这样的层级设计,而且缓存容量的配比也没有变化,但因为模块化设计的关系,总容量有所减少。 先看看AMD方面,从R600一直到Cypress,可以说一直在堆SIMD,动辄翻倍,架构没有任何变化;从Cypress到Cayman变化也不大,只是把矢量单元从5D改为4D;从Cayman到Tahiti可以说是质变,SIMD被GCN取代,4D矢量运算单元改为1D标量运算单元。 但不可忽视的是,软件预解码虽然大大节约了GPU的晶体管开销,让流处理器数量和运算能力大增,但对驱动和游戏优化提出了更高的要求,这种情况伴随着AMD度过了好多年,现在NVIDIA也要面对相同的问题了,希望他能做得更好一些。