GPU Turbo自6月份荣耀Play和荣耀9i发布会上以“吓死人不偿命”的姿态问世后,不怕死的吃瓜群众们纷纷带着瓜子饮料矿泉水小板凳围了个里三层外三层,一时间流言四起。这之中,有些低级流言我们一眼就能看出真假,而有些流言却要么利用人的心理,要么故作高深让人一些不懂,因而倒也传的似模似样。
但这些终究不可尽信,甚至可信者百里无一。今天雷锋网便与大家一起,辨析两条在玩家中传的似模似样的流言。
GPU Turbo只是华为花钱买优化?
在GPU Turbo发布伊始,余承东便曾表示,GPU Turbo技术在令GPU处理性能提高60%的同时(注意,是“同时”),还可以将GPU功耗降低30%。
Really?性能提高60%,功耗降低30%,多么惊人的提升啊!笔者表示,手里的荣耀9都快握不住了啊~
为了验证官宣的真伪,我们以Anandtech的测试来作参考,简单粗暴的判断一下。测试中搭在了麒麟970的华为Mate10跑出了37.66fps的成绩,在此基础上提升60%应该是60.26fps;而功耗是6.33W,在此基础上降低30%应该是4.43W。
因此,按照官方宣传的数据,麒麟970在GPU Turbo加持后,GPU性能应该几乎持平骁龙845,而GPU功耗则要低于骁龙845,对应的能耗比则为13.60fps/W,成功反超使用骁龙845的三星S9+,仅略低于高通QRD(Qualcomm Reference Design)参考设计平台。
这样的计算结果虽然很美好,但若以性能来看,不过只是勉强追平骁龙845而已,根本达不到“秒杀”或“完胜”的地步。而功耗若仅降至4.43W,也不足以完全避免降频(毕竟比4.43W更低的骁龙821、820、835也都降频)。
那这事情就有意思了,根据发布会上的现场演示,以及此后一票媒体铺天盖地的实测,GPU Turbo确实显著改善了麒麟970的游戏性能及功耗发热表现,事实胜于雄辩啊,测试结果比理论推算的成绩还要更好呢。
这时有人提出,华为官方公开的GPU Turbo支援游戏列表,首批优化的游戏有6款,分别是《王者荣耀》《QQ飞车》《穿越火线》《刺激战场》《全军出击》《荒野行动》。明眼人一看便知,这6款游戏里,有5个是腾讯系产品,剩下一个是网易的。要知道,腾讯系的游戏可是典型的“付费优化”,只要肯花钱,蓝绿厂的骁龙660都能秒杀其他品牌的骁龙845。
怕不是华为终于想开了,肯给腾讯塞钱了?
实际上,对游戏行业与公司稍有了解的朋友,很容易看出这种说法基本上相当于“出租车司机讲内参消息”,听着很带劲,但不符合常识和逻辑。
华为与腾讯的合作,要远比外界想象的更紧密。从2017年12月2日开始,华为和腾讯就成立了一个联合实验室,用来沟通与同步日常技术之间的升级以及优化。像是《刺激战场》这类头部产品的更新,华为还会派工程师驻场,以保障手机与游戏之间更加适配,优化双方用户业务上线后的体验。
因此,GPU Turbo只是华为花钱买优化这种流言,只需稍作了解,便可直接打上fake的标签扔进垃圾堆了。不过这也带来了新的问题,既然GPU Turbo并不是花钱买优化这么简单,那华为到底是怎么做到的?
这就要深入了解下麒麟970的硬件设计了。
根据国外网站techinsights对三星Exynos 9810处理器核心的X光透视照片,我们已经可以清楚的知道,Exynos 9810的芯片面积为10.37mm*11.47mm=118.94mm²,其中三星自主设计的猫鼬M3大核心集群面积为20.23mm²,Cortex A55小核心集群面积为1.87mm²,Mali G72 MP18 GPU集群面积为24.53mm²。
Exynos 9810的X光透视图
根据透视图上标出的核心内模块的比例,我们可以大致测算出,Exynos 9810中单个Mali G72的面积大约为1.072mm²。
而根据techinsights的研究数据,我们知道麒麟970的芯片面积为9.75mm*9.92mm=96.72mm²,其中Cortex A73大核集群面积为5.66mm²,Cortex A53小核集群面积为2.45mm²,Mali G72 MP12 GPU集群面积为18.04mm²。
麒麟970的X光透视图
同样,我们可以根据透视图上标出的核心内模块的比例大致测算出,麒麟970中单个Mali G72的面积大约为1.344mm²,比Exynos 9810中的大了0.272mm²,此外麒麟970中Mali G72核心的形状也与Exynos 9810中的有很大不同。
而根据雷锋网此前详细解读7nm制程的文章中的数据,Exynos 9810所使用的三星10nm LPP制程与麒麟970所使用的台积电10nm FF制程,在特征尺寸和晶体管密度等指标上几乎是相同的。
因此,Exynos 9810和麒麟970中单个Mali G72核心形状和面积的差异,代表着二者虽然均为Mali G72架构,但在GPU内部电路设计及投放的晶体管规模上有很大不同。
更进一步的,我们可以得出一个基本结论:华为在设计麒麟970的时候,并不只是拿Arm的公版Mali G72进行了简单的堆砌,而是进行了大刀阔斧的改良。
在GPU Turbo公布后不久,网上便有人爆料,在中国专利公布公告网上挖出了一篇名为《一种优化核函数的方法和装置》专利(授权公告号CN104866297B),并围绕这篇专利大开脑洞。
这些分析者认为,“华为在15年以后设计的麒麟芯片GPU里都设计了用于全局变量寄存器,同时为了保持专利申请到位前的应用,保留了GPU大外寄存格局”。简单来说就是,华为没有改动Mali G72核心,也没有提高Mali G72的实际性能,但是在GPU区域加了寄存,同时修改了数据总线,提高了Mali G72的函数数据读存速度和效率。(此为分析者的说法,并非笔者观点)
为此,这些分析者笑称“GPU里你也加Cache?华而有钱,为所欲为”,甚至还认为华为在GPU技术上已经吊打NVIDIA。
那么,麒麟970的Mali G72之所以变大这么多,就是因为华为在GPU里增加了高速缓存咯?
笔者个人认为,这种可能性不能说没有,但真的很小。
首先不得不纠正这些分析者的是,寄存器(Register)和Cache(高速缓存)并不是同一种东西。在存储体系中,Register的位置要比高速缓存更靠前,它的速度比高速缓存更快而容量极小,为运算单元提供着指令寄存空间(IR)、程序计数缓冲(PC)以及累加器(ACC)等多方面的服务。
高速缓存在存储体系中位于Register之后。它有两大特点:第一是快,速度仅次于Register;第二就是极其消耗晶体管,每bit(不是byte)就要消耗多达6个晶体管。
然而根据已知的消息,世界上第一颗集成高速缓存的民用级GPU是NVIDIA在2001年推出的NV20,也就是Geforce 3系列显卡,其在GPU内集成了128KB Cache用于纹理缓冲。2004年,NVIDIA又在Geforce 6800Ultra的NV40核心中增设了大小为128KB的L2 Texture Cache,之后Geforce 7800GTX的G70核心又将之增加至288K。
ATI这边则是在Radeon 1800XT的R520核心中加入了完整的L2 Texture Cache,并在Radeon 2900XT的R600核心中将其扩充至256KB。而Mali系列GPU自2008年的Mali 400开始,也早已全线加入了Cache设计。根据Arm的官方设计参数,Mali G72可以根据不同需求,自行配置128KB~2MB不等的L2 Cache。
可见,在GPU中设置高速缓存并不是什么新技术,更谈不上什么黑科技,NVIDIA、ATI和Arm等GPU设计公司早在十年甚至二十年前就已经这样做了。
上面我们已经知道了,麒麟970中单个Mali G72的面积大约为1.344mm²,Exynos 9810中单个Mali G72的面积大约为1.072mm²,而根据semiwiki的资料,三星和台积电10nm制程的晶体管密度均约为55MTr/mm²(百万晶体管每平方毫米)。
我们可以反推得知,麒麟970的Mali G72多出来的这部分面积,可容下约1500万晶体管,即便全部用来做Cache也只有300KB。相较于Arm官方设计参数中128KB~2MB可自由裁量的L2 Cache配置范围,这300KB说是无足轻重也不为过吧。
OK,关于缓存的信息推导到这里,基本可以说已经被颠覆了一半,而剩下的问题则是,万一麒麟970真的是扩充了缓存规模,对GPU的性能提升能有多大?
为了验证这一问题,我们要请出两位已经捉对厮杀了四年半之久的老冤家:索尼PlayStaion4和微软XBOXONE。
也许有的读者看到这已经明白了,没错,说的就是微软为XBOXONE处理器设计的那32MB ESRAM。
关于这两台机器的配置这里就不在赘述了,简单来说,PS4的GPU规模更大,有1152个流处理器;XBOXONE的GPU则只有768个流处理器,不过微软为其设计了一块32MB的ESRAM作为高速缓存。
XBOXONE中Jaguar APU的X光透视图
从透视图中可以看出,右侧的SRAM区域占据了整块芯片相当大的空间,比位于中部的GPU部分还要大。这32MB ESRAM可谓是吞晶巨兽,消耗了多达16亿晶体管,要知道XBOXONE的整块APU也不过50亿晶体管而已,单单ESRAM就吃掉了几乎三分之一。
而和PS4对比的结果也无需多言, XBOXONE相对PS4仍存在普遍接近30%的性能差异,与二者的GPU基础规模差距基本相当,足以证明这32MB ESRAM对GPU性能的弥补微乎其微。
实际上,从技术角度来说,Cache在整个GPU运算体系中多用作应对寄存器缓冲溢出使用。它的速度和延迟相对于寄存器来说差了不少,但可以在编程环境处理得当的前提下发挥很好的延迟掩盖作用。除此之外,Cache便只用作衔接GPU和显存的作用了。
在雷锋网此前分析Arm全新Mali G76的时候曾经提到,Mali G71/G72的Bifrost架构采用了4宽度线程粒度,相比竞争对手架构的线程粒度(16~32宽度)要小很多。通常来讲,线程粒度反映了架构在资源/面积密度和性能之间的平衡点,较大的线程粒度可节省控制逻辑单元数量(单个32宽度线程粒度只需1个控制逻辑单元,而8个4宽度线程粒度需要8个控制逻辑单元)。
Mali G72 4宽度线程粒度的设计,控制逻辑单元与ALU的比率太高了,浪费了大量硬件规模,实际游戏中几乎用不到这么小的尺寸。随着技术和应用的发展以及移动GPU在VR和高画质游戏领域的压力不断增加,Quad结构的运算效率已无法满足需求。
从Anandtech的测试中可以看出,Exynos 9810的GPU虽然能耗比表现不错,但却是以巨大的芯片面积换来的。那18核Mali G72的面积比高通Adreno 630大130%(Adreno 630面积为10.69mm²),性能却还不如Adreno 630。
与三星的狂堆核心数相比,麒麟970只使用了中等数量的核心,然后通过拉高核心频率来榨取性能。不过每种核心架构在某一工艺下,都有一个能耗比最佳的频率区间,越过这个区间后,继续拉高频需要付出极大的功耗代价。麒麟970的Mali G72 MP12频率为746MHz,功耗上升非常明显,能耗比仅略高于使用Mali G71的Exynos 8895。
说到底,性能不济这口黑锅还是得甩给Arm的Mali G72架构设计不行,从根本上便无法与高通Adreno这样的高效架构抗衡。这不是简单的往GPU里多塞几百KB高速缓存就能解决的问题。
而微软为XBOXONE增加ESRAM的本意也不是为了弥补与PS4之间巨大的GPU规模差距,而是在设计之初由于GDDR5颗粒价格居高不下,微软只能使用DDR3搭建存储系统,其68GB/s带宽相对于PS4的 176GB/s相去甚远,因而不得已才为其增设了一块带宽高达216GB/s的ESRAM用作衔接。在GDDR5的价格下降后,微软在去年发售的增强版XBOXONE X主机上,已将ESRAM请出了寸土寸金的芯片。
因此,GPU Turbo是依靠在GPU中增设高速缓存来提升性能的说法,到此可以彻底宣告终结了。
遗憾的是,我们凭着数码爱好者仅有的浅薄知识分析了这么久,也只能攻破以上两个流言,依然没能石锤GPU Turbo到底是什么。毕竟这是华为的独门黑科技,就连一向不服同行的罗永浩也交口称赞,其技术水平和难度可见一斑,真能被我们五六千字就扒个干净才是怪事了。
不过在华为此前的一次EMUI公开课上,华为消费者业务软件工程部总裁王成录博士亲自出面解答了GPU Turbo技术的一些信息,为大家揭开了GPU Turbo神秘面纱的一角。
大家都知道游戏画面是一帧一帧渲染出来的,相邻的两帧往往有很多相同的地方,而GPU Turbo技术将会只渲染画面出现变化的地方。也就是说,如果两帧之间可能有80%的画面是一致的,GPU Turbo就会让芯片只渲染变化的20%,从而减少GPU 80%工作量。
渲染工作量的减少大幅提升了下一帧的帧数延迟,用户眼球感受到画面掉帧需要16.7毫秒的时间,华为GPU Turbo可以把下一帧的渲染时间控制在7毫秒以内,最快可以在短短3毫秒以内就完成下一帧的渲染工作。
合理调度GPU资源,节省GPU性能到游戏最需要的地方,这才是GPU Turbo让游戏满帧运行的秘密所在。
当然王成录博士只是对于GPU Turbo技术工作原理做了一个简要解答,至于GPU Turbo是如何判定并计算两帧画面之间的差别,王成录博士并未做解答,或许这就是隐藏在Mali G72多出来那0.272mm²中的商业机密吧。
GPU Turbo从立项到研发成功耗费了5年多的时间,王成录博士表示华为对此项技术非常自信,它的技术门槛非常高,其他家不太可能在短时间内跟进。此前国外XDA论坛上出现的GPU Turbo破解包也很快被证明是一场恶作剧而已,被国内数码爱好者戏称为“装X不讲基本法”。
看来,GPU Turbo的一切,还需华为亲自公开。