12 月 1 日消息 蘋(píng)果的 M1 芯片是蘋(píng)果在 Mac 上搭載的單核 CPU 基準(zhǔn)測(cè)試成績(jī)最快的芯片,在多核性能方面,也擊敗了許多高端英特爾競(jìng)品。開(kāi)發(fā)者Erik Engheim 近日分享了對(duì) M1 芯片的深入研究,探討了蘋(píng)果新處理器為何比它所取代的英特爾芯片快了那么多。
M1 不是 CPU !
首先,M1 并不是一個(gè)簡(jiǎn)單的 CPU。正如蘋(píng)果所解釋的那樣,它是一個(gè)系統(tǒng)級(jí)芯片,即一系列芯片都被安置在一個(gè)硅片封裝中。M1 容納了 8 核 CPU、8 核 GPU(部分 MacBook Air 機(jī)型為 7 核)、統(tǒng)一內(nèi)存、SSD 控制器、圖像信號(hào)處理器、Secure Enclave 等大量模塊。這就是我們所說(shuō)的片上系統(tǒng) (SoC)。

M1 是芯片上的系統(tǒng),這意味著組成計(jì)算機(jī)的所有部件都放在一個(gè)硅芯片上。
英特爾和 AMD 也在單一封裝中內(nèi)置多個(gè)微處理器,但正如 Engheim 所描述的那樣,蘋(píng)果之所以有優(yōu)勢(shì),是因?yàn)樘O(píng)果沒(méi)有像競(jìng)爭(zhēng)對(duì)手那樣專(zhuān)注于通用 CPU 核心,而是專(zhuān)注于處理專(zhuān)門(mén)任務(wù)的專(zhuān)用芯片。

計(jì)算機(jī)主板的示例。內(nèi)存、CPU、顯卡、IO控制器、網(wǎng)卡等許多組件可以連接到主板進(jìn)行相互通信。
然而,由于我們今天能夠?qū)⑦@么多晶體管放在硅芯片上,英特爾和AMD等公司開(kāi)始將多個(gè)微處理器放在一個(gè)芯片上。今天,我們將這些芯片稱(chēng)為 CPU 內(nèi)核。一個(gè)核心基本上是一個(gè)完全獨(dú)立的芯片,可以從內(nèi)存中讀取指令并執(zhí)行計(jì)算。
我們今天能夠在一個(gè)硅芯片上放置如此多的晶體管,像英特爾和AMD這樣的公司開(kāi)始在一個(gè)芯片上放置多個(gè)微處理器。我們將這些芯片稱(chēng)為CPU核心。一個(gè)核心基本上是一個(gè)完全獨(dú)立的芯片,它可以從內(nèi)存中讀取指令并執(zhí)行計(jì)算。

具有多個(gè) CPU 內(nèi)核的微芯片。
很長(zhǎng)一段時(shí)間以來(lái),采用多核方式一直是提高性能的主要方法。但是現(xiàn)在CPU市場(chǎng)上有一家廠商正在背離這一趨勢(shì),這就是蘋(píng)果公司。

蘋(píng)果的異構(gòu)計(jì)算策略并不神秘
蘋(píng)果并沒(méi)有增加更多的通用CPU核心,而是采取了另一種策略:他們開(kāi)始增加更多的專(zhuān)用芯片來(lái)完成一些專(zhuān)門(mén)的任務(wù)。這樣做的好處是,專(zhuān)用芯片往往能夠在解決特定任務(wù)時(shí)比通用CPU核心耗電少的多,并且速度更快。
這并不是全新的知識(shí)。多年來(lái)已經(jīng)有圖形處理單元(GPU)等專(zhuān)用芯片坐在Nvidia和AMD顯卡中執(zhí)行與圖形相關(guān)的操作,速度比通用CPU快得多。
蘋(píng)果所做的只是朝著這個(gè)方向進(jìn)行更徹底的轉(zhuǎn)變。M1并不只是擁有通用的核心和內(nèi)存,而是包含了各種各樣的專(zhuān)用芯片:
中央處理器 (CPU) - SoC 的 “大腦”。運(yùn)行操作系統(tǒng)和應(yīng)用程序的大部分代碼。
圖形處理單元 (GPU) - 處理與圖形相關(guān)的任務(wù),如可視化應(yīng)用程序的用戶(hù)界面和 2D/3D 游戲。
圖像處理單元(ISP)--可用于加快圖像處理應(yīng)用所完成的普通任務(wù)。
數(shù)字信號(hào)處理器(DSP)--處理比CPU更多的數(shù)學(xué)密集型功能。包括解壓音樂(lè)文件。
神經(jīng)處理單元(NPU)--用于高端智能手機(jī),以加速機(jī)器學(xué)習(xí)(AI)任務(wù)。這些任務(wù)包括語(yǔ)音識(shí)別和攝像頭處理。
視頻編碼器/解碼器 - 處理視頻文件和格式的高能效轉(zhuǎn)換。
Secure Enclave - 加密、認(rèn)證和安全。
統(tǒng)一內(nèi)存--允許CPU、GPU和其他核心快速交換信息。
這就是為什么很多人在M1 mac上進(jìn)行圖像和視頻編輯時(shí)都看到了速度提升的部分原因。它們執(zhí)行的許多任務(wù)都可以直接在特定的硬件上運(yùn)行。這就是為什么一款便宜的M1 Mac Mini可以毫不費(fèi)力地為一個(gè)大的視頻文件編碼,而另一款昂貴的iMac雖然所有的風(fēng)扇都在全速運(yùn)轉(zhuǎn),但仍然跟不上。

藍(lán)色的是多個(gè)CPU核心訪(fǎng)問(wèn)內(nèi)存,綠色的是大量的GPU核心訪(fǎng)問(wèn)內(nèi)存
統(tǒng)一內(nèi)存可能會(huì)讓你感到困惑。它和共享內(nèi)存有什么不同?而且過(guò)去視頻內(nèi)存與主內(nèi)存共享難道不是一個(gè)糟糕的想法,性能很差嗎?沒(méi)錯(cuò),共享內(nèi)存確實(shí)很糟糕。原因是CPU和GPU必須輪流訪(fǎng)問(wèn)內(nèi)存。共享就意味著要爭(zhēng)奪數(shù)據(jù)總線(xiàn)的使用權(quán)。基本上,GPU和CPU不得不輪流使用一個(gè)狹窄的管道來(lái)做數(shù)據(jù)交換。
但統(tǒng)一內(nèi)存則并不是這樣的。在統(tǒng)一內(nèi)存中,GPU核心和CPU核心可以同時(shí)訪(fǎng)問(wèn)內(nèi)存。因此在這種情況下,共享內(nèi)存沒(méi)有開(kāi)銷(xiāo)。另外CPU和GPU可以互相告知一些內(nèi)存的位置。以前CPU必須將數(shù)據(jù)從其主內(nèi)存的區(qū)域復(fù)制到GPU使用的區(qū)域。有了統(tǒng)一內(nèi)存,更像是在說(shuō) :“嘿,GPU先生,我有30MB的多邊形數(shù)據(jù),從內(nèi)存位置2430開(kāi)始”。GPU就可以開(kāi)始使用該內(nèi)存,而不需要做任何復(fù)制。
這意味著,通過(guò)使用相同的內(nèi)存池,M1上的所有特殊的協(xié)同處理器都可以彼此快速交換信息,從而可以顯著提高性能。

在統(tǒng)一內(nèi)存之前,Mac是如何使用GPU的?甚至還可以選擇使用Thunderbolt 3線(xiàn)纜將顯卡安裝在電腦之外。
英特爾和AMD為什么不這樣做?
如果蘋(píng)果所做的事情如此聰明,為什么不是每個(gè)人都這么做呢?在某種程度上,確實(shí)如此。其他ARM芯片制造商也在越來(lái)越多地投入專(zhuān)用硬件。
AMD也開(kāi)始在他們的一些芯片上安裝更強(qiáng)大的GPU,并逐漸向SoC的某種形式發(fā)展,加速處理器(APU)基本上是CPU核心和GPU核心放在同一個(gè)芯片上。

AMD Ryzen加速處理單元(APU)將CPU和GPU(Radeon Vega)結(jié)合在一個(gè)硅片上。但不包含其他協(xié)處理器、IO控制器或統(tǒng)一內(nèi)存。
然而,他們之所以不能做到這一點(diǎn),有著重要的原因。SoC本質(zhì)上是一個(gè)芯片上的整機(jī)系統(tǒng)。這使得它更自然地適合于真正的計(jì)算機(jī)制造商,比如惠普和戴爾。讓我用一個(gè)汽車(chē)類(lèi)的比喻來(lái)說(shuō)明,如果你的商業(yè)模式是制造和銷(xiāo)售汽車(chē)發(fā)動(dòng)機(jī),那么開(kāi)始制造和銷(xiāo)售整車(chē)將是一個(gè)不尋常的飛躍。
相比之下,對(duì)于ARM公司來(lái)說(shuō),這并不是一個(gè)問(wèn)題。計(jì)算機(jī)制造商(如戴爾或惠普)可以簡(jiǎn)單地授權(quán)ARM IP,并購(gòu)買(mǎi)其他芯片的IP,以增加他們認(rèn)為其SoC應(yīng)該具有的任何專(zhuān)用硬件。接下來(lái),他們將設(shè)計(jì)完成后的產(chǎn)品送到GlobalFoundries或臺(tái)積電(TSMC)等半導(dǎo)體代工企業(yè)代工生產(chǎn)。
這里我們就會(huì)發(fā)現(xiàn)英特爾和AMD的商業(yè)模式存在很大的問(wèn)題。他們的商業(yè)模式是建立在銷(xiāo)售通用CPU的基礎(chǔ)上的,人們只需將這些CPU插槽安裝到PC主板上即可。因此,計(jì)算機(jī)制造商可以簡(jiǎn)單地從不同的供應(yīng)商那里購(gòu)買(mǎi)主板、內(nèi)存、CPU和顯卡,并將它們整合成一個(gè)解決方案。
但在新的SoC世界里,你不會(huì)從不同的供應(yīng)商那里組裝物理元件。相反,你從不同的供應(yīng)商那里組裝IP。你從不同的供應(yīng)商那里購(gòu)買(mǎi)顯卡、CPU、調(diào)制解調(diào)器、IO控制器和其他東西的IP,并利用這些IP在內(nèi)部設(shè)計(jì)一個(gè)SoC。然后找一個(gè)代工廠來(lái)制造這個(gè)東西。
現(xiàn)在你有一個(gè)很大的問(wèn)題,因?yàn)闊o(wú)論是英特爾、AMD還是Nvidia都不會(huì)將他們的IP授權(quán)給戴爾或惠普,讓他們?yōu)樽约旱臋C(jī)器制造SoC。
當(dāng)然,英特爾和AMD可能會(huì)簡(jiǎn)單地開(kāi)始銷(xiāo)售整個(gè)成品SoC。但這些要包含什么呢?PC制造商可能對(duì)它們應(yīng)該包含什么有不同的想法。你可能會(huì)在英特爾、AMD、微軟和PC制造商之間就應(yīng)該包含什么樣的專(zhuān)用芯片發(fā)生沖突,因?yàn)檫@些芯片需要軟件支持。
對(duì)于蘋(píng)果來(lái)說(shuō),這很簡(jiǎn)單。他們控制著整個(gè)部件。他們可以給你例如Core ML的庫(kù),讓開(kāi)發(fā)者寫(xiě)機(jī)器學(xué)習(xí)的東西。Core ML是在蘋(píng)果的CPU上運(yùn)行還是在神經(jīng)引擎上運(yùn)行,這是一個(gè)開(kāi)發(fā)者不必關(guān)心的實(shí)現(xiàn)細(xì)節(jié)。
讓任何CPU快速運(yùn)行的基本挑戰(zhàn)
所以異構(gòu)計(jì)算是一部分原因,但也不是唯一原因。M1上的快速通用CPU核心,叫做Firestorm,它確實(shí)非常的的快。這與過(guò)去的ARM CPU核心有很大的不同,過(guò)去的ARM CPU核心與AMD和Intel核心相比,往往性能非常弱。
相比之下,F(xiàn)irestorm擊敗了大多數(shù)英特爾核心,幾乎擊敗了最快的AMD Ryzen核心。傳統(tǒng)觀點(diǎn)認(rèn)為這是不可能發(fā)生的。
在討論是什么使Firestorm如此快速之前,先了解一下設(shè)計(jì)更快速的CPU的核心思想到底有些什么?
原則上,你可以通過(guò)兩種策略的組合來(lái)實(shí)現(xiàn):
在一個(gè)序列中更快地執(zhí)行更多的指令
并行執(zhí)行盡可能多的指令
在80年代,這是很容易實(shí)現(xiàn)的。只要提高時(shí)鐘頻率,指令就會(huì)更快完成。不過(guò)一條指令可能需要多個(gè)時(shí)鐘周期才能完成,因?yàn)樗怯蓭讉€(gè)小任務(wù)組成的。
然而,今天增加時(shí)鐘頻率幾乎是不可能的。這就是人們十多年來(lái)一直喋喋不休的“摩爾定律的終結(jié)”。
因此,它實(shí)際上現(xiàn)在更關(guān)心的是關(guān)于并行執(zhí)行盡可能多的指令。
多核處理器還是亂序處理器?
有兩種方法可以解決這個(gè)問(wèn)題。一種是增加更多的CPU內(nèi)核。從軟件開(kāi)發(fā)人員的角度來(lái)看,這就像添加線(xiàn)程。每個(gè)CPU核心就像一個(gè)硬件線(xiàn)程。由于有兩個(gè)核心,CPU可以并發(fā)地執(zhí)行兩個(gè)獨(dú)立的任務(wù)。這些任務(wù)可以被描述為存儲(chǔ)在內(nèi)存中的兩個(gè)獨(dú)立的程序,也可以實(shí)際上是執(zhí)行了兩次的同一個(gè)程序。每個(gè)線(xiàn)程都需要做一些記錄,比如線(xiàn)程當(dāng)前在程序指令序列中的哪個(gè)位置。每個(gè)線(xiàn)程可以存儲(chǔ)臨時(shí)結(jié)果,這些結(jié)果應(yīng)該分開(kāi)保存。
原則上,一個(gè)處理器可以只有一個(gè)內(nèi)核,運(yùn)行多個(gè)線(xiàn)程。在這種情況下,它只需停止一個(gè)線(xiàn)程,并在切換到另一個(gè)線(xiàn)程之前存儲(chǔ)當(dāng)前的進(jìn)度。后來(lái)它又切換回來(lái)。這并不能帶來(lái)多大的性能提升,只有當(dāng)一個(gè)線(xiàn)程可能會(huì)頻繁地停下來(lái)等待用戶(hù)的輸入、慢速網(wǎng)絡(luò)連接的數(shù)據(jù)等時(shí)才會(huì)使用。這些可能被稱(chēng)為軟件線(xiàn)程。硬件線(xiàn)程意味著你有實(shí)際的額外的物理硬件,比如額外的內(nèi)核,以提高速度。

這樣做的問(wèn)題是,開(kāi)發(fā)人員必須編寫(xiě)代碼來(lái)利用這種優(yōu)勢(shì)。有些任務(wù),如服務(wù)器軟件,很容易這樣編寫(xiě)。你可以想象單獨(dú)處理每個(gè)連接的用戶(hù)。這些任務(wù)彼此獨(dú)立,因此對(duì)于服務(wù)器,特別是基于云的服務(wù),擁有大量核心是一個(gè)很好的選擇。

安培Altra Max ARM CPU 128核,專(zhuān)為云計(jì)算設(shè)計(jì),有很多硬件線(xiàn)程是一個(gè)優(yōu)勢(shì)
這就是為什么你會(huì)看到安培等ARM CPU廠商生產(chǎn)的CPU,比如Altra Max,它擁有瘋狂的128個(gè)核心。這種芯片是專(zhuān)門(mén)為云計(jì)算而生的。你不需要瘋狂的單核性能,因?yàn)樵谠朴?jì)算中,每瓦都要有盡可能多的線(xiàn)程來(lái)處理盡可能多的并發(fā)用戶(hù)。
相比之下,蘋(píng)果則是完全相反的一端。蘋(píng)果制造的是單用戶(hù)設(shè)備。大量的線(xiàn)程并不是一個(gè)優(yōu)勢(shì)。他們的設(shè)備用于游戲、視頻編輯、開(kāi)發(fā)等。他們希望臺(tái)式機(jī)具有更快速的響應(yīng)圖形和動(dòng)畫(huà)能力。
臺(tái)式機(jī)軟件一般不是為了利用大量核心而制造的。例如,電腦游戲可能會(huì)從8個(gè)核心中受益,但像128個(gè)核心這樣的東西就完全是一種浪費(fèi)。相反,你會(huì)想要更少但更強(qiáng)大的核心。
有趣的是,亂序執(zhí)行是一種并行執(zhí)行更多指令的方式,但不需要將這種能力暴露為多個(gè)線(xiàn)程。開(kāi)發(fā)者不需要專(zhuān)門(mén)編寫(xiě)軟件代碼來(lái)利用它。從開(kāi)發(fā)者的角度來(lái)看,它只是看起來(lái)每個(gè)核心運(yùn)行得更快。
要理解這個(gè)工作原理,你需要了解一些關(guān)于內(nèi)存的事情。在一個(gè)特定的內(nèi)存位置請(qǐng)求數(shù)據(jù)是很慢的。但是得到1個(gè)字節(jié)和得到比如說(shuō)128個(gè)字節(jié)相比,在延遲上并沒(méi)有區(qū)別。數(shù)據(jù)是通過(guò)我們所說(shuō)的數(shù)據(jù)總線(xiàn)發(fā)送的。你可以把它看成是內(nèi)存和CPU不同部分之間的道路或管道,數(shù)據(jù)會(huì)被推送過(guò)去。如果數(shù)據(jù)總線(xiàn)足夠?qū)?,你就可以同時(shí)獲得多個(gè)字節(jié)的數(shù)據(jù)。
這樣CPU每次都會(huì)得到一整塊指令來(lái)執(zhí)行。它們被記錄下來(lái),一個(gè)接一個(gè)地被執(zhí)行?,F(xiàn)代微處理器執(zhí)行的是我們所說(shuō)的亂序(OoO)執(zhí)行。
這意味著它們能夠快速分析一個(gè)緩沖區(qū)的指令,并查看哪些指令依賴(lài)于哪些指令。請(qǐng)看下面的簡(jiǎ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
乘法運(yùn)算往往是一個(gè)緩慢的過(guò)程。假設(shè)它需要多個(gè)時(shí)鐘周期來(lái)執(zhí)行。第二條指令必須等待,因?yàn)樗挠?jì)算依賴(lài)于將被放入寄存器。r1的結(jié)果。
而第3條指令并不依賴(lài)于前面指令的計(jì)算。因此,亂序處理器可以開(kāi)始并行計(jì)算這條指令。
然而,更現(xiàn)實(shí)的情況是,我們討論的是數(shù)百條指令。CPU能夠找出這些指令之間的所有依賴(lài)關(guān)系。
它通過(guò)觀察每條指令的輸入來(lái)分析這些指令。輸入是否依賴(lài)于一條或多條其他指令的輸出?我們所說(shuō)的輸入和輸出是指包含以前計(jì)算結(jié)果的寄存器。
如:指令依賴(lài)于輸入由。產(chǎn)生的輸入。我們可以把這些關(guān)系串聯(lián)起來(lái),形成一個(gè)復(fù)雜的長(zhǎng)圖,CPU可以通過(guò)這個(gè)圖來(lái)工作。節(jié)點(diǎn)是指令,邊是連接它們的寄存器。
add r4,r1,5r1mul r1,r2,r3
CPU可以分析這樣的節(jié)點(diǎn)圖,并確定哪些指令可以并行執(zhí)行,以及在執(zhí)行之前需要在哪里等待多個(gè)依賴(lài)計(jì)算的結(jié)果。
很多指令會(huì)提前完成,但我們不能將它們的結(jié)果正式生效。并不能立即提交它們,否則會(huì)以錯(cuò)誤的順序提供結(jié)果。指令的執(zhí)行順序必須與指令發(fā)布的順序相同。
就像一個(gè)堆棧,CPU會(huì)不斷地從頂部彈出已完成的指令,直到碰到一條未完成的指令。
我們還沒(méi)有完全完成這個(gè)解釋?zhuān)@給了你一點(diǎn)線(xiàn)索?;旧夏憧梢杂谐绦騿T必須知道的并行性,或那種CPU假裝好像一切都是單線(xiàn)程。然而,在幕后它卻在“亂施黑魔法”。
正是卓越的亂序執(zhí)行力,讓M1上的Firestorm核心大放異彩,名聲大噪。事實(shí)上,它比英特爾或AMD的任何產(chǎn)品都要強(qiáng)得多。很可能比主流市場(chǎng)上其他任何處理器都要強(qiáng)。
為什么AMD和Intel的亂序執(zhí)行不如M1?
在我對(duì)亂序執(zhí)行(OoO)的解釋中,我跳過(guò)了一些重要的細(xì)節(jié),這一點(diǎn)需要說(shuō)明。否則就無(wú)法理解為什么蘋(píng)果走在前面,而英特爾和AMD未必能趕上。
我說(shuō)過(guò)的那個(gè)大的“暫存器”實(shí)際上叫做“重新排序緩沖區(qū)”(ROB),它不包含正常的機(jī)器碼指令。不是CPU從內(nèi)存中取出來(lái)執(zhí)行的那些,而是CPU指令集架構(gòu)(ISA)中的指令。也就是我們所說(shuō)的x86、ARM、PowerPC等指令。
然而在CPU內(nèi)部,它的工作原理是完全不同的指令集,程序員是看不到的。我們稱(chēng)這些指令為微操作(micro-ops或μops)。ROB中充滿(mǎn)了這些micro-ops。
對(duì)于CPU來(lái)說(shuō)這些微操作更加實(shí)用。原因是微操作非常寬(包含很多位),可以包含各種元信息。
你不能將此類(lèi)信息添加到 ARM 或 x86 指令中,因?yàn)樗鼤?huì):
程序二進(jìn)制文件臃腫化
公開(kāi)有關(guān)CPU 工作方式的詳細(xì)信息(是否具有 OoO 單元)具有寄存器重命名和許多其他詳細(xì)信息。
許多元信息僅在當(dāng)前執(zhí)行的上下文中才有意義。
你可以把它想象成寫(xiě)程序的時(shí)候。你有一個(gè)公共的API,需要穩(wěn)定的,大家都在用。也就是ARM,x86,PowerPC,MIPS等指令集。微指令基本上就是用來(lái)實(shí)現(xiàn)公共API的私有API。
而且微操作對(duì)于CPU來(lái)說(shuō),通常比較容易操作。為什么這么說(shuō)呢?因?yàn)樗鼈兠總€(gè)都只做一個(gè)簡(jiǎn)單的有限的任務(wù)。常規(guī)的ISA指令可能會(huì)比較復(fù)雜,導(dǎo)致一堆東西發(fā)生,因此實(shí)際上轉(zhuǎn)化為多個(gè)微操作。
對(duì)于 CISC CPU,通常別無(wú)選擇,只能使用微操作,否則大型復(fù)雜的 CISC 指令將使流水線(xiàn)和亂序幾乎不可能實(shí)現(xiàn)。
RISC CPU可以選擇。所以例如較小的ARM CPU根本就不使用微運(yùn)算。但這也意味著它們無(wú)法做到OoO等。
但你想知道這些為什么重要嗎?為什么知道這些細(xì)節(jié)對(duì)理解為什么蘋(píng)果在AMD和Intel上占了上風(fēng)很重要?
這是因?yàn)榭焖龠\(yùn)行的能力取決于于你用微操作填滿(mǎn)ROB的速度和數(shù)量。你填滿(mǎn)的越快,它就越大,你就有更多的機(jī)會(huì)選擇你可以并行執(zhí)行的指令,從而提高性能。
機(jī)器代碼指令被我們稱(chēng)之為指令解碼器,解碼成微操作。如果我們有更多的解碼器,我們就可以并行解碼更多的指令,從而更快地填滿(mǎn)ROB。
這就是我們看到的巨大差異。最厲害的英特爾和AMD微處理器有4個(gè)解碼器,這意味著他們可以解碼4條指令并行輸出微操作。
但蘋(píng)果有一個(gè)瘋狂的 8 解碼器。不僅如此,ROB的體積是它的三倍?;旧峡梢匀菁{3倍的指令。沒(méi)有其他主流芯片廠商的CPU里有那么多解碼器。
為什么英特爾和 AMD 無(wú)法添加更多指令解碼器?
這是我們最終看到 RISC 可以“復(fù)仇”的地方,也是M1 Firestorm核心采用ARM RISC架構(gòu)的事實(shí)開(kāi)始變得重要的地方。
對(duì)于x86來(lái)說(shuō),一條指令可以有1-15個(gè)字節(jié)的長(zhǎng)度。在RISC芯片上,指令的大小是固定的。為什么在這種情況下會(huì)有關(guān)系呢?
可以看到,對(duì)于x86來(lái)說(shuō),一條指令的長(zhǎng)度可以是1-15字節(jié)。而在RISC芯片上,指令的大小是固定的。為什么這與本案相關(guān)?
因?yàn)槿绻織l指令都有相同的長(zhǎng)度,那么將一個(gè)字節(jié)流分割成指令并行地輸入8個(gè)不同的解碼器就變得簡(jiǎn)單多了!
但是,在 x86 CPU 上,解碼器不知道下一個(gè)指令從哪兒開(kāi)始的。它必須實(shí)際分析每個(gè)指令,才能看到它有多長(zhǎng)。
英特爾和AMD采用“粗暴”的方式來(lái)處理這個(gè)問(wèn)題,首先它會(huì)簡(jiǎn)單地嘗試在每一個(gè)可能的起點(diǎn)對(duì)指令進(jìn)行解碼。這意味著我們必須處理大量的錯(cuò)誤猜測(cè)和錯(cuò)誤,而這些猜測(cè)和錯(cuò)誤必須被丟棄。這就造成了一個(gè)錯(cuò)綜復(fù)雜的解碼器階段,以至于很難再增加更多的解碼器。但對(duì)于蘋(píng)果來(lái)說(shuō),不斷增加更多的解碼器是很簡(jiǎn)單的。
事實(shí)上增加更多的數(shù)量會(huì)導(dǎo)致很多其他問(wèn)題,按照AMD自己的說(shuō)法,4個(gè)解碼器基本上是他們能做到的上限。
這也是M1 Firestorm核心在同樣的時(shí)鐘頻率下,處理的指令數(shù)量基本上是AMD和Intel CPU兩倍的原因。
有人可以反駁說(shuō),CISC指令會(huì)變成更多的微操作,它們的密度更高,所以例如解碼一條x86指令更類(lèi)似于解碼兩條ARM指令。
只是現(xiàn)實(shí)中并非如此。高度優(yōu)化的x86代碼很少使用復(fù)雜的CISC指令。在某些方面它有RISC的味道。
但這對(duì)英特爾或AMD沒(méi)有任何幫助,因?yàn)榧词鼓切?5字節(jié)長(zhǎng)的指令很少,也必須讓解碼器來(lái)處理它們。這就產(chǎn)生了復(fù)雜性,阻礙了AMD和Intel增加更多的解碼器。
但 Amds Zen3 核心仍然更快, 對(duì)嗎?
據(jù)我所知,最新的AMD CPU內(nèi)核在性能測(cè)試中,被稱(chēng)為Zen3的內(nèi)核比Firestorm內(nèi)核稍微快一些。但這里的關(guān)鍵是,這只是因?yàn)閆en3核心的時(shí)鐘頻率為5GHz,而Firestorm核心的時(shí)鐘頻率為3.2GHz。盡管Zen3的時(shí)鐘頻率比Firestorm高出近60%,但也只是勉強(qiáng)強(qiáng)過(guò)了Firestorm。
那么為什么蘋(píng)果不增加時(shí)鐘頻率呢?因?yàn)楦叩臅r(shí)鐘頻率會(huì)使芯片更熱。這是蘋(píng)果的關(guān)鍵賣(mài)點(diǎn)之一。與英特爾和AMD的產(chǎn)品不同,他們的電腦幾乎不需要風(fēng)扇。
從本質(zhì)上說(shuō),人們可以說(shuō)Firestorm內(nèi)核確實(shí)優(yōu)于Zen3內(nèi)核。Zen3只是消耗更多功耗,才得以為此更高的性能。
未來(lái)
AMD和英特爾似乎在兩方面把自己逼到了絕境:
他們沒(méi)有一個(gè)業(yè)務(wù)模型,使得追求異構(gòu)計(jì)算和SoC設(shè)計(jì)變得容易。
他們的遺留x86 CISC指令集又回來(lái)困擾他們,使其難以提高OoO性能。
這并不意味著游戲結(jié)束。它們當(dāng)然可以簡(jiǎn)單地增加時(shí)鐘頻率,使用更多的冷卻,增加更多的核心,增強(qiáng)CPU緩存等等。但這些都處于劣勢(shì)。英特爾處于最糟糕的情況下,因?yàn)樗麄兊暮诵囊呀?jīng)被Firestorm徹底打敗了,而且他們有GPU也很弱。
添加更多核心的問(wèn)題是,對(duì)于典型的桌面工作負(fù)載,過(guò)多的核心性能提升并不明顯。當(dāng)然,大量的核心對(duì)于服務(wù)器來(lái)說(shuō)還是非常有效的。
幸運(yùn)的是,對(duì)于AMD和英特爾來(lái)說(shuō),蘋(píng)果并不在市場(chǎng)上銷(xiāo)售他們的芯片。所以PC用戶(hù)將不得不忍受他們提供的任何東西。
