蘋果M1芯片如此之快的技術原因是什么?

導讀 蘋果今年最大的亮點也許不是手機 而是一塊小小的芯片。M1發布會雖然已經過去了一陣子 但圍繞著它的討論依然不見平息。不過 對它的討論

蘋果今年最大的亮點也許不是手機 而是一塊小小的芯片。M1發布會雖然已經過去了一陣子 但圍繞著它的討論依然不見平息。不過 對它的討論很多都不在點子上 在技術方面解釋得既不夠深入也不夠易懂。在這方面 Erik Engheim在Medium上發表的這篇文章也許是最詳細最易懂的技術指南了。閱讀本文 你將了解以下幾點:1)為什么M1會這么快?2)蘋果是不是用了什么獨門絕招才做到這一點?3)英特爾AMD能不能效仿?原文標題是:Why Is Apple’s M1 Chip So Fast?篇幅關系 我們分兩部分刊出 此為第一部分。

劃重點:

700美元的新M1 Mac Mini戰勝了4000美元的舊iMac

M1不是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會從內存中提取指令。然后 一般會按順序執行每個一條指令。

就最底層而言 CPU是一種有若干叫做寄存器的命名存儲單元 以及若干叫做算術邏輯單元(ALU)的計算單元組成的設備。ALU執行加法、減法及其他基本數學運算之類的操作。不過 這些操作指跟CPU寄存器連接。如果要讓兩個數相加 你得從內存取出這兩個數字 然后放進CPU的兩個寄存器里面。

以下是RISC CPU(M1也屬于這種)執行的一些典型的指令示例。

load r1 150

load r2 200

add r1 r2

store r1 310

這里的r1和r2就是我所說的寄存器。如果數字不在像這樣的寄存器內的話 現代RISC CPU是沒法進行操作的。比方說 它沒法對位于RAM不同位置的兩個數字進行相加。相反 它必須把這兩個數字放到一個獨立的寄存器里面。我們這里所舉的那個簡單例子干的就是這個。我們從RAM內存位置150處提取出數字 并將其放入CPU的寄存器r1中。然后 我們把地址200的內容放入寄存器r2中。只有這樣 數字才可以用add r1 r2指令進行相加。

寄存器的概念很古老了。比方說 在這個舊的機械計算器上 寄存器是用來保存要相加的數字的。收銀機(cash register)也許就源于此。寄存器就是登記輸入數字的地方。

M1不是CPU!

不過關于M1 了解這一點非常重要:

M1不是CPU 而是由多個芯片組成的整個系統 全部都封裝進放一大塊硅里面。CPU只是其中一顆芯片。

基本上 M1算是把整個計算機都集成到了一塊芯片上面。M1含有一顆CPU 有圖形處理單元(GPU) 內存 輸入和輸出控制器 以及構成整臺計算機的眾多其他功能。這就是所謂的片上系統(SoC)。

今天 如果你買芯片的話(不管是從英特爾還是從AMD那里買) 你得到的實際上是封裝在一起的多顆微處理器。在過去 計算機的主板上會配置有多顆物理上獨立的芯片。

但是 由于今天我們能夠往硅晶上面放太多的晶體管了 所以英特爾和AMD等公司開始把多個微處理器集成到一塊芯片上。我們把這些芯片叫做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就算讓所有的風扇轉到飛起也沒法跟上前者的原因。

蘋果的統一內存架構有何特殊之處?

蘋果的“統一內存架構”(UMA)有點費解(我剛開始的時候就搞錯了)。

為了解釋原因 我們需要退后一步。

長期以來 廉價的計算機系統已經把CPU和GPU集成到同一塊芯片(同一塊硅片)里面。這種做法的慢是眾所周知的。過去所說的“集成顯卡”跟 “圖形處理慢”基本上是一個意思。

之所以慢 是因為若干的原因:

內存的單獨區域要預留給CPU和GPU。如果CPU想要讓GPU使用大量數據 它不能夠告訴對方說“這是我的部分內存”就了事。不行 CPU必須把數據復制一份到GPU控制的存儲區域上。

CPU和GPU對內存的使用期望不一樣。不妨用食物做一個愚蠢的類比:CPU希望服務員快點上菜(裝數據的碟子) 一點點上也沒關系。想象有一家豪華的法國餐廳 里面的服務員都是穿旱冰鞋的 所以可以為你提供快速服務。

相反 GPU可以接受上菜(數據)慢。但是你不能一點點地上 要上就得上大菜。它們需要吞噬大量的數據 因為GPU是規模龐大的并行機器 可以并行讀取大量數據。不妨想象有一家垃圾食品店 上菜需要花點時間 因為他們要全部備好食物才一起上。

鑒于需求如此的不一樣 把CPU和GPU放在同一塊物理芯片上顯然不是一個好主意。如果只上一點點的法國菜 GPU就只能坐在那里挨餓。其結果是 把強大的GPU放進SoC毫無意義。那一點點數據都不夠GPU塞牙縫。

第二個問題是大型GPU會產生大量熱量 所以如果跟CPU集成在一起你沒法不遇到發熱過大的問題。所以 獨立顯卡看起來往往像下面這樣的:有著大型冷卻風扇的大怪獸。這種顯卡有專用的內存 旨在為貪婪的顯卡提供大量數據。

這就是為什么這些顯卡性能高的原因所在。但是它們有一個致命的弱點:當它們必須從CPU使用的內存里面獲取數據時 得通過印刷在主板上的一組銅線 也就是所謂的PCIe總線進行。你試試用一根超級細的吸管喝水看看。水倒是一下子就吸上來了 但是水量不夠啊。

蘋果的統一內存架構試圖把所有這些問題都解決掉 但又避免掉過去那種共享內存的缺點。為了實現這一目標 他們采取了以下一些手段:

沒有專門給CPU或GPU保留的特殊區域。內存同時分配給兩種處理器。它們都可以使用同樣的內存。不需要數據復制。

蘋果采用的內存既可存儲大量數據 又可以快速存儲數據。用計算機的術語來說 就是所謂的低延遲和高吞吐量。所以 就不需要將不同類型的內存連接起來了。

蘋果降低了GPU的功耗 因此可以集成功能相對強大的GPU 而又不會導致SoC過熱。

有人會說統一內存也不是什么新概念。的確 過去就有不同的系統有個這種玩意兒。但那時候對內存需求的差異可能并沒有那么大。其次 Nvidia所謂的統一內存并不是一回事。在Nvidea的世界里 統一內存只是意味著有軟件和硬件專門負責在獨立的CPU和GPU內存之間來回復制數據。因此 從程序員的角度來看 蘋果和Nvidia的統一內存也許是一樣的 但是從物理意義上來說并不相同。

當然 這種策略需要有權衡取舍。要想實現這種高帶寬的內存(份量大) 要求內存要完全集成進來 這意味著客戶升級內存的機會被剝奪了。但是 蘋果在尋求盡量提高內存與SSD硬盤的通信速度 讓它們在本質上相當于舊式內存一樣 從而讓這個問題最小化。

既然SoC這么智能 英特爾和AMD為什么不抄作業呢?

既然蘋果在做的事情這么聰明的話 為什么不是每個人都這么做呢?從某種程度上來說 別人也在抄作業。其他的ARM芯片制造商在專用硬件方面的投入也越來越大。

AMD也開始在自家的某些芯片上部署功能更強大的GPU 并部署加速處理單元(APU 這種處理器基本上算是放在同一塊硅片上的CPU內核加GPU內核) 可以說是朝著某種形式的SoC邁進。

不過他們做不到這一點。因為一個重要的原因。SoC本質上是整臺計算機都集成在一塊芯片上。所以這種做法更適合計算機制造商 比方說HP和Dell。不妨讓我再用一個愚蠢的類比來澄清:如果你原來的商業模式是制造和銷售汽車發動機的話 那制造和銷售整車就會是一次不同尋常的飛躍。

相比之下 對于ARM而言 這倒不是問題。戴爾或惠普等計算機制造商完全可以賣ARM的知識產權許可 并購買其他芯片的IP 就可以把它們認為自己的SoC應該具備的特殊硬件添加進來了。然后 他們再把做好的設計交給格羅方德(GlobalFoundries)或臺積電(TSMC 現在在給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上面跑 開發者并不需要關心。 責任編輯:tzh

免責聲明:本文由用戶上傳,如有侵權請聯系刪除!