蘋果今年最大的亮點也許不是手機,而是一塊小小的芯片。M1發(fā)布會雖然已經(jīng)過去了一陣子,但圍繞著它的討論依然不見平息。不過,對它的討論很多都不在點子上,在技術(shù)方面解釋得既不夠深入也不夠易懂。在這方面,Erik Engheim在Medium上發(fā)表的這篇文章也許是最詳細(xì)最易懂的技術(shù)指南了。閱讀本文,你將了解以下幾點:1)為什么M1會這么快?2)蘋果是不是用了什么獨門絕招才做到這一點?3)英特爾和AMD能不能效仿?原文標(biāo)題是:Why Is Apple’s M1 Chip So Fast?篇幅關(guān)系,我們分兩部分刊出,此為第二部分。
劃重點:
CPU提高性能的兩種策略:要么跑快點,要么跑多點,但跑快點這條路已經(jīng)走到盡頭
跑多點也有兩種策略:增加內(nèi)核,或者亂序執(zhí)行(OoO),蘋果走的是后面這條路
AMD和Intel的亂序執(zhí)行要比M1遜色
因為體系架構(gòu)問題,英特爾和AMD沒機會趕上蘋果的CPU了
任何CPU想要快速運行都要面臨的根本挑戰(zhàn)
所以說,異構(gòu)計算是部分原因,而不是唯一的原因。M1上面所謂的快速通用CPU內(nèi)核Firestorm確實很快。跟過去與英特爾和AMD的內(nèi)核相比較弱的ARM CPU內(nèi)核相比,這是一個重大差異。
在對標(biāo)中,F(xiàn)irestorm擊敗了大多數(shù)的英特爾內(nèi)核,幾乎擊敗了最快的AMD Ryzen內(nèi)核。按照傳統(tǒng)觀點的話,這是不可能的。
在討論是什么導(dǎo)致Firestorm跑得這么快之前,我們先要了解讓CPU跑得快的核心思想是什么。
原則上,你可以結(jié)合以下兩種策略來實現(xiàn):
串行更快地執(zhí)行更多的指令。
并行執(zhí)行大量指令。
上世紀(jì)80年代的時候,做到這一點很容易。只需要增加時鐘頻率,指令就能加快完成。時鐘周期是CPU工作的最小時間單位,是計算機執(zhí)行某項操作的時候。不過這想操作可以是很微小的操作。所以,一條指令可能由多個較小的任務(wù)組成,因此可能需要多個時鐘周期才能完成。
但是,現(xiàn)在再想提高時鐘頻率已經(jīng)幾乎不可能了大家嘴里反復(fù)絮叨的“摩爾定律的終結(jié)”真的來了。
所以,現(xiàn)在其實就剩下并行執(zhí)行盡可能多的指令這條路了。
多核還是亂序處理器?
這條路也有兩種走法。一種是增加更多的CPU內(nèi)核。從軟件開發(fā)者的角度來看,這就好比增加線程。每個CPU內(nèi)核就像一個硬件的線程。如果你還不知道什么是線程,可以把它看作是執(zhí)行任務(wù)的過程。一個CPU有兩個內(nèi)核的話,就可以同時執(zhí)行兩項單獨的任務(wù):兩個線程。這些任務(wù)可以描述為兩個獨立的程序存儲在內(nèi)存當(dāng)中,或者實際上也可以是同一程序執(zhí)行兩次。每個線程都需要做一些記錄,比方說本線程目前在一系列程序指令當(dāng)中的位置。每個線程都可以存儲臨時結(jié)果,而且應(yīng)該是獨立存放的。
原則上,只有一個內(nèi)核的處理器也能跑多個線程。不過,在這種情況下,它只是把一個線程暫停并保存當(dāng)前進(jìn)程,再切換到另一線程運行。稍后再切換回來。這種做法并不能帶來太多的性能增強,只是在線程可能經(jīng)常要停下來等待用戶輸入,或者網(wǎng)絡(luò)連接速度慢要等數(shù)據(jù)的時候使用。這些可以稱之為為軟件線程。硬件線程意味著擁有真正的額外物理硬件,比方說額外的內(nèi)核,可以加快處理速度。
問題在于,開發(fā)者得會寫代碼來利用這種優(yōu)勢。其中的部分任務(wù)(比方說服務(wù)器軟件)是很容易寫的。你可以想象分別處理每一位連接用戶。這些任務(wù)互相之間獨立性太強了,以至于擁有大量內(nèi)核是服務(wù)器(尤其是基于云的服務(wù))的絕佳選擇。
這就是為什么你會看到類似Ampere之類的ARM CPU制造商會制造像Altra Max這樣的CPU的原因,這款處理器有著瘋狂的128核!這種芯片是專門為云計算準(zhǔn)備的。你不需要瘋狂的單核性能,因為在云端,關(guān)鍵是在盡可能節(jié)能的情況下讓盡可能多的線程來處理盡可能多的并發(fā)用戶。
相比之下,蘋果則處在另一端。蘋果制造的是單用戶設(shè)備。多線程并不是優(yōu)勢。他們的設(shè)備主要用來玩游戲,視頻編輯,做開發(fā)等。他們希望臺式機有漂亮的響應(yīng)性好的圖形和動畫。
桌面軟件一般不會用很多的內(nèi)核。比方說,8核也許能讓計算機游戲受益,但是像128核之類的東西完全就是浪費。相反,你需要更少但更強大的內(nèi)核。
亂序執(zhí)行的機制
有趣的來了,亂序執(zhí)行。亂序執(zhí)行可以并行執(zhí)行更多指令但又不用做成多線程的方式。開發(fā)者不必專門寫軟件就能利用這種能力。從開發(fā)者的角度來看,似乎每個內(nèi)核都跑得更快了。
要想了解其工作原理,你需要先了解一些有關(guān)內(nèi)存的知識。請求訪問內(nèi)存特定位置的數(shù)據(jù)是很慢的。但是,獲取1字節(jié)數(shù)據(jù)的時延跟獲取128字節(jié)的數(shù)據(jù)的時延卻沒有分別。數(shù)據(jù)要通過我們所謂的數(shù)據(jù)總線來發(fā)送。你可以把數(shù)據(jù)總線看作是內(nèi)存與數(shù)據(jù)通過的CPU不同部分之間的一條通道或管道,數(shù)據(jù)就是通過這條管道來傳輸?shù)?。實際上,當(dāng)然那只是一些導(dǎo)電的銅線。如果數(shù)據(jù)總線足夠?qū)挼脑?,就可以同時存取多個字節(jié)。
所以,CPU一次會執(zhí)行一大塊的指令。但是是按照次序一條接一條地執(zhí)行的。現(xiàn)代的微處理器則會做所謂的亂序操作(OoO )。
這意味著他們能夠?qū)χ噶罹彌_區(qū)進(jìn)行快速分析,弄清楚哪些指令依賴于哪個指令。不妨看看下面這個簡單的例子:
01: mul r1, r2, r3 // r1 ← r2 × r3
02: add r4, r1, 5 // r4 ← r1 + 5
03: add r6, r2, 1 // r6 ← r2 + 1
乘法往往一般都很慢??梢赃@么說,乘法需要多個時鐘周期來執(zhí)行。第二條指令只能等,因為它的計算要取決于知道了放進(jìn)r1寄存器的結(jié)果才行。
但是,第3行的第3條指令就不需要依賴于之前的指令的計算。所以,亂序處理器可以并行計算這條指令。
不過在現(xiàn)實當(dāng)中我們談?wù)摰氖菙?shù)百條指令。CPU能夠找出這些指令之間的所有依賴關(guān)系。
它會通過查看每條指令的輸入來對其進(jìn)行分析。指令的輸入是否取決于一或多條其他指令的輸出?所謂的輸入和輸出,是指包含有之前計算結(jié)果的寄存器。
比方說,add r4,r1、5這條指令要依賴mul r1,r2,r3所輸出的r1。我們可以把這些關(guān)系鏈接在一起,形成CPU可以處理的詳細(xì)圖譜。其中節(jié)點是指令,而邊則是連接它們的寄存器。
CPU可以對這樣的節(jié)點圖譜進(jìn)行分析,然后確定可以并行執(zhí)行哪些指令,以及哪些指令中繼續(xù)執(zhí)行之前需要在什么地方等待多個相關(guān)計算的結(jié)果。
很多指令會早早就執(zhí)行完畢,但我們沒法對結(jié)果進(jìn)行官宣。我們不能保證結(jié)果;否則的話,我們會以錯誤的順序提供結(jié)果。在外界看來,它得看起來就像是按照發(fā)出的指令順序執(zhí)行的。
就像堆棧一樣,CPU會從頂部彈出已完成的指令,直到找到未完成的指令。
這個解釋還不夠完善,但應(yīng)該能提供一些線索了?;旧暇褪?,你既可以實現(xiàn)程序員必須知道的那種并行性,也可以實現(xiàn)那種CPU假裝是一切都是單線程執(zhí)行的樣子。不過,你知道,在幕后,它正在執(zhí)行亂序的黑魔法。
正是出眾的亂序執(zhí)行能力使得M1的Firestorm內(nèi)核可以狠狠地踢前作的屁股,揚名立萬。實際上,它比英特爾或AMD的任何產(chǎn)品都要強大??赡鼙戎髁魇袌錾系娜魏萎a(chǎn)品都要強大。
為什么AMD和Intel的亂序執(zhí)行要比M1遜色?
在對亂序執(zhí)行(OoO )的解釋當(dāng)中,我跳過了一些重要的細(xì)節(jié),這里需要談一下。否則的話,就沒法理解為什么蘋果能夠在這場游戲當(dāng)中領(lǐng)先,為什么英特爾和AMD可能沒法趕上。
我所說的“scratchpad”實際上就是所謂的“重排序緩沖器(ROB)”,里面并不包含常規(guī)的機器代碼指令。不是那種CPU從內(nèi)存獲取要執(zhí)行的東西。這些是CPU指令集體系結(jié)構(gòu)(ISA)里面的指令。就是那種我們稱之為x86、ARM、PowerPC等的指令。
但是,在內(nèi)部,CPU會用程序員看不到的完全不同的指令集。我們稱之為微指令(micro-ops或μops )。ROB里面都是這些微指令。
對于CPU施展魔法來讓東西并行運行來說,這個地方可以做的事情要實際得多。原因是微指令的范圍很廣(包含有很多的位),并且可以包含各種元信息。你沒法把那種信息添加到ARM或x86的指令里面,而很多的元信息只有在當(dāng)前執(zhí)行的上下文之中才有意義。
我們可以這么看,就把它看作是你在寫程序的時候。你有一個公共API,這個API需要保持穩(wěn)定并且所有人都能用。ARM、x86、PowerPC、MIPS就是這樣的指令集。而微指令基本上是用來實現(xiàn)公共API的專用API。
此外,對于CPU來說,微指令往往更易用。為什么?因為每一個微指令都只完成一項簡單的有限任務(wù)。常規(guī)的ISA指令可能更復(fù)雜,導(dǎo)致會發(fā)生很多事情發(fā)生,最終會變成成多個微指令。
對于CISC CPU來說,往往別無選擇只能用微指令,否則大型復(fù)雜的CISC指令會導(dǎo)致流水線和OoO幾乎沒法實現(xiàn)。
但RISC CPU就有得選。比方說,小一點的ARM CPU根本不用微指令。但這也意味著做不了類似OoO之類的事情。
但是這又有什么關(guān)系呢?為什么這個細(xì)節(jié)對于理解為什么蘋果能夠壓倒AMD和英特爾非常重要呢?
那是因為CPU能跑多快要取決于往ROB裝填微指令的速度以及數(shù)量。填充得越快,能選擇出可以并行執(zhí)行的指令的機會就越大,而并行執(zhí)行則意味著性能的提高。
機器代碼指令被所謂的指令解碼器分解成微指令。如果能夠有更多的解碼器,我們就可以并行分解更多的指令,填充ROB的速度就可以更快。
在這一點上,蘋果的M1跟其他的CPU有很大的差別。英特爾和AMD最大微處理器內(nèi)核有四個解碼器,也就意味著可以并行解碼四條指令分解出微指令。
但是蘋果卻有著瘋狂的8個解碼器。不僅如此,它的ROB大概比別人大3倍?;旧舷喈?dāng)于可容納三倍規(guī)模的指令。其他主流芯片制造商的CPU沒有一個有這么多解碼器的。
為什么英特爾和AMD沒法多加點指令解碼器?
這就是RISC復(fù)仇的機會。而M1 Firestorm內(nèi)核采用的是ARM RISC架構(gòu),這一事實開始變得重要起來。
你看,對于x86來說,一條指令的長度在1到15個字節(jié)之間。而在RISC芯片上,指令的長度是固定的。這種情況下固定長度為什么很重要呢?
因為如果每一條指令的長度都一樣的話,把一連串字節(jié)分解成指令,并行輸入給8個不同的解碼器這件事就變得微不足道了。
但是,如果是x86 CPU的話,解碼器都不知道下一條指令從哪里開始。它得分析每一條指令才能知道指令的長度。
英特爾和AMD采取的是暴力破解法,也就是在每個可能的起點對指令進(jìn)行解碼。這意味著會有很多猜錯的時候,要把錯誤丟棄掉。這會造成解碼器階段十分復(fù)雜,繞來繞去,以至于很難再添加更多的解碼器。但是對于蘋果來說,相比之下增加更多的解碼器根本不算事兒。
實際上,添加更多解碼器會導(dǎo)致很多的其他問題,以至于對AMD來說,4個解碼器基本上就是上限了。
其結(jié)果是,在相同的時鐘頻率下,M1 Firestorm內(nèi)核能處理的指令數(shù)量實際上是AMD和Intel CPU的兩倍。
有人則認(rèn)為,因為CISC指令可轉(zhuǎn)化為更多的微指令,所以密度更大,這樣一來,解碼一條x86指令就類似于解碼兩條ARM指令。
只是在現(xiàn)實世界里面,情況并非如此。高度優(yōu)化的x86代碼很少會用復(fù)雜的CISC指令。才能夠某種程度來說,它已經(jīng)有點RISC風(fēng)格了。
但這對英特爾或AMD毫無幫助,因為就算15字節(jié)長的指令很少見,造出來的解碼器也得處理。而這會導(dǎo)致復(fù)雜性,從而阻礙AMD和Intel添加更多的解碼器。
可是AMD的Zen3內(nèi)核還是更快啊,不是嗎?
據(jù)我所知,最新的AMD CPU內(nèi)核,也就是所謂的Zen3內(nèi)核在性能基準(zhǔn)測試是要比Firestorm內(nèi)核快一些。但問題是,這僅僅是因為Zen3內(nèi)核的時鐘頻率為5 GHz。而Firestorm內(nèi)核的時鐘頻率為3.2 GHz。雖然時鐘頻率提高了近60%,但Zen3也只是勉強比Firestorm快一點。
那蘋果為什么不相應(yīng)提高時鐘頻率呢?因為更高的時鐘頻率會導(dǎo)致芯片發(fā)熱。但那卻是蘋果的主要賣點之一。跟英特爾和AMD的產(chǎn)品不同,他們的計算機幾乎不需要制冷。
從本質(zhì)上講,可以說Firestorm內(nèi)核確實優(yōu)于Zen3內(nèi)核。Zen3只能靠加大電流并變得更熱來讓自己保持領(lǐng)先。而蘋果只是選擇不這么做而已。
如果蘋果想要提高性能的話,他們只只需要多加些內(nèi)核就可以了。這樣一來,他們既可以降低功耗,又能提供更高性能。
未來
似乎AMD和Intel在兩個方面都陷入了困境:
他們沒有一個可以輕松從事異構(gòu)計算和SoC設(shè)計的商業(yè)模式。
他們傳統(tǒng)的x86 CISC指令集反過來又給他們造成困擾,導(dǎo)致難以提高OoO性能。
當(dāng)然,這并不意味著游戲結(jié)束了。他們是可以提高時鐘頻率,強化散熱能力,增加更多內(nèi)核,擴(kuò)充CPU緩存等。但這些方面他們也都處于劣勢。英特爾的情況最糟,一方面內(nèi)核似乎已經(jīng)被Firestorm擊敗,而且能跟SoC解決方案集成的GPU也很弱。
引入更多內(nèi)核的問題在于,對于典型的桌面工作負(fù)荷來說,內(nèi)核太多會導(dǎo)致收益遞減。當(dāng)然,大量內(nèi)核非常適合服務(wù)器。
但是在這個領(lǐng)域,像Amazon和Ampere之類的公司正在用128核的怪獸CPU發(fā)動攻擊。這就像是東線和西線同時開戰(zhàn)。
不過對于AMD和Intel來說,幸運的是,蘋果并沒有直接賣自己的芯片。所以,PC用戶只能接受他們提供的任何產(chǎn)品。PC用戶可能會投奔曹營,但這會是一個緩慢的過程。用戶不會馬上離開自己自己投入了大量資金的平臺。
但是,那些還沒有在任何平臺上面燒太多錢的年輕專業(yè)人,他們未來可能會慢慢地轉(zhuǎn)向蘋果陣營,擴(kuò)大了后者在高端市場的份額,并因此進(jìn)一步擴(kuò)大其在PC市場所占的利潤份額。
責(zé)任編輯:tzh
-
芯片
+關(guān)注
關(guān)注
463文章
53867瀏覽量
463251 -
手機
+關(guān)注
關(guān)注
36文章
6987瀏覽量
160818 -
蘋果
+關(guān)注
關(guān)注
61文章
24593瀏覽量
207944
發(fā)布評論請先 登錄
英特爾炮轟,AMD回?fù)?!掌機市場芯片之爭
讓英特爾再次偉大,新CEO推動18A提前量產(chǎn),14A已在路上
英特爾、AMD、TI等芯片巨頭遭訴訟;OpenAI 發(fā)布GPT-5.2
五家大廠盯上,英特爾EMIB成了?
美國政府將入股英特爾?
看點:AMD服務(wù)器CPU市場份額追上英特爾 華為Mate80主動散熱專利曝光
英特爾和AMD能否效仿蘋果M1芯片?
評論