iPhone 和 iPad 使用的 GPU一直都是 Imagination Technologies 供應(yīng)的 PowerVR GPU,蘋果甚至擁有該供應(yīng)商 10% 的股份,為后者創(chuàng)造了大約 30% 的營(yíng)收。曾經(jīng)蘋果在移動(dòng)設(shè)備上使用的 ARM CPU,不過(guò)他們現(xiàn)在都已經(jīng)自己設(shè)計(jì)移動(dòng)處理器,因此行業(yè)認(rèn)為蘋果已經(jīng)逐漸從 PowerVR 授權(quán)轉(zhuǎn)變?yōu)樵O(shè)計(jì)定制 GPU。在 iPhone 6 的 A8 處理器中我們可以看到蘋果的定制 GPU,iPhone 6s 和 iPhone 7 中 A9 和 A10 Fusion 處理器也使用了定制 GPU。
iPhone 和 iPad 中使用的現(xiàn)代 GPU 需要三個(gè)重要組成部分協(xié)調(diào)工作才能渲染一個(gè)場(chǎng)景。第一個(gè)是固定功能圖形硬件,其主要負(fù)責(zé)的任務(wù)包括處理 API 指令、三角光柵以及光柵輸出。第二個(gè)是渲染核心,它相當(dāng)于 GPU 的心臟,執(zhí)行可編程著色(Programmable Shaders)任務(wù)。最后一個(gè)是顯卡驅(qū)動(dòng)器——在 CPU 上運(yùn)行的軟件,它將所有東西緊密結(jié)合在一起,協(xié)調(diào) GPU 上的活動(dòng)。驅(qū)動(dòng)器將寫在 Metal 或 OpenGL ES API 中的圖形應(yīng)用轉(zhuǎn)化成一系列指令,以便固定功能圖形硬件和執(zhí)行可編程著色在渲染核心上執(zhí)行這些指令。驅(qū)動(dòng)器上最大的部件就是編譯器,它能夠生成可在渲染核心上運(yùn)行的機(jī)器代碼。
以前蘋果使用的固定功能圖形硬件、渲染核心和驅(qū)動(dòng)器均是由 Imagination Technologies 授權(quán)的。但是過(guò)去 6-7 年蘋果公司從 AMD、英特爾、谷歌和英偉達(dá)等公司挖走了大量顯卡工程師和驅(qū)動(dòng)器、編譯器工程師,以設(shè)計(jì)定制 GPU。比如此前有消息稱今年早些時(shí)候蘋果公司從 Imagination Technologies 公司挖走了大約 25 名工程師。蘋果的 GPU 顯然還在使用 PowerVR 的部分固定功能圖形硬件。但是從目前曝光的各種整合看來(lái),蘋果已經(jīng)在 GPU 中使用他們自己開(kāi)發(fā)的可編程著色核心,它的效率更高、性能也更強(qiáng)。
如果想要充分發(fā)揮定制渲染核心的優(yōu)勢(shì),那么蘋果必須自己開(kāi)發(fā)驅(qū)動(dòng)器和編譯器,以生成適合其架構(gòu)的代碼。結(jié)果就是蘋果的 GPU 和 PowerVR 會(huì)有一些相似點(diǎn)。不過(guò)它的設(shè)計(jì)非常獨(dú)特,是世界級(jí)的設(shè)計(jì),性能和功率都很強(qiáng)。從移動(dòng)顯卡跑分來(lái)看,A9 處理器可以說(shuō)幾乎每個(gè)方面都拿到了最高分,而 A10 Fusion 在這個(gè)基礎(chǔ)上又更快,為 40-50%。
到目前蘋果 GPU 架構(gòu)都沒(méi)有比較詳盡的文字記錄,為了讓開(kāi)發(fā)者可以充分利用這個(gè) GPU,他們需要了解如何針對(duì) Metal 和 OpenGL 編譯器來(lái)編寫著色器程序。在 2016 年 WWDC 大會(huì)上,蘋果公司工程師進(jìn)行了一場(chǎng)名為“Advanced Metal Shader Optimization”的演示,其中就有關(guān)于最新定制 GPU 的詳細(xì)調(diào)優(yōu)指南以及架構(gòu)細(xì)節(jié)。PowerVR Series 6 GPU 架構(gòu)的相關(guān)文字介紹也很少,不過(guò) Imagination Technologies 公開(kāi)過(guò)一些基本的編譯器和優(yōu)化指南。通過(guò)對(duì)比這兩者我們可以發(fā)現(xiàn)它們之間的差別很大。特別是蘋果的寄存器文件和數(shù)據(jù)轉(zhuǎn)換功能更適于提升性能和效能,也是一個(gè)更簡(jiǎn)單的編譯器目標(biāo)。
蘋果用更小的寄存器來(lái)提升性能和效能
OpenGL ES 移動(dòng)顯卡 API 和蘋果的 Metal API 支持圖像數(shù)據(jù)和計(jì)算的 16 位半精度浮點(diǎn)格式,與 32 位單精度計(jì)算相比,它能耗更少。在某些情況下,半精度計(jì)算會(huì)比單精度計(jì)算更快失去準(zhǔn)確度。但是對(duì)于很多顯卡、圖像處理和機(jī)器學(xué)習(xí)負(fù)載來(lái)說(shuō),半精度計(jì)算足以得到正確的結(jié)果——特別是大部分屏幕的每像素動(dòng)態(tài)范圍只是 8-12 位。
根據(jù)蘋果工程師的演示我們了解到,蘋果 GPU 的寄存器文件主要由 16 位寄存器組成——非常適合半精度數(shù)據(jù)。單精度浮點(diǎn)值和其他 32 位數(shù)據(jù)需要兩個(gè)寄存器。因此寄存器文件可以保存的 16 位寄存器是 32 位寄存器的兩倍。蘋果工程師強(qiáng)調(diào)與單精度相比,半精度的性能和能效更強(qiáng),這也就說(shuō)明半精度是蘋果的首要設(shè)計(jì)點(diǎn)。
相比之下 PowerVR Series 6 和 7 GPU 使用 32 位寄存器,是針對(duì)單精度計(jì)算設(shè)計(jì)的。在 Series 6 中,最常見(jiàn)的指令比如 FMAD、FMUL 和 FADD 都是在單精度數(shù)據(jù)上運(yùn)行的。有些指令是在一個(gè)寄存器的兩個(gè) 16 位 SIMD 元素上執(zhí)行的,但是 SIMD 執(zhí)行指令和使用 16 位寄存器進(jìn)行標(biāo)量執(zhí)行更是不同的。于 PowerVR 而言,以 16 位格式存儲(chǔ)數(shù)據(jù)會(huì)浪費(fèi)寄存器部分空間,而且也不能自動(dòng)將變量的數(shù)目變成雙倍,以在寄存器文件中使用。因此使用 16 位數(shù)據(jù)可以減少內(nèi)存帶寬和能耗,但是不能像蘋果 GPU 那樣強(qiáng)化性能或者提高效能。
16 位數(shù)據(jù)一個(gè)常見(jiàn)的難題是雖然精度降低,大部分計(jì)算還是沒(méi)有問(wèn)題的,但有時(shí)候有些計(jì)算需要更大的精度。比如,著色器計(jì)算大像素塊的顏色,然后計(jì)算平均值時(shí),它可以針對(duì)單個(gè)像素使用 16 位數(shù)據(jù),但是求總和時(shí)卻需要 32 位數(shù)據(jù)。如果將像素?cái)?shù)據(jù)從 16 位轉(zhuǎn)換到 32 位,成本太高,整個(gè)著色器會(huì)使用 32 位數(shù)據(jù)去計(jì)算出正確的答案。
蘋果的 GPU 支持在不同數(shù)據(jù)類型之間轉(zhuǎn)換進(jìn)行混合精度計(jì)算,為更高性能和低能耗的 16 位計(jì)算創(chuàng)造更多機(jī)會(huì)。從蘋果公司的演示來(lái)看,數(shù)據(jù)類型的轉(zhuǎn)換非常自由,也就說(shuō)轉(zhuǎn)換硬件是在標(biāo)準(zhǔn)數(shù)據(jù)路徑之中。雖然從硬件的角度來(lái)說(shuō)這種解決方案成本更高,但是它大大簡(jiǎn)化了編譯器,程序員也可以更容易地寫出好的軟件。
PowerVR Series 6 和 7 可以轉(zhuǎn)換不同精度的數(shù)據(jù)類型,但是這種轉(zhuǎn)換不是自由的。他們指出這種數(shù)據(jù)轉(zhuǎn)換會(huì)產(chǎn)生成本,因此建議開(kāi)發(fā)者編寫著色器程序是能夠盡量減小需要轉(zhuǎn)換的次數(shù)。
蘋果定制GPU的技術(shù)差別
蘋果和 Imagination GPU 的寄存文件和數(shù)據(jù)轉(zhuǎn)換之間的差別很大。寄存文件組織對(duì)于渲染核心來(lái)說(shuō)是最基礎(chǔ)的,它影響到所有東西的設(shè)計(jì),從渲染核心指令集架構(gòu)到執(zhí)行單元和時(shí)序邏輯。比如,寄存器大小決定數(shù)據(jù)路徑和渲染核心中的線路。數(shù)據(jù)轉(zhuǎn)換并沒(méi)有什么重大影響,但是對(duì)于編譯器和開(kāi)發(fā)者來(lái)說(shuō)就不一樣了。PowerVR Series 7 GPU 與它的上一代相比,只要使用 32 位寄存器。根據(jù)這些差別,我們可以得出一個(gè)比較符合邏輯的結(jié)論,蘋果的 GPU 使用的是他們內(nèi)部自己設(shè)計(jì)的渲染核心,也就是說(shuō)蘋果也自己為 OpenGL ES 和 Metal API 開(kāi)發(fā)自主著色程序編譯器,而且很有可能還有自主顯卡驅(qū)動(dòng)器。
有些跑分測(cè)試已經(jīng)發(fā)現(xiàn)了這些端倪。GFXBench 跑分出現(xiàn)的結(jié)果直接將 iPhone 7 中的 GPU 命名為 G9。通過(guò)對(duì)比直接測(cè)試 Metal 和 PowerVR GPU 的 OpenGL ES 的著色器的結(jié)果,你就能發(fā)現(xiàn)蘋果 GPU 和 PowerVR 之間的很多不同。也有可能是 Metal 上有一些獨(dú)特的特性并不適合使用在 PowerVR GPU 上。但是其中的一些不同可能沒(méi)法突出不同的硬件選擇。比如蘋果 GPU 最高支持 OpenGL ES 3.0,而 PowerVR GPU 則能支持最新版本。不過(guò)這些不同主要是因?yàn)檐浖万?qū)動(dòng)器,而不是因?yàn)橛布?/p>
自主設(shè)計(jì)的戰(zhàn)略優(yōu)勢(shì)
在消費(fèi)者電子行業(yè),蘋果的垂直整合戰(zhàn)略顯得非常特別。在 iPhone 和 iPad 上蘋果可以說(shuō)是掌握了一切——從基本的線路設(shè)計(jì)、處理器、操作系統(tǒng)到面向消費(fèi)者的服務(wù),比如地圖、 iMessage 和相機(jī)等。這些控制和整合讓蘋果的軟件和硬件團(tuán)隊(duì)獲得一些其他競(jìng)爭(zhēng)對(duì)手無(wú)法企及的優(yōu)勢(shì)。
從第一代 iPhone 發(fā)布到現(xiàn)在,總體趨勢(shì)非常明顯——每走一步蘋果對(duì)平臺(tái)和生態(tài)系統(tǒng)的控制就更嚴(yán)格。起初蘋果使用的是標(biāo)準(zhǔn)的 ARM CPU,而且將大部分訂單外包給三星,但最終他們自主設(shè)計(jì)兼容 ARMv8 的 CPU 核心,性能遠(yuǎn)遠(yuǎn)優(yōu)于競(jìng)爭(zhēng)對(duì)手。同樣地蘋果收購(gòu)了 Anobit 利用他們的團(tuán)隊(duì)和技術(shù),為 iPhone 和 iPad 閃存自主開(kāi)發(fā)控制存儲(chǔ)器。對(duì)于蘋果來(lái)說(shuō),設(shè)計(jì)定制 GPU 將會(huì)是順理成章的一步,從而創(chuàng)造持續(xù)性戰(zhàn)略優(yōu)勢(shì)。
最明顯的優(yōu)勢(shì)之一就是蘋果的 GPU 比移動(dòng)行業(yè)中競(jìng)爭(zhēng)對(duì)手的更好,包括 ARM 或 Imagination 授權(quán)的 GPU,也比高通的更好。強(qiáng)大的性能將能帶來(lái)更好的用戶體驗(yàn),以及更長(zhǎng)的游戲續(xù)航,圖形和機(jī)器學(xué)習(xí)應(yīng)用體驗(yàn)也更好。
蘋果的 Metal Performance Shaders 庫(kù)中包括十幾個(gè)高度優(yōu)化的著色器,給開(kāi)發(fā)者帶來(lái)豐富的工具集。這些著色器包括神經(jīng)網(wǎng)絡(luò)分類,比如卷積、池化和修整線性單元層。Metal Performance Shaders 庫(kù)中還有處理內(nèi)核,比如通過(guò)Lanczos 重采樣算法來(lái)重新調(diào)整圖片大小,相比圖形線性采樣,這種算法能夠生成更高質(zhì)量的圖像。比如 Instagram 利用蘋果的 GPU 進(jìn)行色調(diào)映射和本地對(duì)比強(qiáng)化,甚至蘋果相機(jī)應(yīng)用可以利用 GPU 生成各種不同圖像效果。對(duì)于成像和神經(jīng)網(wǎng)絡(luò),半精度計(jì)算堪稱良配。相比 PowerVR 的渲染核心,蘋果的著色器架構(gòu)能給這些應(yīng)用提供更好的性能和效能。
第二個(gè)好處是蘋果可以在 GPU 中增加新的特性,修復(fù)漏洞,而他們的競(jìng)爭(zhēng)對(duì)手是無(wú)法享受到這些好處的。另一方面,有了標(biāo)準(zhǔn)第三方 IP,任何時(shí)候蘋果修復(fù)漏洞或者需要新的特性,那么 Imagination Technology 客戶如三星、Mediatek 等也很快就能獲得這些好處。
第三個(gè)好處是上市時(shí)間和調(diào)度。蘋果 A 系列處理器就是根據(jù) iPhone 一年一更新的節(jié)奏而每年都更新。因?yàn)?iPhone 是一款非常重要的產(chǎn)品,蘋果必須給顧客提供強(qiáng)大的性能,以及明顯的代間升級(jí)以刺激需求,因此蘋果一般都會(huì)帶來(lái)最新的處理技術(shù),當(dāng)然這其中也包含著巨大的風(fēng)險(xiǎn)。只要可以自主開(kāi)發(fā) GPU,蘋果就可以選擇投資必要的時(shí)間和資源去開(kāi)發(fā),以便趕上芯片發(fā)布的時(shí)間,相比之下 Imagination 就沒(méi)有那么強(qiáng)大的財(cái)力和豐富的人力資源。
蘋果如果想要一炮打響自己的 GPU 品牌,那么他們就必須在設(shè)計(jì)、監(jiān)管、量產(chǎn)以及總的軟件生態(tài)系統(tǒng)間進(jìn)行協(xié)調(diào)。在新品正式發(fā)布前,他們需要發(fā)現(xiàn)和修復(fù)漏洞,升級(jí)圖形硬件和軟件。因?yàn)?GPU 設(shè)計(jì)大多是自主完成,蘋果可以對(duì)其更新循環(huán)進(jìn)行直接控制,減少對(duì)外界的依賴,從而可以確保新品按時(shí)發(fā)布上市。
假設(shè)蘋果工程師在渲染核心中發(fā)現(xiàn)了一個(gè)嚴(yán)重的邏輯錯(cuò)誤,他們可以當(dāng)天修復(fù),然后再尋找解決方案。如果使用第三方 IP,那么在遇到問(wèn)題時(shí) IP 供應(yīng)商必須首先考慮如何解決,同意蘋果的解決方案,這可能就需要花一點(diǎn)時(shí)間了,因?yàn)?IP 供應(yīng)商還需要協(xié)調(diào)他們的其他客戶。三星的 Exynos 5410 就是一個(gè)很好的例子,它同時(shí)使用 ARM 的 Cortex A15 和 A7 核心,其中的一個(gè)一致性錯(cuò)誤迫使三星不得不禁用它的節(jié)能功能。自主設(shè)計(jì)就可以大大降低這種風(fēng)險(xiǎn),因?yàn)槠渲胁淮嬖诶娓?jìng)爭(zhēng),而且公司之內(nèi)交流解決方案總比和第三方交流方便。
最后一個(gè)好處就是可以減少對(duì)供應(yīng)商的依賴,這樣蘋果在談判中將能占據(jù)更有利的位置,降低商業(yè)風(fēng)險(xiǎn)。在重要供應(yīng)商之外再給自己找一家供應(yīng)商,對(duì)于蘋果來(lái)說(shuō)這簡(jiǎn)直是鐵律。就如今年,以前一直只用高通 LTE 調(diào)制解調(diào)器的他們,突然就把英特爾也納入供應(yīng)商名單之中。從長(zhǎng)遠(yuǎn)角度來(lái)說(shuō),這種做法能讓進(jìn)一步壓低成本,也給他們創(chuàng)造更多機(jī)會(huì)。
其實(shí)蘋果目前已經(jīng)組建了 GPU 設(shè)計(jì)團(tuán)隊(duì)和驅(qū)動(dòng)器團(tuán)隊(duì),A8、A9 和 A10 中的 GPU 有很大一部分都是這些團(tuán)隊(duì)參與設(shè)計(jì)的。如果 Imagination Technologies 被收購(gòu)了或者是技術(shù)趕不上行業(yè)發(fā)展水平,那么蘋果只要再自主設(shè)計(jì)固定供應(yīng)顯卡硬件,替代 PowerVR IP 即可。
蘋果下一步怎么走
未來(lái)蘋果將有三種選擇。目前是由 Imagination Technologies 授權(quán)以使用他們的固定圖形硬件,以補(bǔ)充蘋果自主設(shè)計(jì)的部件,比如渲染核心。這種情況下,蘋果可能最終會(huì)升級(jí)到更新的 PowerVR。第二種是買下 Imagination Technologies,不過(guò)這么一場(chǎng)收購(gòu)會(huì)帶來(lái)一些蘋果并不需要的東西(比如 MIPS 處理器產(chǎn)品線),在今年早些時(shí)候已經(jīng)排除了收購(gòu)的可能性。另一方面,蘋果可以從更大程度上定制他們的 GPU——直到超過(guò) Imagination Technologies。最終蘋果就要確定自己是否足以設(shè)計(jì)出更好的 GPU,不再需要任何合作伙伴,從蘋果開(kāi)發(fā) A 系列處理器的歷史來(lái)看,他們還是有可能在這個(gè)新的領(lǐng)域獲得成功的。