編者按:蘋果今年最大的亮點也許不是手機,而是一塊小小的晶片。M1發布會雖然已經過去了一陣子,但圍繞著它的討論依然不見平息。不過,對它的討論很多都不在點子上,在技術方面解釋得既不夠深入也不夠易懂。在這方面,Erik Engheim在Medium上發表的這篇文章也許是最詳細最易懂的技術指南了。
閱讀本文,你將了解以下幾點:
1)為什麼M1會這麼快?
2)蘋果是不是用了什麼獨門絕招才做到這一點?
3)英特爾和AMD能不能效仿?
原文標題是:Why Is Apple’s M1 Chip So Fast?
劃重點:
700美元的新M1 Mac Mini戰勝了4000美元的舊iMacM1不是CPU,而是SoC蘋果採取異構計算策略來提高性能:不是增加內核,而是加入更多的專用晶片CPU與GPU消耗內存之別猶如法國大餐與垃圾食品,蘋果的統一內存架構很關鍵英特爾和AMD抄不了蘋果的作業在YouTube上,我看到有位Mac用戶去年買了一臺iMac。它把內存配到了40 GB,花了他大約4000美元。但是,這麼一臺超貴的iMac,結果卻被他用少得可憐的700美元買來的新M1 Mac Mini令人難以置信地給幹掉了。
在一次又一次的實測當中,M1 Macs不僅僅只是超過了頂級的Intel Macs,而且還是壓倒性的優勢。大家一臉的不敢相信,開始問這怎麼可能?
如果你是其中之一的話,你算是來對地方了。在本文中,我打算把這個問題拆解成比較容易消化的幾個部分,就像蘋果對M1所做的一樣。具體來說,我認為很多人會有以下一些問題:
這個M1晶片這麼之快的技術原因是什麼?蘋果是不是做出了一些真正具有獨創性的技術選擇來實現這一目標?像英特爾和AMD這樣的競爭對手採用相同的技術花招的容易程度如何?當然,你也可以試著Google一下,但如果你試圖了解蘋果都幹了什麼的話,你能找到的除了膚淺的解釋以外,就會使一堆技術含量很高的術語,比方說M1用了非常寬泛的指令解碼器,龐大的重排序緩衝器(ROB)等。除非你是CPU硬體極客,否則這些東西大多跟沒說一樣。
為了更好地理解本文,我建議可以先看看我之前的一篇文章:「2020年對於RISC和CISC來說意味著什麼?」 在那篇文章裡,我解釋什麼是微處理器(CPU)以及各種重要概念,比方說:
指令集架構(ISA)流水線加載/存儲架構微碼與微指令不過,如果你不耐煩的話,我可以簡要介紹一下有助於理解我對M1晶片的解釋所需要了解的材料。
什麼是處理器(CPU)?
一般來說,當談到英特爾和AMD的晶片時,我們談論的是指中央處理器(CPU)或微處理器。CPU會從內存中提取指令。然後,一般會按順序執行每個一條指令。
一個非常基本的RISC CPU,不是M1那種。指令從內存沿藍色箭頭轉到指令寄存器。然後解碼器會弄清楚指令是什麼,並通過紅色控制線啟用CPU的不同部分。ALU會對寄存器裡面的數字進行加減。
就最底層而言,CPU是一種有若干叫做寄存器的命名存儲單元,以及若干叫做算術邏輯單元(ALU)的計算單元組成的設備。ALU執行加法、減法及其他基本數學運算之類的操作。不過,這些操作指跟CPU寄存器連接。如果要讓兩個數相加,你得從內存取出這兩個數字,然後放進CPU的兩個寄存器裡面。
以下是RISC CPU(M1也屬於這種)執行的一些典型的指令示例。
load r1, 150load r2, 200add r1, r2store r1, 310
這裡的r1和r2就是我所說的寄存器。如果數字不在像這樣的寄存器內的話,現代RISC CPU是沒法進行操作的。比方說,它沒法對位於RAM不同位置的兩個數字進行相加。相反,它必須把這兩個數字放到一個獨立的寄存器裡面。我們這裡所舉的那個簡單例子幹的就是這個。我們從RAM內存位置150處提取出數字,並將其放入CPU的寄存器r1中。然後,我們把地址200的內容放入寄存器r2中。只有這樣,數字才可以用add r1,r2指令進行相加。
一臺舊式機械計算器,有兩個寄存器:分別是累加器和輸入寄存器。現代CPU一般有十幾個寄存器,而且是電子的而不是機械的。
寄存器的概念很古老了。比方說,在這個舊的機械計算器上,寄存器是用來保存要相加的數字的。收銀機(cash register)也許就源於此。寄存器就是登記輸入數字的地方。
M1不是CPU!
不過關於M1,了解這一點非常重要:
M1不是CPU,而是由多個晶片組成的整個系統,全部都封裝進放一大塊矽裡面。CPU只是其中一顆晶片。
基本上,M1算是把整個計算機都集成到了一塊晶片上面。M1含有一顆CPU,有圖形處理單元(GPU),內存,輸入和輸出控制器,以及構成整臺計算機的眾多其他功能。這就是所謂的片上系統(SoC)。
M1是片上系統(SoC)。這意味著構成計算機的所有組件都放在一塊矽晶片上。
今天,如果你買晶片的話(不管是從英特爾還是從AMD那裡買),你得到的實際上是封裝在一起的多顆微處理器。在過去,計算機的主板上會配置有多顆物理上獨立的晶片。
計算機主板的例子。內存、CPU、圖形卡、IO控制器、網卡以及許多其他組件連接到主板上進行相互通信。
但是,由於今天我們能夠往矽晶上面放太多的電晶體了,所以英特爾和AMD等公司開始把多個微處理器集成到一塊晶片上。我們把這些晶片叫做CPU內核。一個內核基本上算是一個完全獨立的晶片,可以從內存中讀取指令並執行計算。
有多個CPU內核的微晶片。
長期以來,就提高性能而言,這一直是問題的實質:就是不斷增加更多的通用CPU內核。不過這種做法受到了幹擾。在CPU市場裡面,有一個玩家開始背道而馳。
蘋果沒那麼神秘的異構計算策略
蘋果沒有往裡面添加更多的通用CPU內核,而是採取了另一種策略:他們開始加入更多的專用晶片來完成一些特殊的任務。這樣做的好處是,專用晶片的耗電往往比通用CPU內核少得多,執行特定任務往往又快得多。
其實這不是什麼新知識。多年以來來,Nvidia和AMD的圖形卡就內置了類似圖形處理單元(GPU)之類的專用晶片,它們執行跟圖形相關的操作要比通用CPU快得多。
蘋果所做的只是朝這個方向做出了更大的轉變。M1不僅配置了通用內核和內存,還包含有各種專用晶片:
中央處理器(CPU)——該片上系統的「大腦」。跑作業系統和應用的大部分代碼。圖形處理單元(GPU)——處理跟圖形相關的任務,比方說可視化應用的用戶界面和2D / 3D遊戲渲染。圖像處理單元(ISP)——可用於加速圖像處理應用完成的常見任務。數位訊號處理器(DSP)——處理CPU所不為的數學密集型功能。包括音樂文件解壓縮等。神經處理單元(NPU)——用於高端智慧型手機,可加速機器學習(AI)任務。其中包括語音識別和相機處理。視頻編碼器/解碼器——高能效地處理視頻文件和格式轉換。Secure Enclave——加密身份驗證和安全性。統一內存——可讓CPU、GPU以及其他內核快速交換信息。這就是為什麼很多人用M1 Mac進行圖像和視頻編輯時看到速度快得飛起的部分原因所在。他們執行的很多任務都可以直接在專用硬體上運行。這樣一來,廉價的M1 Mac Mini不費吹灰之力就可以對大型視頻文件進行編碼,而昂貴的iMac就算讓所有的風扇轉到飛起也沒法跟上前者的原因。
藍色是多核CPU內核正在訪問內存,綠色是大量GPU內核正在訪問內存。
蘋果的統一內存架構有何特殊之處?
蘋果的「統一內存架構」(UMA)有點費解(我剛開始的時候就搞錯了)。
為了解釋原因,我們需要退後一步。
長期以來,廉價的計算機系統已經把CPU和GPU集成到同一塊晶片(同一塊矽片)裡面。這種做法的慢是眾所周知的。過去所說的「集成顯卡」跟 「圖形處理慢」基本上是一個意思。
之所以慢,是因為若干的原因:
內存的單獨區域要預留給CPU和GPU。如果CPU想要讓GPU使用大量數據,它不能夠告訴對方說「這是我的部分內存」就了事。不行,CPU必須把數據複製一份到GPU控制的存儲區域上。
CPU不需要提供大量數據,但希望能快點提供。
CPU和GPU對內存的使用期望不一樣。不妨用食物做一個愚蠢的類比:CPU希望服務員快點上菜(裝數據的碟子),一點點上也沒關係。想像有一家豪華的法國餐廳,裡面的服務員都是穿旱冰鞋的,所以可以為你提供快速服務。
GPU對內存的期望:一起上。多多益善。
相反,GPU可以接受上菜(數據)慢。但是你不能一點點地上,要上就得上大菜。它們需要吞噬大量的數據,因為GPU是規模龐大的並行機器,可以並行讀取大量數據。不妨想像有一家垃圾食品店,上菜需要花點時間,因為他們要全部備好食物才一起上。
鑑於需求如此的不一樣,把CPU和GPU放在同一塊物理晶片上顯然不是一個好主意。如果只上一點點的法國菜,GPU就只能坐在那裡挨餓。其結果是,把強大的GPU放進SoC毫無意義。那一點點數據都不夠GPU塞牙縫。
第二個問題是大型GPU會產生大量熱量,所以如果跟CPU集成在一起你沒法不遇到發熱過大的問題。所以,獨立顯卡看起來往往像下面這樣的:有著大型冷卻風扇的大怪獸。這種顯卡有專用的內存,旨在為貪婪的顯卡提供大量數據。
GeForce RTX 3080顯卡
GeForce RTX 3080顯卡
這就是為什麼這些顯卡性能高的原因所在。但是它們有一個致命的弱點:當它們必須從CPU使用的內存裡面獲取數據時,得通過印刷在主板上的一組銅線,也就是所謂的PCIe總線進行。你試試用一根超級細的吸管喝水看看。水倒是一下子就吸上來了,但是水量不夠啊。
蘋果的統一內存架構試圖把所有這些問題都解決掉,但又避免掉過去那種共享內存的缺點。為了實現這一目標,他們採取了以下一些手段:
沒有專門給CPU或GPU保留的特殊區域。內存同時分配給兩種處理器。它們都可以使用同樣的內存。不需要數據複製。蘋果採用的內存既可存儲大量數據,又可以快速存儲數據。用計算機的術語來說,就是所謂的低延遲和高吞吐量。所以,就不需要將不同類型的內存連接起來了。蘋果降低了GPU的功耗,因此可以集成功能相對強大的GPU,而又不會導致SoC過熱。有人會說統一內存也不是什麼新概念。的確,過去就有不同的系統有個這種玩意兒。但那時候對內存需求的差異可能並沒有那麼大。其次,Nvidia所謂的統一內存並不是一回事。在Nvidea的世界裡,統一內存只是意味著有軟體和硬體專門負責在獨立的CPU和GPU內存之間來回複製數據。因此,從程式設計師的角度來看,蘋果和Nvidia的統一內存也許是一樣的,但是從物理意義上來說並不相同。
當然,這種策略需要有權衡取捨。要想實現這種高帶寬的內存(份量大),要求內存要完全集成進來,這意味著客戶升級內存的機會被剝奪了。但是,蘋果在尋求儘量提高內存與SSD硬碟的通信速度,讓它們在本質上相當於舊式內存一樣,從而讓這個問題最小化。
在統一內存之前Mac是怎麼用GPU的?蘋果甚至提供了用Thunderbolt 3電纜連接外部圖形卡的選項。有人猜測將來仍有這種可能。
既然SoC這麼智能,英特爾和AMD為什麼不抄作業呢?
既然蘋果在做的事情這麼聰明的話,為什麼不是每個人都這麼做呢?從某種程度上來說,別人也在抄作業。其他的ARM晶片製造商在專用硬體方面的投入也越來越大。
AMD也開始在自家的某些晶片上部署功能更強大的GPU,並部署加速處理單元(APU,這種處理器基本上算是放在同一塊矽片上的CPU內核加GPU內核),可以說是朝著某種形式的SoC邁進。
AMD Ryzen加速處理單元(APU)在一塊矽片上集成了CPU和GPU(Radeon Vega)。但是,其他的協處理器,IO控制器或統一內存並不包含在內。
不過他們做不到這一點。因為一個重要的原因。SoC本質上是整臺計算機都集成在一塊晶片上。所以這種做法更適合計算機製造商,比方說HP和Dell。不妨讓我再用一個愚蠢的類比來澄清:如果你原來的商業模式是製造和銷售汽車發動機的話,那製造和銷售整車就會是一次不同尋常的飛躍。
相比之下,對於ARM而言,這倒不是問題。戴爾或惠普等計算機製造商完全可以賣ARM的智慧財產權許可,併購買其他晶片的IP,就可以把它們認為自己的SoC應該具備的特殊硬體添加進來了。然後,他們再把做好的設計交給格羅方德(GlobalFoundries)或臺積電(TSMC,現在在給AMD和蘋果代工晶片)等半導體代工廠即可。
臺積電的半導體代工廠。臺積電在為AMD、蘋果、英偉達以及高通等公司生產晶片。
英特爾和AMD的商業模式遇到了大問題。他們的商業模式是以賣通用CPU為基礎的,大家只需要把CPU插入大型PC主板即可。因此,計算機製造商只需要從不同的供應商處購買主板、內存、CPU和顯卡,然後將其集成為一個解決方案即可。
但是我們現在正在迅速遠離那個世界。在新的SoC的世界裡,你不需要組裝來自不同供應商的物理組件,而是組裝來自其他供應商的IP(智慧財產權)。你從不同的供應商處購買顯卡、CPU、數據機、IO控制器以及其他產品的設計,然後用來設計自己的的SoC 。之後再找一家晶圓代工廠生產即可。
但現在你會遇到一個大問題,因為英特爾、AMD或Nvidia都不會把自己的智慧財產權許可給戴爾或惠普,讓他們給自己的機器製造SoC 。
當然,英特爾和AMD完全可以賣整塊完工的SoC 。但是這些SoC會包含些什麼呢?PC製造商對SoC應該包含的東西可能會有不同的想法。英特爾、AMD、微軟和PC製造商之間的想法可能會因為SoC應包含哪種專用晶片而發生衝突,因為這些晶片需要軟體的支持。
對於蘋果來說,這件事情很簡單。因為他們控制了電子產品的全部。比方說,蘋果提供了Core ML庫給開發者編寫機器學習程序。Core ML究竟是在蘋果的CPU上面跑還是在Neural Engine上面跑,開發者並不需要關心。
(下)
劃重點:
CPU提高性能的兩種策略:要麼跑快點,要麼跑多點,但跑快點這條路已經走到盡頭跑多點也有兩種策略:增加內核,或者亂序執行(OoO),蘋果走的是後面這條路AMD和Intel的亂序執行要比M1遜色因為體系架構問題,英特爾和AMD沒機會趕上蘋果的CPU了任何CPU想要快速運行都要面臨的根本挑戰
所以說,異構計算是部分原因,而不是唯一的原因。M1上面所謂的快速通用CPU內核Firestorm確實很快。跟過去與英特爾和AMD的內核相比較弱的ARM CPU內核相比,這是一個重大差異。
在對標中,Firestorm擊敗了大多數的英特爾內核,幾乎擊敗了最快的AMD Ryzen內核。按照傳統觀點的話,這是不可能的。
在討論是什麼導致Firestorm跑得這麼快之前,我們先要了解讓CPU跑得快的核心思想是什麼。
原則上,你可以結合以下兩種策略來實現:
串行更快地執行更多的指令。並行執行大量指令。上世紀80年代的時候,做到這一點很容易。只需要增加時鐘頻率,指令就能加快完成。時鐘周期是CPU工作的最小時間單位,是計算機執行某項操作的時候。不過這想操作可以是很微小的操作。所以,一條指令可能由多個較小的任務組成,因此可能需要多個時鐘周期才能完成。
但是,現在再想提高時鐘頻率已經幾乎不可能了大家嘴裡反覆絮叨的「摩爾定律的終結」真的來了。
所以,現在其實就剩下並行執行儘可能多的指令這條路了。
多核還是亂序處理器?
這條路也有兩種走法。一種是增加更多的CPU內核。從軟體開發者的角度來看,這就好比增加線程。每個CPU內核就像一個硬體的線程。如果你還不知道什麼是線程,可以把它看作是執行任務的過程。一個CPU有兩個內核的話,就可以同時執行兩項單獨的任務:兩個線程。這些任務可以描述為兩個獨立的程序存儲在內存當中,或者實際上也可以是同一程序執行兩次。每個線程都需要做一些記錄,比方說本線程目前在一系列程序指令當中的位置。每個線程都可以存儲臨時結果,而且應該是獨立存放的。
原則上,只有一個內核的處理器也能跑多個線程。不過,在這種情況下,它只是把一個線程暫停並保存當前進程,再切換到另一線程運行。稍後再切換回來。這種做法並不能帶來太多的性能增強,只是在線程可能經常要停下來等待用戶輸入,或者網絡連接速度慢要等數據的時候使用。這些可以稱之為為軟體線程。硬體線程意味著擁有真正的額外物理硬體,比方說額外的內核,可以加快處理速度。
問題在於,開發者得會寫代碼來利用這種優勢。其中的部分任務(比方說伺服器軟體)是很容易寫的。你可以想像分別處理每一位連接用戶。這些任務互相之間獨立性太強了,以至於擁有大量內核是伺服器(尤其是基於雲的服務)的絕佳選擇。
有128個內核的Ampere Altra Max ARM CPU專為雲計算而設計,硬體線程多是其好處之一。
這就是為什麼你會看到類似Ampere之類的ARM CPU製造商會製造像Altra Max這樣的CPU的原因,這款處理器有著瘋狂的128核!這種晶片是專門為雲計算準備的。你不需要瘋狂的單核性能,因為在雲端,關鍵是在儘可能節能的情況下讓儘可能多的線程來處理儘可能多的並發用戶。
相比之下,蘋果則處在另一端。蘋果製造的是單用戶設備。多線程並不是優勢。他們的設備主要用來玩遊戲,視頻編輯,做開發等。他們希望臺式機有漂亮的響應性好的圖形和動畫。
桌面軟體一般不會用很多的內核。比方說,8核也許能讓計算機遊戲受益,但是像128核之類的東西完全就是浪費。相反,你需要更少但更強大的內核。
亂序執行的機制
有趣的來了,亂序執行。亂序執行可以並行執行更多指令但又不用做成多線程的方式。開發者不必專門寫軟體就能利用這種能力。從開發者的角度來看,似乎每個內核都跑得更快了。
要想了解其工作原理,你需要先了解一些有關內存的知識。請求訪問內存特定位置的數據是很慢的。但是,獲取1位元組數據的時延跟獲取128位元組的數據的時延卻沒有分別。數據要通過我們所謂的數據總線來發送。你可以把數據總線看作是內存與數據通過的CPU不同部分之間的一條通道或管道,數據就是通過這條管道來傳輸的。實際上,當然那只是一些導電的銅線。如果數據總線足夠寬的話,就可以同時存取多個字節。
所以,CPU一次會執行一大塊的指令。但是是按照次序一條接一條地執行的。現代的微處理器則會做所謂的亂序操作(OoO )。
這意味著他們能夠對指令緩衝區進行快速分析,弄清楚哪些指令依賴於哪個指令。不妨看看下面這個簡單的例子:
01: mul r1, r2, r3 // r1 ← r2 × r302: add r4, r1, 5 // r4 ← r1 + 503: add r6, r2, 1 // r6 ← r2 + 1
乘法往往一般都很慢。可以這麼說,乘法需要多個時鐘周期來執行。第二條指令只能等,因為它的計算要取決於知道了放進r1寄存器的結果才行。
但是,第3行的第3條指令就不需要依賴於之前的指令的計算。所以,亂序處理器可以並行計算這條指令。
不過在現實當中我們談論的是數百條指令。CPU能夠找出這些指令之間的所有依賴關係。
它會通過查看每條指令的輸入來對其進行分析。指令的輸入是否取決於一或多條其他指令的輸出?所謂的輸入和輸出,是指包含有之前計算結果的寄存器。
比方說,add r4,r1、5這條指令要依賴mul r1,r2,r3所輸出的r1。我們可以把這些關係連結在一起,形成CPU可以處理的詳細圖譜。其中節點是指令,而邊則是連接它們的寄存器。
CPU可以對這樣的節點圖譜進行分析,然後確定可以並行執行哪些指令,以及哪些指令中繼續執行之前需要在什麼地方等待多個相關計算的結果。
很多指令會早早就執行完畢,但我們沒法對結果進行官宣。我們不能保證結果;否則的話,我們會以錯誤的順序提供結果。在外界看來,它得看起來就像是按照發出的指令順序執行的。
就像堆棧一樣,CPU會從頂部彈出已完成的指令,直到找到未完成的指令。
這個解釋還不夠完善,但應該能提供一些線索了。基本上就是,你既可以實現程式設計師必須知道的那種並行性,也可以實現那種CPU假裝是一切都是單線程執行的樣子。不過,你知道,在幕後,它正在執行亂序的黑魔法。
正是出眾的亂序執行能力使得M1的Firestorm內核可以狠狠地踢前作的屁股,揚名立萬。實際上,它比英特爾或AMD的任何產品都要強大。可能比主流市場上的任何產品都要強大。
為什麼AMD和Intel的亂序執行要比M1遜色?
在對亂序執行(OoO )的解釋當中,我跳過了一些重要的細節,這裡需要談一下。否則的話,就沒法理解為什麼蘋果能夠在這場遊戲當中領先,為什麼英特爾和AMD可能沒法趕上。
我所說的「scratchpad」實際上就是所謂的「重排序緩衝器(ROB)」,裡面並不包含常規的機器代碼指令。不是那種CPU從內存獲取要執行的東西。這些是CPU指令集體系結構(ISA)裡面的指令。就是那種我們稱之為x86、ARM、PowerPC等的指令。
但是,在內部,CPU會用程式設計師看不到的完全不同的指令集。我們稱之為微指令(micro-ops或μops )。ROB裡面都是這些微指令。
對於CPU施展魔法來讓東西並行運行來說,這個地方可以做的事情要實際得多。原因是微指令的範圍很廣(包含有很多的位),並且可以包含各種元信息。你沒法把那種信息添加到ARM或x86的指令裡面,而很多的元信息只有在當前執行的上下文之中才有意義。
我們可以這麼看,就把它看作是你在寫程序的時候。你有一個公共API,這個API需要保持穩定並且所有人都能用。ARM、x86、PowerPC、MIPS就是這樣的指令集。而微指令基本上是用來實現公共API的專用API。
此外,對於CPU來說,微指令往往更易用。為什麼?因為每一個微指令都只完成一項簡單的有限任務。常規的ISA指令可能更複雜,導致會發生很多事情發生,最終會變成成多個微指令。
對於CISC CPU來說,往往別無選擇只能用微指令,否則大型複雜的CISC指令會導致流水線和OoO幾乎沒法實現。
但RISC CPU就有得選。比方說,小一點的ARM CPU根本不用微指令。但這也意味著做不了類似OoO之類的事情。
但是這又有什麼關係呢?為什麼這個細節對於理解為什麼蘋果能夠壓倒AMD和英特爾非常重要呢?
那是因為CPU能跑多快要取決於往ROB裝填微指令的速度以及數量。填充得越快,能選擇出可以並行執行的指令的機會就越大,而並行執行則意味著性能的提高。
機器代碼指令被所謂的指令解碼器分解成微指令。如果能夠有更多的解碼器,我們就可以並行分解更多的指令,填充ROB的速度就可以更快。
在這一點上,蘋果的M1跟其他的CPU有很大的差別。英特爾和AMD最大微處理器內核有四個解碼器,也就意味著可以並行解碼四條指令分解出微指令。
但是蘋果卻有著瘋狂的8個解碼器。不僅如此,它的ROB大概比別人大3倍。基本上相當於可容納三倍規模的指令。其他主流晶片製造商的CPU沒有一個有這麼多解碼器的。
為什麼英特爾和AMD沒法多加點指令解碼器?
這就是RISC復仇的機會。而M1 Firestorm內核採用的是ARM RISC架構,這一事實開始變得重要起來。
你看,對於x86來說,一條指令的長度在1到15個字節之間。而在RISC晶片上,指令的長度是固定的。這種情況下固定長度為什麼很重要呢?
因為如果每一條指令的長度都一樣的話,把一連串字節分解成指令,並行輸入給8個不同的解碼器這件事就變得微不足道了。
但是,如果是x86 CPU的話,解碼器都不知道下一條指令從哪裡開始。它得分析每一條指令才能知道指令的長度。
英特爾和AMD採取的是暴力破解法,也就是在每個可能的起點對指令進行解碼。這意味著會有很多猜錯的時候,要把錯誤丟棄掉。這會造成解碼器階段十分複雜,繞來繞去,以至於很難再添加更多的解碼器。但是對於蘋果來說,相比之下增加更多的解碼器根本不算事兒。
實際上,添加更多解碼器會導致很多的其他問題,以至於對AMD來說,4個解碼器基本上就是上限了。
其結果是,在相同的時鐘頻率下,M1 Firestorm內核能處理的指令數量實際上是AMD和Intel CPU的兩倍。
有人則認為,因為CISC指令可轉化為更多的微指令,所以密度更大,這樣一來,解碼一條x86指令就類似於解碼兩條ARM指令。
只是在現實世界裡面,情況並非如此。高度優化的x86代碼很少會用複雜的CISC指令。才能夠某種程度來說,它已經有點RISC風格了。
但這對英特爾或AMD毫無幫助,因為就算15位元組長的指令很少見,造出來的解碼器也得處理。而這會導致複雜性,從而阻礙AMD和Intel添加更多的解碼器。
可是AMD的Zen3內核還是更快啊,不是嗎?
據我所知,最新的AMD CPU內核,也就是所謂的Zen3內核在性能基準測試是要比Firestorm內核快一些。但問題是,這僅僅是因為Zen3內核的時鐘頻率為5 GHz。而Firestorm內核的時鐘頻率為3.2 GHz。雖然時鐘頻率提高了近60%,但Zen3也只是勉強比Firestorm快一點。
那蘋果為什麼不相應提高時鐘頻率呢?因為更高的時鐘頻率會導致晶片發熱。但那卻是蘋果的主要賣點之一。跟英特爾和AMD的產品不同,他們的計算機幾乎不需要製冷。
從本質上講,可以說Firestorm內核確實優於Zen3內核。Zen3隻能靠加大電流並變得更熱來讓自己保持領先。而蘋果只是選擇不這麼做而已。
如果蘋果想要提高性能的話,他們只只需要多加些內核就可以了。這樣一來,他們既可以降低功耗,又能提供更高性能。
未來
似乎AMD和Intel在兩個方面都陷入了困境:
他們沒有一個可以輕鬆從事異構計算和SoC設計的商業模式。他們傳統的x86 CISC指令集反過來又給他們造成困擾,導致難以提高OoO性能。當然,這並不意味著遊戲結束了。他們是可以提高時鐘頻率,強化散熱能力,增加更多內核,擴充CPU緩存等。但這些方面他們也都處於劣勢。英特爾的情況最糟,一方面內核似乎已經被Firestorm擊敗,而且能跟SoC解決方案集成的GPU也很弱。
引入更多內核的問題在於,對於典型的桌面工作負荷來說,內核太多會導致收益遞減。當然,大量內核非常適合伺服器。
但是在這個領域,像Amazon和Ampere之類的公司正在用128核的怪獸CPU發動攻擊。這就像是東線和西線同時開戰。
不過對於AMD和Intel來說,幸運的是,蘋果並沒有直接賣自己的晶片。所以,PC用戶只能接受他們提供的任何產品。PC用戶可能會投奔曹營,但這會是一個緩慢的過程。用戶不會馬上離開自己自己投入了大量資金的平臺。
但是,那些還沒有在任何平臺上面燒太多錢的年輕專業人,他們未來可能會慢慢地轉向蘋果陣營,擴大了後者在高端市場的份額,並因此進一步擴大其在PC市場所佔的利潤份額。
作者:36氪
連結:https://www.zhihu.com/question/429951450/answer/1627915383
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。