華為對(duì)GPU做了什么?GPU Turbo 剖析
GPU Turbo自6月份榮耀Play和榮耀9i發(fā)布會(huì)上以“嚇?biāo)廊瞬粌斆?rdquo;的姿態(tài)問世后,不怕死的吃瓜群眾們紛紛帶著瓜子飲料礦泉水小板凳圍了個(gè)里三層外三層,一時(shí)間流言四起。這之中,有些低級(jí)流言我們一眼就能看出真假,而有些流言卻要么利用人的心理,要么故作高深讓人一些不懂,因而倒也傳的似模似樣。
但這些終究不可盡信,甚至可信者百里無一。今天筆者便與大家一起,辨析兩條在玩家中傳的似模似樣的流言。
GPU Turbo只是華為花錢買優(yōu)化?
在GPU Turbo發(fā)布伊始,余承東便曾表示,GPU Turbo技術(shù)在令GPU處理性能提高60%的同時(shí)(注意,是“同時(shí)”),還可以將GPU功耗降低30%。
Really?性能提高60%,功耗降低30%,多么驚人的提升啊!筆者表示,手里的榮耀9都快握不住了啊~
為了驗(yàn)證官宣的真?zhèn)危覀円訟nandtech的測(cè)試來作參考,簡(jiǎn)單粗暴的判斷一下。測(cè)試中搭在了麒麟970的華為Mate10跑出了37.66fps的成績(jī),在此基礎(chǔ)上提升60%應(yīng)該是60.26fps;而功耗是6.33W,在此基礎(chǔ)上降低30%應(yīng)該是4.43W。
因此,按照官方宣傳的數(shù)據(jù),麒麟970在GPU Turbo加持后,GPU性能應(yīng)該幾乎持平驍龍845,而GPU功耗則要低于驍龍845,對(duì)應(yīng)的能耗比則為13.60fps/W,成功反超使用驍龍845的三星S9+,僅略低于高通QRD(Qualcomm Reference Design)參考設(shè)計(jì)平臺(tái)。
這樣的計(jì)算結(jié)果雖然很美好,但若以性能來看,不過只是勉強(qiáng)追平驍龍845而已,根本達(dá)不到“秒殺”或“完勝”的地步。而功耗若僅降至4.43W,也不足以完全避免降頻(畢竟比4.43W更低的驍龍821、820、835也都降頻)。
那這事情就有意思了,根據(jù)發(fā)布會(huì)上的現(xiàn)場(chǎng)演示,以及此后一票媒體鋪天蓋地的實(shí)測(cè),GPU Turbo確實(shí)顯著改善了麒麟970的游戲性能及功耗發(fā)熱表現(xiàn),事實(shí)勝于雄辯啊,測(cè)試結(jié)果比理論推算的成績(jī)還要更好呢。
這時(shí)有人提出,華為官方公開的GPU Turbo支援游戲列表,首批優(yōu)化的游戲有6款,分別是《王者榮耀》《QQ飛車》《穿越火線》《刺激戰(zhàn)場(chǎng)》《全軍出擊》《荒野行動(dòng)》。明眼人一看便知,這6款游戲里,有5個(gè)是騰訊系產(chǎn)品,剩下一個(gè)是網(wǎng)易的。要知道,騰訊系的游戲可是典型的“付費(fèi)優(yōu)化”,只要肯花錢,藍(lán)綠廠的驍龍660都能秒殺其他品牌的驍龍845。
怕不是華為終于想開了,肯給騰訊塞錢了?
實(shí)際上,對(duì)游戲行業(yè)與公司稍有了解的朋友,很容易看出這種說法基本上相當(dāng)于“出租車司機(jī)講內(nèi)參消息”,聽著很帶勁,但不符合常識(shí)和邏輯。
華為與騰訊的合作,要遠(yuǎn)比外界想象的更緊密。從2017年12月2日開始,華為和騰訊就成立了一個(gè)聯(lián)合實(shí)驗(yàn)室,用來溝通與同步日常技術(shù)之間的升級(jí)以及優(yōu)化。像是《刺激戰(zhàn)場(chǎng)》這類頭部產(chǎn)品的更新,華為還會(huì)派工程師駐場(chǎng),以保障手機(jī)與游戲之間更加適配,優(yōu)化雙方用戶業(yè)務(wù)上線后的體驗(yàn)。
因此,GPU Turbo只是華為花錢買優(yōu)化這種流言,只需稍作了解,便可直接打上fake的標(biāo)簽扔進(jìn)垃圾堆了。不過這也帶來了新的問題,既然GPU Turbo并不是花錢買優(yōu)化這么簡(jiǎn)單,那華為到底是怎么做到的?
這就要深入了解下麒麟970的硬件設(shè)計(jì)了。
華為對(duì)GPU做了什么?
根據(jù)國(guó)外網(wǎng)站techinsights對(duì)三星Exynos 9810處理器核心的X光透視照片,我們已經(jīng)可以清楚的知道,Exynos 9810的芯片面積為10.37mm*11.47mm=118.94mm²,其中三星自主設(shè)計(jì)的貓鼬M3大核心集群面積為20.23mm²,Cortex A55小核心集群面積為1.87mm²,Mali G72 MP18 GPU集群面積為24.53mm²。
根據(jù)透視圖上標(biāo)出的核心內(nèi)模塊的比例,我們可以大致測(cè)算出,Exynos 9810中單個(gè)Mali G72的面積大約為1.072mm²。
而根據(jù)techinsights的研究數(shù)據(jù),我們知道麒麟970的芯片面積為9.75mm*9.92mm=96.72mm²,其中Cortex A73大核集群面積為5.66mm²,Cortex A53小核集群面積為2.45mm²,Mali G72 MP12 GPU集群面積為18.04mm²。
同樣,我們可以根據(jù)透視圖上標(biāo)出的核心內(nèi)模塊的比例大致測(cè)算出,麒麟970中單個(gè)Mali G72的面積大約為1.344mm²,比Exynos 9810中的大了0.272mm²,此外麒麟970中Mali G72核心的形狀也與Exynos 9810中的有很大不同。
而根據(jù)雷鋒網(wǎng)此前詳細(xì)解讀7nm制程的文章中的數(shù)據(jù),Exynos 9810所使用的三星10nm LPP制程與麒麟970所使用的臺(tái)積電10nm FF制程,在特征尺寸和晶體管密度等指標(biāo)上幾乎是相同的。
因此,Exynos 9810和麒麟970中單個(gè)Mali G72核心形狀和面積的差異,代表著二者雖然均為Mali G72架構(gòu),但在GPU內(nèi)部電路設(shè)計(jì)及投放的晶體管規(guī)模上有很大不同。
更進(jìn)一步的,我們可以得出一個(gè)基本結(jié)論:華為在設(shè)計(jì)麒麟970的時(shí)候,并不只是拿Arm的公版Mali G72進(jìn)行了簡(jiǎn)單的堆砌,而是進(jìn)行了大刀闊斧的改良。
增加的面積,是緩存?
在GPU Turbo公布后不久,網(wǎng)上便有人爆料,在中國(guó)專利公布公告網(wǎng)上挖出了一篇名為《一種優(yōu)化核函數(shù)的方法和裝置》專利(授權(quán)公告號(hào)CN104866297B),并圍繞這篇專利大開腦洞。
這些分析者認(rèn)為,“華為在15年以后設(shè)計(jì)的麒麟芯片GPU里都設(shè)計(jì)了用于全局變量寄存器,同時(shí)為了保持專利申請(qǐng)到位前的應(yīng)用,保留了GPU大外寄存格局”。簡(jiǎn)單來說就是,華為沒有改動(dòng)Mali G72核心,也沒有提高M(jìn)ali G72的實(shí)際性能,但是在GPU區(qū)域加了寄存,同時(shí)修改了數(shù)據(jù)總線,提高了Mali G72的函數(shù)數(shù)據(jù)讀存速度和效率。(此為分析者的說法,并非筆者觀點(diǎn))
為此,這些分析者笑稱“GPU里你也加Cache?華而有錢,為所欲為”,甚至還認(rèn)為華為在GPU技術(shù)上已經(jīng)吊打NVIDIA。
那么,麒麟970的Mali G72之所以變大這么多,就是因?yàn)槿A為在GPU里增加了高速緩存咯?
筆者個(gè)人認(rèn)為,這種可能性不能說沒有,但真的很小。
首先不得不糾正這些分析者的是,寄存器(Register)和Cache(高速緩存)并不是同一種東西。在存儲(chǔ)體系中,Register的位置要比高速緩存更靠前,它的速度比高速緩存更快而容量極小,為運(yùn)算單元提供著指令寄存空間(IR)、程序計(jì)數(shù)緩沖(PC)以及累加器(ACC)等多方面的服務(wù)。
高速緩存在存儲(chǔ)體系中位于Register之后。它有兩大特點(diǎn):第一是快,速度僅次于Register;第二就是極其消耗晶體管,每bit(不是byte)就要消耗多達(dá)6個(gè)晶體管。
然而根據(jù)已知的消息,世界上第一顆集成高速緩存的民用級(jí)GPU是NVIDIA在2001年推出的NV20,也就是Geforce 3系列顯卡,其在GPU內(nèi)集成了128KB Cache用于紋理緩沖。2004年,NVIDIA又在Geforce 6800Ultra的NV40核心中增設(shè)了大小為128KB的L2 Texture Cache,之后Geforce 7800GTX的G70核心又將之增加至288KB。
ATI這邊則是在Radeon 1800XT的R520核心中加入了完整的L2 Texture Cache,并在Radeon 2900XT的R600核心中將其擴(kuò)充至256KB。而Mali系列GPU自2008年的Mali 400開始,也早已全線加入了Cache設(shè)計(jì)。根據(jù)Arm的官方設(shè)計(jì)參數(shù),Mali G72可以根據(jù)不同需求,自行配置128KB~2MB不等的L2 Cache。
可見,在GPU中設(shè)置高速緩存并不是什么新技術(shù),更談不上什么黑科技,NVIDIA、ATI和Arm等GPU設(shè)計(jì)公司早在十年甚至二十年前就已經(jīng)這樣做了。
緩存對(duì)GPU性能提升有多大?
上面我們已經(jīng)知道了,麒麟970中單個(gè)Mali G72的面積大約為1.344mm²,Exynos 9810中單個(gè)Mali G72的面積大約為1.072mm²,而根據(jù)semiwiki的資料,三星和臺(tái)積電10nm制程的晶體管密度均約為55MTr/mm²(百萬晶體管每平方毫米)。
我們可以反推得知,麒麟970的Mali G72多出來的這部分面積,可容下約1500萬晶體管,即便全部用來做Cache也只有300KB。相較于Arm官方設(shè)計(jì)參數(shù)中128KB~2MB可自由裁量的L2 Cache配置范圍,這300KB說是無足輕重也不為過吧。
OK,關(guān)于緩存的信息推導(dǎo)到這里,基本可以說已經(jīng)被顛覆了一半,而剩下的問題則是,萬一麒麟970真的是擴(kuò)充了緩存規(guī)模,對(duì)GPU的性能提升能有多大?
為了驗(yàn)證這一問題,我們要請(qǐng)出兩位已經(jīng)捉對(duì)廝殺了四年半之久的老冤家:索尼PlayStaion4和微軟XBOXONE。
也許有的讀者看到這已經(jīng)明白了,沒錯(cuò),說的就是微軟為XBOXONE處理器設(shè)計(jì)的那32MB ESRAM。
關(guān)于這兩臺(tái)機(jī)器的配置這里就不在贅述了,簡(jiǎn)單來說,PS4的GPU規(guī)模更大,有1152個(gè)流處理器;XBOXONE的GPU則只有768個(gè)流處理器,不過微軟為其設(shè)計(jì)了一塊32MB的ESRAM作為高速緩存。
從透視圖中可以看出,右側(cè)的SRAM區(qū)域占據(jù)了整塊芯片相當(dāng)大的空間,比位于中部的GPU部分還要大。這32MB ESRAM可謂是吞晶巨獸,消耗了多達(dá)16億晶體管,要知道XBOXONE的整塊APU也不過50億晶體管而已,單單ESRAM就吃掉了幾乎三分之一。
而和PS4對(duì)比的結(jié)果也無需多言, XBOXONE相對(duì)PS4仍存在普遍接近30%的性能差異,與二者的GPU基礎(chǔ)規(guī)模差距基本相當(dāng),足以證明這32MB ESRAM對(duì)GPU性能的彌補(bǔ)微乎其微。
實(shí)際上,從技術(shù)角度來說,Cache在整個(gè)GPU運(yùn)算體系中多用作應(yīng)對(duì)寄存器緩沖溢出使用。它的速度和延遲相對(duì)于寄存器來說差了不少,但可以在編程環(huán)境處理得當(dāng)?shù)那疤嵯掳l(fā)揮很好的延遲掩蓋作用。除此之外,Cache便只用作銜接GPU和顯存的作用了。
Mali G72,扶不起的阿斗
在雷鋒網(wǎng)此前分析Arm全新Mali G76的時(shí)候曾經(jīng)提到,Mali G71/G72的Bifrost架構(gòu)采用了4寬度線程粒度,相比競(jìng)爭(zhēng)對(duì)手架構(gòu)的線程粒度(16~32寬度)要小很多。通常來講,線程粒度反映了架構(gòu)在資源/面積密度和性能之間的平衡點(diǎn),較大的線程粒度可節(jié)省控制邏輯單元數(shù)量(單個(gè)32寬度線程粒度只需1個(gè)控制邏輯單元,而8個(gè)4寬度線程粒度需要8個(gè)控制邏輯單元)。
Mali G72 4寬度線程粒度的設(shè)計(jì),控制邏輯單元與ALU的比率太高了,浪費(fèi)了大量硬件規(guī)模,實(shí)際游戲中幾乎用不到這么小的尺寸。隨著技術(shù)和應(yīng)用的發(fā)展以及移動(dòng)GPU在VR和高畫質(zhì)游戲領(lǐng)域的壓力不斷增加,Quad結(jié)構(gòu)的運(yùn)算效率已無法滿足需求。
從Anandtech的測(cè)試中可以看出,Exynos 9810的GPU雖然能耗比表現(xiàn)不錯(cuò),但卻是以巨大的芯片面積換來的。那18核Mali G72的面積比高通Adreno 630大130%(Adreno 630面積為10.69mm²),性能卻還不如Adreno 630。
與三星的狂堆核心數(shù)相比,麒麟970只使用了中等數(shù)量的核心,然后通過拉高核心頻率來榨取性能。不過每種核心架構(gòu)在某一工藝下,都有一個(gè)能耗比最佳的頻率區(qū)間,越過這個(gè)區(qū)間后,繼續(xù)拉高頻需要付出極大的功耗代價(jià)。麒麟970的Mali G72 MP12頻率為746MHz,功耗上升非常明顯,能耗比僅略高于使用Mali G71的Exynos 8895。
說到底,性能不濟(jì)這口黑鍋還是得甩給Arm的Mali G72架構(gòu)設(shè)計(jì)不行,從根本上便無法與高通Adreno這樣的高效架構(gòu)抗衡。這不是簡(jiǎn)單的往GPU里多塞幾百KB高速緩存就能解決的問題。
而微軟為XBOXONE增加ESRAM的本意也不是為了彌補(bǔ)與PS4之間巨大的GPU規(guī)模差距,而是在設(shè)計(jì)之初由于GDDR5顆粒價(jià)格居高不下,微軟只能使用DDR3搭建存儲(chǔ)系統(tǒng),其68GB/s帶寬相對(duì)于PS4的 176GB/s相去甚遠(yuǎn),因而不得已才為其增設(shè)了一塊帶寬高達(dá)216GB/s的ESRAM用作銜接。在GDDR5的價(jià)格下降后,微軟在去年發(fā)售的增強(qiáng)版XBOXONE X主機(jī)上,已將ESRAM請(qǐng)出了寸土寸金的芯片。
因此,GPU Turbo是依靠在GPU中增設(shè)高速緩存來提升性能的說法,到此可以徹底宣告終結(jié)了。
一切還需華為親自公開
遺憾的是,我們憑著數(shù)碼愛好者僅有的淺薄知識(shí)分析了這么久,也只能攻破以上兩個(gè)流言,依然沒能石錘GPU Turbo到底是什么。畢竟這是華為的獨(dú)門黑科技,就連一向不服同行的羅永浩也交口稱贊,其技術(shù)水平和難度可見一斑,真能被我們五六千字就扒個(gè)干凈才是怪事了。
不過在華為此前的一次EMUI公開課上,華為消費(fèi)者業(yè)務(wù)軟件工程部總裁王成錄博士親自出面解答了GPU Turbo技術(shù)的一些信息,為大家揭開了GPU Turbo神秘面紗的一角。
大家都知道游戲畫面是一幀一幀渲染出來的,相鄰的兩幀往往有很多相同的地方,而GPU Turbo技術(shù)將會(huì)只渲染畫面出現(xiàn)變化的地方。也就是說,如果兩幀之間可能有80%的畫面是一致的,GPU Turbo就會(huì)讓芯片只渲染變化的20%,從而減少GPU 80%工作量。
渲染工作量的減少大幅提升了下一幀的幀數(shù)延遲,用戶眼球感受到畫面掉幀需要16.7毫秒的時(shí)間,華為GPU Turbo可以把下一幀的渲染時(shí)間控制在7毫秒以內(nèi),最快可以在短短3毫秒以內(nèi)就完成下一幀的渲染工作。
合理調(diào)度GPU資源,節(jié)省GPU性能到游戲最需要的地方,這才是GPU Turbo讓游戲滿幀運(yùn)行的秘密所在。
當(dāng)然王成錄博士只是對(duì)于GPU Turbo技術(shù)工作原理做了一個(gè)簡(jiǎn)要解答,至于GPU Turbo是如何判定并計(jì)算兩幀畫面之間的差別,王成錄博士并未做解答,或許這就是隱藏在Mali G72多出來那0.272mm²中的商業(yè)機(jī)密吧。
GPU Turbo從立項(xiàng)到研發(fā)成功耗費(fèi)了5年多的時(shí)間,王成錄博士表示華為對(duì)此項(xiàng)技術(shù)非常自信,它的技術(shù)門檻非常高,其他家不太可能在短時(shí)間內(nèi)跟進(jìn)。此前國(guó)外XDA論壇上出現(xiàn)的GPU Turbo破解包也很快被證明是一場(chǎng)惡作劇而已,被國(guó)內(nèi)數(shù)碼愛好者戲稱為“裝X不講基本法”。
看來,GPU Turbo的一切,還需華為親自公開。