GPU Turbo自6月份榮耀Play和榮耀9i發(fā)布會上以“嚇死人不償命”的姿態(tài)問世后,不怕死的吃瓜群眾們紛紛帶著瓜子飲料礦泉水小板凳圍了個里三層外三層,一時間流言四起。這之中,有些低級流言我們一眼就能看出真假,而有些流言卻要么利用人的心理,要么故作高深讓人一些不懂,因而倒也傳的似模似樣。
但這些終究不可盡信,甚至可信者百里無一。今天筆者便與大家一起,辨析兩條在玩家中傳的似模似樣的流言。
GPU Turbo只是華為花錢買優(yōu)化?
在GPU Turbo發(fā)布伊始,余承東便曾表示,GPU Turbo技術在令GPU處理性能提高60%的同時(注意,是“同時”),還可以將GPU功耗降低30%。
Really?性能提高60%,功耗降低30%,多么驚人的提升啊!筆者表示,手里的榮耀9都快握不住了啊~
為了驗證官宣的真?zhèn)?,我們以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也都降頻)。
那這事情就有意思了,根據發(fā)布會上的現場演示,以及此后一票媒體鋪天蓋地的實測,GPU Turbo確實顯著改善了麒麟970的游戲性能及功耗發(fā)熱表現,事實勝于雄辯啊,測試結果比理論推算的成績還要更好呢。
這時有人提出,華為官方公開的GPU Turbo支援游戲列表,首批優(yōu)化的游戲有6款,分別是《王者榮耀》《QQ飛車》《穿越火線》《刺激戰(zhàn)場》《全軍出擊》《荒野行動》。明眼人一看便知,這6款游戲里,有5個是騰訊系產品,剩下一個是網易的。要知道,騰訊系的游戲可是典型的“付費優(yōu)化”,只要肯花錢,藍綠廠的驍龍660都能秒殺其他品牌的驍龍845。
怕不是華為終于想開了,肯給騰訊塞錢了?
實際上,對游戲行業(yè)與公司稍有了解的朋友,很容易看出這種說法基本上相當于“出租車司機講內參消息”,聽著很帶勁,但不符合常識和邏輯。
華為與騰訊的合作,要遠比外界想象的更緊密。從2017年12月2日開始,華為和騰訊就成立了一個聯合實驗室,用來溝通與同步日常技術之間的升級以及優(yōu)化。像是《刺激戰(zhàn)場》這類頭部產品的更新,華為還會派工程師駐場,以保障手機與游戲之間更加適配,優(yōu)化雙方用戶業(yè)務上線后的體驗。
因此,GPU Turbo只是華為花錢買優(yōu)化這種流言,只需稍作了解,便可直接打上fake的標簽扔進垃圾堆了。不過這也帶來了新的問題,既然GPU Turbo并不是花錢買優(yōu)化這么簡單,那華為到底是怎么做到的?
這就要深入了解下麒麟970的硬件設計了。
華為對GPU做了什么?
根據國外網站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中單個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中單個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內部電路設計及投放的晶體管規(guī)模上有很大不同。
更進一步的,我們可以得出一個基本結論:華為在設計麒麟970的時候,并不只是拿Arm的公版Mali G72進行了簡單的堆砌,而是進行了大刀闊斧的改良。
增加的面積,是緩存?
在GPU Turbo公布后不久,網上便有人爆料,在中國專利公布公告網上挖出了一篇名為《一種優(yōu)化核函數的方法和裝置》專利(授權公告號CN104866297B),并圍繞這篇專利大開腦洞。
這些分析者認為,“華為在15年以后設計的麒麟芯片GPU里都設計了用于全局變量寄存器,同時為了保持專利申請到位前的應用,保留了GPU大外寄存格局”。簡單來說就是,華為沒有改動Mali G72核心,也沒有提高Mali G72的實際性能,但是在GPU區(qū)域加了寄存,同時修改了數據總線,提高了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核心又將之增加至288KB。
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設計公司早在十年甚至二十年前就已經這樣做了。
緩存對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真的是擴充了緩存規(guī)模,對GPU的性能提升能有多大?
為了驗證這一問題,我們要請出兩位已經捉對廝殺了四年半之久的老冤家:索尼PlayStaion4和微軟XBOXONE。
也許有的讀者看到這已經明白了,沒錯,說的就是微軟為XBOXONE處理器設計的那32MB ESRAM。
關于這兩臺機器的配置這里就不在贅述了,簡單來說,PS4的GPU規(guī)模更大,有1152個流處理器;XBOXONE的GPU則只有768個流處理器,不過微軟為其設計了一塊32MB的ESRAM作為高速緩存。
從透視圖中可以看出,右側的SRAM區(qū)域占據了整塊芯片相當大的空間,比位于中部的GPU部分還要大。這32MB ESRAM可謂是吞晶巨獸,消耗了多達16億晶體管,要知道XBOXONE的整塊APU也不過50億晶體管而已,單單ESRAM就吃掉了幾乎三分之一。
而和PS4對比的結果也無需多言, XBOXONE相對PS4仍存在普遍接近30%的性能差異,與二者的GPU基礎規(guī)模差距基本相當,足以證明這32MB ESRAM對GPU性能的彌補微乎其微。
實際上,從技術角度來說,Cache在整個GPU運算體系中多用作應對寄存器緩沖溢出使用。它的速度和延遲相對于寄存器來說差了不少,但可以在編程環(huán)境處理得當的前提下發(fā)揮很好的延遲掩蓋作用。除此之外,Cache便只用作銜接GPU和顯存的作用了。
Mali G72,扶不起的阿斗
在雷鋒網此前分析Arm全新Mali G76的時候曾經提到,Mali G71/G72的Bifrost架構采用了4寬度線程粒度,相比競爭對手架構的線程粒度(16~32寬度)要小很多。通常來講,線程粒度反映了架構在資源/面積密度和性能之間的平衡點,較大的線程粒度可節(jié)省控制邏輯單元數量(單個32寬度線程粒度只需1個控制邏輯單元,而8個4寬度線程粒度需要8個控制邏輯單元)。
Mali G72 4寬度線程粒度的設計,控制邏輯單元與ALU的比率太高了,浪費了大量硬件規(guī)模,實際游戲中幾乎用不到這么小的尺寸。隨著技術和應用的發(fā)展以及移動GPU在VR和高畫質游戲領域的壓力不斷增加,Quad結構的運算效率已無法滿足需求。
從Anandtech的測試中可以看出,Exynos 9810的GPU雖然能耗比表現不錯,但卻是以巨大的芯片面積換來的。那18核Mali G72的面積比高通Adreno 630大130%(Adreno 630面積為10.69mm²),性能卻還不如Adreno 630。
與三星的狂堆核心數相比,麒麟970只使用了中等數量的核心,然后通過拉高核心頻率來榨取性能。不過每種核心架構在某一工藝下,都有一個能耗比最佳的頻率區(qū)間,越過這個區(qū)間后,繼續(xù)拉高頻需要付出極大的功耗代價。麒麟970的Mali G72 MP12頻率為746MHz,功耗上升非常明顯,能耗比僅略高于使用Mali G71的Exynos 8895。
說到底,性能不濟這口黑鍋還是得甩給Arm的Mali G72架構設計不行,從根本上便無法與高通Adreno這樣的高效架構抗衡。這不是簡單的往GPU里多塞幾百KB高速緩存就能解決的問題。
而微軟為XBOXONE增加ESRAM的本意也不是為了彌補與PS4之間巨大的GPU規(guī)模差距,而是在設計之初由于GDDR5顆粒價格居高不下,微軟只能使用DDR3搭建存儲系統(tǒng),其68GB/s帶寬相對于PS4的 176GB/s相去甚遠,因而不得已才為其增設了一塊帶寬高達216GB/s的ESRAM用作銜接。在GDDR5的價格下降后,微軟在去年發(fā)售的增強版XBOXONE X主機上,已將ESRAM請出了寸土寸金的芯片。
因此,GPU Turbo是依靠在GPU中增設高速緩存來提升性能的說法,到此可以徹底宣告終結了。
一切還需華為親自公開
遺憾的是,我們憑著數碼愛好者僅有的淺薄知識分析了這么久,也只能攻破以上兩個流言,依然沒能石錘GPU Turbo到底是什么。畢竟這是華為的獨門黑科技,就連一向不服同行的羅永浩也交口稱贊,其技術水平和難度可見一斑,真能被我們五六千字就扒個干凈才是怪事了。
不過在華為此前的一次EMUI公開課上,華為消費者業(yè)務軟件工程部總裁王成錄博士親自出面解答了GPU Turbo技術的一些信息,為大家揭開了GPU Turbo神秘面紗的一角。
大家都知道游戲畫面是一幀一幀渲染出來的,相鄰的兩幀往往有很多相同的地方,而GPU Turbo技術將會只渲染畫面出現變化的地方。也就是說,如果兩幀之間可能有80%的畫面是一致的,GPU Turbo就會讓芯片只渲染變化的20%,從而減少GPU 80%工作量。
渲染工作量的減少大幅提升了下一幀的幀數延遲,用戶眼球感受到畫面掉幀需要16.7毫秒的時間,華為GPU Turbo可以把下一幀的渲染時間控制在7毫秒以內,最快可以在短短3毫秒以內就完成下一幀的渲染工作。
合理調度GPU資源,節(jié)省GPU性能到游戲最需要的地方,這才是GPU Turbo讓游戲滿幀運行的秘密所在。
當然王成錄博士只是對于GPU Turbo技術工作原理做了一個簡要解答,至于GPU Turbo是如何判定并計算兩幀畫面之間的差別,王成錄博士并未做解答,或許這就是隱藏在Mali G72多出來那0.272mm²中的商業(yè)機密吧。
GPU Turbo從立項到研發(fā)成功耗費了5年多的時間,王成錄博士表示華為對此項技術非常自信,它的技術門檻非常高,其他家不太可能在短時間內跟進。此前國外XDA論壇上出現的GPU Turbo破解包也很快被證明是一場惡作劇而已,被國內數碼愛好者戲稱為“裝X不講基本法”。
看來,GPU Turbo的一切,還需華為親自公開。