轉(zhuǎn)自:半導(dǎo)體行業(yè)觀察
蘋果在2008 年4 月23 日,冒著極大風(fēng)險(xiǎn)硬著頭皮發(fā)表初代iPhone 的隔年,耗費(fèi)2 億7,800 萬美元,購(gòu)并了專注開發(fā)高效能Power 處理器的PA Semi,組成其處理器研發(fā)團(tuán)隊(duì)的骨干,然后在2012 年9 月發(fā)表的iPhone 5,其心臟「A6」處理器,終于不再使用來自ARM 授權(quán)的核心,采用自家的「Swift」微架構(gòu)(Micro Architecture)。
再以世界上首款搶灘登陸智慧型手機(jī)與平板的64 位元ARM 處理器「A7」(Cyclone 微架構(gòu))為起點(diǎn),蘋果自家SoC 開始逐漸展現(xiàn)壓倒ARM Cortex 家族(與躺著中槍的Qualcomm 自有核心)效能優(yōu)勢(shì),且隨著時(shí)間演進(jìn),差距越拉越開。
看起來好像微言大義到接近廢話的程度?如果你真的這樣想,那你就更有繼續(xù)讀下去的必要。
近年來拜ARM 為首的授權(quán)IP 商業(yè)模式之所賜,越來越多人搞不懂這兩者的差別,完全混在一起,這些年來筆者已經(jīng)聽過太多讓人完全笑不出來的笑話,所以在此特別重述一次。
支配智慧型手機(jī)市場(chǎng)的ARM 又是怎么一回事呢?以32 位元ARMv7-A 指令集為例,在手機(jī)上常見的微架構(gòu)(核心),總計(jì)有:
ARM 本家賣IP 授權(quán)給別人的Cortex-A5 / A7 / A9 / A12 / A15 / A17 這幾種核心微架構(gòu)。
Qualcomm 自行打造的Scorpio / Krait。
蘋果并購(gòu)PA Semi 后關(guān)起門來搞出的A6「Swift」,iPhone 5 的心臟。
換成64 位元ARMv8-A,就變成以下場(chǎng)景:
ARM 本家賣IP 授權(quán)給別人的Cortex-A35 / A53 / A57 / A72 / A73 這幾種核心微架構(gòu)。
增加半精度浮點(diǎn)支援和系統(tǒng)可靠度機(jī)能的ARMv8.2-A 指令集:Cortex-A55 / A75。
Qualcomm 自行打造的Kyro。
nVidia 的Project Denver。
蘋果繼續(xù)關(guān)起門來搞出的A7「Cyclone」,與之后的眾多芯片,如A8「Typhoon」、A9「Twister」、A10「Fusion」(Hurricane + Zephyr)、A11「Bionic」(Monsoon + Mistra) 。
為了伺服器而量身訂做的特殊微架構(gòu),如Qualcomm Centriq 2400 的「Falkor」,和Cavium Thunder X 系列的核心。
只要作業(yè)系統(tǒng)相同(如同版本Android 或iOS),這些核心微架構(gòu)應(yīng)當(dāng)正確執(zhí)行使用ARM 指令集撰寫或編譯出來的軟件,講的更專業(yè)或更假掰一點(diǎn),它們擁有相同的應(yīng)用程式二進(jìn)位執(zhí)行檔介面(ABI,Application Binary Interface),如同Intel 與AMD 的x86 處理器都應(yīng)可正確安裝Windows 作業(yè)系統(tǒng),理所當(dāng)然執(zhí)行Office 等應(yīng)用軟件和Battlefield 等套裝游戲。
至于Qualcomm、蘋果和nVidia,是否根本自身特殊需求,自行定義「非官方」ARM 指令,那就后頭有空再討論了。
在執(zhí)行相同指令集「語言」的前提之上,相容處理器的效能要能夠勝出,只有微架構(gòu)設(shè)計(jì)能否比競(jìng)爭(zhēng)對(duì)手有效處理更多的指令。方向不外乎:
更高的時(shí)脈:雖然往往計(jì)算機(jī)概論會(huì)教你「指令管線階段越多,代表處理器同時(shí)執(zhí)行更多的指令,只是這些指令位處于不同的階段」,但實(shí)際上最多還是一個(gè)時(shí)脈周期「吐出」一個(gè)被執(zhí)行完畢的指令,所以現(xiàn)實(shí)層面的「加深指令管線」,實(shí)際上跟「提高運(yùn)行時(shí)脈」講的是同一件事。很不幸的,智慧型手機(jī)因嚴(yán)格的功耗限制,透過積極追求高時(shí)脈以提高效能,是比較不切實(shí)際的方向。
更寬的管線:一個(gè)便當(dāng)吃不夠,你可以吃第二個(gè),嫌執(zhí)行一個(gè)指令不夠看,你也可以同時(shí)執(zhí)行第二個(gè),這就是源自1966年CDC6600的「超純量」(Superscalar)架構(gòu)。另外也有純軟件方式、讓編譯器去一個(gè)蘿卜一個(gè)坑塞指令到不同執(zhí)行單元的「超長(zhǎng)指令集」(VLIW),這就不在本文的討論范圍內(nèi)了。
足以喂飽嗷嗷待哺執(zhí)行單元的高效能記憶體子系統(tǒng):包含系統(tǒng)主記憶體、快取記憶體、連結(jié)多個(gè)處理器核心的匯流排、舉足輕重的快取記憶體資料一致性協(xié)定(Cache Coherence Protocol) ,甚至可以非循序的存取記憶體位址(Memory Disambiguation),都是不可或缺的「基礎(chǔ)建設(shè)」。
但「指令管線化」與「指令執(zhí)行平行化」也帶來了新的挑戰(zhàn)。
控制相依性:電腦有別于計(jì)算器的最重要特征在于「條件判斷」的能力,根據(jù)不同的條件執(zhí)行不同的指令流,處理器如碰到分支(Branch)或跳躍(Jump),就須改變指令執(zhí)行的流程,清除已經(jīng)進(jìn)入管線的指令,從另一個(gè)記憶體位址擷取指令,重新執(zhí)行并存取相關(guān)的資料(或稱為「運(yùn)算元」,意指運(yùn)算的目標(biāo),如特定資料暫存器或記憶體位址),而具備條件判斷的分支,造成的傷害更大,因?yàn)樾枰芫€停下來等待其結(jié)果、或著事先預(yù)測(cè)并「先斬后奏」。
理所當(dāng)然的,指令管線越深,一旦「筊杯」失敗,要復(fù)原管線并恢復(fù)指令執(zhí)行的代價(jià),也越像火燒摩天樓一樣恐怖,這也是高時(shí)脈深管線近年來不太受歡迎的另類主因,因?yàn)楝F(xiàn)實(shí)世界的應(yīng)用程式,其實(shí)有很多難以預(yù)測(cè)的分支行為,越高的「代價(jià)」,更意味著更差勁的「效能/功耗」比。
講了那么多原理,蘋果從來不公開自主微架構(gòu)的技術(shù)細(xì)節(jié),那該如何掌握他們追求高效能的設(shè)計(jì)方向?
2014 年初,當(dāng)多數(shù)世人正「驚呆」A7 的64 位元與驚人的性能表現(xiàn)時(shí),有人注意到蘋果提交的LLVM 原始代碼,不僅透露了微架構(gòu)代號(hào)是「Cyclone」,更包含眾多重要的規(guī)格參數(shù):
指令發(fā)出寬度(Issue Width):6
非循序指令執(zhí)行緩沖區(qū)(Reorder Buffer):192
記憶體載入延遲(Load Latency):4
分支預(yù)測(cè)錯(cuò)誤代價(jià)(Misprediction Penalty):16(一般介于14~19)
在當(dāng)時(shí),這是非常驚人的規(guī)格,就算擺在今天也是同樣駭人,可同時(shí)處理的指令是同時(shí)期ARM 核心足足兩倍(即使64 位元的Cortex-A57 也只能3 個(gè)指令),非循序指令執(zhí)行引擎的「深度」則是Intel Haswell 等級(jí),指令管線深度則中規(guī)中矩的維持在16 階這一般水準(zhǔn)。
讓我們重新畫出命案現(xiàn)場(chǎng)的人形粉筆圈,歸納出蘋果的產(chǎn)品設(shè)計(jì)取向:
微架構(gòu)以64 位元效能為優(yōu)先設(shè)計(jì)考量。
既然行動(dòng)處理器受制于低功耗需求,難以透過提高時(shí)脈追求效能,索性以「更寬」的指令管線取勝。
同時(shí)執(zhí)行更多指令,代表要耗費(fèi)更多心思去解決暫存器相依的問題。
更強(qiáng)力的非循序指令執(zhí)行引擎。
寄望指令集本身就定義更多的資料暫存器,降低「強(qiáng)碰」機(jī)率。
讓ARM 指令集邁向64 位元的ARMv8-A,并非只有「將整數(shù)邏輯暫存器寬度延長(zhǎng)到64 位元」和「提供64 位元記憶體定址空間」這么簡(jiǎn)單,拋棄昔日專注于嵌入式應(yīng)用的遺產(chǎn),更加的簡(jiǎn)潔優(yōu)雅,更利于打造高效能微架構(gòu),引領(lǐng)ARM 榮登高效能的天堂,是這次指令集改版最神圣不可侵犯的絕對(duì)使命。
ARMv8-A 修訂項(xiàng)目極多,但就筆者的角度,除了取消「加速重建儲(chǔ)存CPU 狀態(tài)的Context Switch 相關(guān)機(jī)制」(一堆就今日觀點(diǎn)實(shí)在很小家子氣的技術(shù)),和簡(jiǎn)化例外處理與執(zhí)行特權(quán)階層外,最重大的改革,只有兩項(xiàng):
倍增通用暫存器(GPR)數(shù)量,這件事在當(dāng)年AMD 讓x86 邁向64 位元時(shí)也發(fā)生過,意義重大。
取消涵蓋整套指令集的「條件執(zhí)行」(Conditional Execution),這和前者互為表里,因?yàn)榭偹銛D出了珍貴的指令編碼空間去增加暫存器數(shù)量。
其中又稱為「引述式執(zhí)行」(Predicated Execution,或Guarded Exectuion)的后者,目的在于減少程式中的分支,指令集提供簡(jiǎn)單扼要的條件執(zhí)行指令,一次做完所有事情。
直接舉例比較快。原本一個(gè)簡(jiǎn)單的If-Then-Else 循序條件判斷,會(huì)需要等待確認(rèn)條件結(jié)果,或著強(qiáng)行進(jìn)行分支預(yù)測(cè),管線才會(huì)繼續(xù)動(dòng)作:
if condition
then do this
else
do that
就變成這樣:
(condition) do this
(not condition) do that
有沒有感覺簡(jiǎn)潔多了?講的玄一點(diǎn),條件執(zhí)行的中心精神在于「將控制相依性轉(zhuǎn)化為資料相依性」。
然后有鑒于過去的應(yīng)用程式,在這種If-Then-Else 的條件判斷中,有60% 都是資料搬移指令,這也是為何指令集「事后」擴(kuò)充條件執(zhí)行功能,如DEC Alpha、MIPS、甚至x86,都以「條件搬移」(Conditional Move)為主。
以Alpha 為例,其指令格式統(tǒng)一為cmovxx(xx 代表?xiàng)l件),一個(gè)簡(jiǎn)單的條件搬移:
beq ra, label // if (ra) = 0, branch to 'label'
or rb, rb, rc // else move (rb) into rc
可以透過新指令,簡(jiǎn)化如下:
cmovne ra, rb, rc
在ARMv8 之前,整套ARM 指令集每道指令,都包含了4 位元的條件碼,必須符合「某個(gè)條件」才會(huì)執(zhí)行指令。如條件成立,執(zhí)行此指令并寫回運(yùn)算結(jié)果。反之,指令執(zhí)行結(jié)果無效,或不予執(zhí)行。
回到原點(diǎn),條件執(zhí)行的優(yōu)點(diǎn)很明顯:
加速實(shí)際條件判斷的效率,因?yàn)閷?shí)際上只要比較0 與1(Bitwise)。
減少簡(jiǎn)單條件判斷的分支,可以提升指令平行化執(zhí)行的潛力。這也是為何很多VLIW 指令集普遍支援條件執(zhí)行。甚至定義存放引述碼(Predicate)的專用暫存器,以因應(yīng)更復(fù)雜多樣的條件判斷,如攤平回圈的軟件管線(Software Pipeline)。
但為何ARM 要取消看似完美的條件執(zhí)行?
占用4 位元指令編碼,實(shí)在是太浪費(fèi)了,所以用「條件選擇」(Conditional Select)取而代之。
舉個(gè)范例:「CSEL W1, W2, W3, Cond」,如條件符合,W2 暫存器資料搬移到W1,如非,就W3 到W1。缺點(diǎn)是會(huì)稍微增加程式碼體積,但絕對(duì)劃算。
提高打造高效能非循序指令執(zhí)行引擎的復(fù)雜度,在管線前端就要「預(yù)鎖」后面所需要的相關(guān)資源,也增加后方需要「更名」的暫存器,更不利提升時(shí)脈。
可確保處理器正確執(zhí)行所有軟件的指令集回溯相容性,是商業(yè)上的「資產(chǎn)」,但也是設(shè)計(jì)處理器微架構(gòu)的「包袱」。
我們有非常充分的理由相信,蘋果急著驅(qū)離「32 位元低階應(yīng)用程式」,就是為了其處理器全力針對(duì)64 位元最佳化造橋鋪路,而A11 如此驚世駭俗的效能表現(xiàn),除了它根本是純64 位元處理器,所有電晶體預(yù)算都砸在提升效能的刀口上,沒有其他合理的解釋了(新的異質(zhì)多處理器排程也有影響,但沒那么絕對(duì))。「就算」A11 具備32 位元相容性,其性能表現(xiàn)恐怕也僅聊勝于無,不足掛齒。
最后,再重新貼出本文標(biāo)題的答案:
「藉由牢牢把持軟硬件平臺(tái)的『封閉性』先天優(yōu)勢(shì),蘋果掌握了ARM 指令集邁向64 位元帶來的機(jī)會(huì),打造出一系列同時(shí)間能夠有效處理更多指令的先進(jìn)微架構(gòu)。」
這「一體成形」的絕對(duì)優(yōu)勢(shì),在可見未來的深度學(xué)習(xí)之路上,會(huì)更加的牢不可破,這就是蘋果在iPhone 前景未明之際,就膽敢購(gòu)并PA Semi 投資未來,所得到的豐碩成果,就算你不喜歡「果粉」,你也不能不佩服喬布斯的遠(yuǎn)見。
至于PA Semi 究竟干過哪些值得蘋果冒險(xiǎn)的好事,等以后有機(jī)會(huì),再好好談?wù)?,如果真的還有機(jī)會(huì)。
聯(lián)系客服