蘋果公司是第一家市值達到 1T美元的企業。通過像 iPod/iPhone/iPad 這樣的熱門產品,無與倫比的品牌,以及史蒂夫?喬布斯的現實扭曲場,成功地讓科技變得很酷。
在這令人印象深刻的執行力背后,是近乎癡迷的硬件優化: 自 1984 年 Mac 發布以來,蘋果已經三次CPU 架構的遷移。這不是一件容易的事。每當一家計算機公司宣布 CPU 體系結構遷移時,人們普遍懷疑該公司是否能夠在整個軟件生態系統一次性遭到棄用的情況下生存下來。在軟件還是裝在紙板箱里的日子里,這種懷疑幾乎到了難以置信的地步。
蘋果是無可爭議的 CPU 架構遷移之王。在短期內對痛苦的容忍讓他們掌握了處理器的游戲。每一個新的 CPU 架構都使得蘋果能夠在生存威脅面前保持競爭力,或者將自己置于競爭對手之上。
本文將著重介紹蘋果公司的業務背景,為什么每次遷移都是必要的,并展示蘋果如何在每次遷移中幸存下來,最終變得比以前更加強大。
圖片
1. 摩托羅拉 68k:1984 年
那時候,蘋果公司正步履蹣跚。它早期突破性的成功和搖錢樹,1977 年蘋果 II 的沃茲尼亞克魔法,在它的年齡下搖搖欲墜。
IBM 個人電腦剛剛進入大眾市場,促使前所未有的個人電腦采購訂單大量涌入。24 歲的天才比爾?蓋茨受邀為 IBM 公司提供操作系統。5 年來,史蒂夫?喬布斯被董事會降級,負責低端的Macintosh電腦項目。
1.1 選擇 CPU
喬布斯領導下的Macintosh電腦最初是廉價的大眾市場消費產品,后來轉而專注于一件事: 搶走 LISA 團隊的風頭。喬布斯為Macintosh電腦引入了一種尖端的完全不是偷來的圖形用戶界面,并要求他的團隊找到當時可用的最先進的硬件。
如果想在個人電腦領域有所作為,對 CPU 的選擇是至關重要的。這是操作系統賴以生存的硬件,也是培育軟件生態系統的平臺。
非常早期的個人電腦(像沃茲尼亞克這樣的業余愛好者在他們的車庫里組裝的那種)使用的是 8 位 CPU。但是如果在 1980 年代早期設計一個強大的大眾市場計算機,要使用現代的 16 位處理器架構。實際上有三個主要的選擇: 英特爾 8088,Zilog Z8000,或摩托羅拉 68k。這里,8 位和 16 位是指 CPU 使用的寄存器和數據總線的大小,或者以比特位為單位的 “寬度”。
1.2 中央處理器和寄存器
CPU 是一種將數據從計算機內存 (RAM) 轉移到寄存器中的設備,對這些數據執行操作,然后將輸出轉移回內存中。
圖片
寄存器是電子存儲器中最小的單元,每個寄存器在中央處理器的核心只容納幾個比特位。CPU 按照指令 (計算機程序) 對這些數據執行操作ーー處理比特位 (1 和 0)。
這些操作由算術邏輯單元 (ALU) 執行。這基本上是執行簡單、專業工作的電路集合,例如:
- 把二進制數相加,例如 0010 + 0101 = 0111
- 執行邏輯運算,例如 NOT 0000 = 1111
- 移位,例如左移 0011 一個位就變成了 0110
CPU 的控制單元一次解碼一條指令,以決定哪些數據應該移動到哪個寄存器,哪個寄存器的數據應該通過哪個 ALU 電路。
多次、非常迅速地執行這些操作,最終得到的輸出結果包括矩陣乘法、視頻游戲中的碰撞物理,或將圖像數據柵格化為屏幕上的像素。
1.3 8位和16位
那么為什么比特位寬很重要呢?
一個 8 位的 CPU 可以在一個時鐘周期內對 0010110 位執行 NOT 操作,將其位數反轉為 1101001 位。一個 16 位的 CPU 可以在同樣的時間內將 10100100010110 轉換成 01011001101001。
此外,一個 8 位寄存器可以指向 RAM 中的 28 個不同字節的 “地址” ーー只有區區 256 個地址,我們可以在其中查找數據。由于這個限制,大多數 8 位計算機需要兩個寄存器來存儲內存地址。16 位寄存器,或者兩個 8 位寄存器相互堆疊,可以指向 216 個內存地址,這意味著可以訪問 64kb 的內存。
當從 8 位 (1 字節) 升級到 16 位 CPU (2 字節) 時,Endian-ness 成為主要的兼容性考慮因素。系統要么是big-endian,要么是little-endian,后者定義了它們存儲字節的順序ーー例如,數字 41,394 以十六進制的方式存儲在寄存器中,在big-endian系統中是 A1 B2,在little-endian系統中是 B2 A1。
最后,“數據總線” 指的是連接 CPU 和主存的電路, 16 位總線在讀寫內存數據方面的速度基本上是 8 位總線的兩倍。
1.4 選擇哪種芯片架構?
在1980年代初的微處理器市場中,Intel 8088 是最具影響力的一款芯片之一。它是一款 8/16 位處理器,擁有 8 位寄存器和 16 位數據總線,支持 20 位內存尋址,最大可訪問 640KB 內存。由于 IBM PC 采用了這一架構,使得它擁有了一個強大且成熟的軟件生態系統。此外,英特爾憑借其巨大的生產規模,使這款芯片在1983年的價格低至約 35 美元,極具成本優勢。該芯片采用 little-endian 字節序,進一步影響了后續 PC 兼容平臺的設計方向。
與此同時,Zilog 推出了 Z8000,這是一款純 16 位的微處理器,配備了 16 位寄存器和 16 位數據總線,支持 23 位地址空間,最多可使用 8MB 內存。然而,盡管 Z8000 在技術上表現不俗,卻未能獲得廣泛采用。它的架構缺乏主流廠商的支持,軟件生態也非常有限。在1983年,Z8000 的價格約為 55 美元,處于中等價位區間,Zilog 希望通過這一價格策略來擴大市場份額。該芯片采用 big-endian 字節序,在系統設計上具有一定優勢,但最終并未形成廣泛的行業影響力。
相比之下,Motorola 68000(簡稱 68k)則代表了當時更高性能的選擇。它是一款 16/32 位混合架構處理器,擁有 32 位寄存器和 16 位數據總線,支持 24 位內存尋址,理論上可訪問高達 16MB 的內存。這一特性在后來 Macintosh 的設計中變得尤為重要——Mac 系統將最大的 12MB 內存預留給操作系統,而僅用 4MB 來運行應用程序。Motorola 68k 的架構也得到了一定數量的開發支持,尤其是在蘋果早期產品如 Apple I 和 Apple II 中已建立了合作關系。1983 年時,68k 的價格約為 70 美元,屬于中高端市場定位,同樣采用 big-endian 字節序。
盡管 Motorola 68k 的軟件生態系統相比 IBM PC 所使用的 Intel 架構較弱,但這種犧牲被認為是實現品牌差異化所必須的。更重要的是,68k 擁有一個幾乎完全正交的指令集——這意味著幾乎每條指令都可以作用于幾乎所有寄存器,而不像其他許多 CPU 那樣對某些寄存器有特定限制。這種正交性大大簡化了編程難度,非常適合培育初期的軟件生態。從長遠來看,這也成為了它吸引開發者的一個關鍵優勢。
圖片
2.PowerPC: 1994年
那是 1994 年, 史蒂夫?喬布斯 8 年前被蘋果公司解雇,現在正忙于發明皮克斯和 NeXT。蘋果正在變得無足輕重。原來的 PC 競爭對手 IBM 正在經歷一個漫長而痛苦的過程,他們的午餐被微軟吃掉了。
上世紀 90 年代,英特爾和比爾?蓋茨締結了一樁被稱為 Wintel 的邪惡婚姻,在兩家公司都獲得了近乎壟斷的地位。除了不斷改進他們強大的 x86 芯片架構,英特爾給他們的芯片起了一個很酷的名字。奔騰處理器為微軟的市場份額提供了動力。這并不是要貶低 x86 芯片架構的威力,英特爾憑借 100mhz 的時鐘速度和無與倫比的電源效率贏得了統治地位。上世紀 90 年代,使用 68000 芯片的摩托羅拉公司沒能跟上蘋果電腦的步伐。
在計算機世界面臨壟斷威脅的情況下,蘋果與其長期合作伙伴摩托羅拉以及一個不太可能的盟友 IBM 聯手。計劃是: 用友誼的力量對抗資本的力量。
AIM (蘋果,IBM,摩托羅拉) 聯盟誕生了。他們意識到 x86 架構有一個關鍵的弱點: 它使用了 CISC 架構。作為回應,AIM 采用了一種 RISC策略: PowerPC。
2.1 CISC 與 RISC
有兩種相反的芯片設計理念:
- CISC (復雜指令集)
- RISC (精簡指令集)
每個 CPU,受到其電路的實際物理布局的限制,可以執行有限數量的不同操作。這些單獨的操作由匯編語言 (也稱為機器碼) 表示。該代碼作為二進制指令序列輸入處理器,并按順序執行。
圖片
這兩個思想流派導致了制造微處理器的不同方法:
- CISC 接受一個復雜的指令集來繼續向您的 CPU 添加功能。最終,我們獲得了用單個指令執行復雜的多步處理的能力,例如著名的求值多項式指令 POLY。雖然這聽起來很神奇,但這也意味著許多內部狀態由處理器控制ーー如果發生任何錯誤,性能將受到毀滅性的打擊。
- RISC 采用 “KISS”方案。CISC 的最大陷阱是開發人員的復雜性。為 CISC 架構編寫程序的編譯器工程師必須查閱 500 頁的手冊,才能找到他們可能需要的指令,而 RISC 工程師則對大腦中的 60 多條指令高興不已。
2.2 Pipeline傳輸
要真正了解 RISC 帶來的主要性能提升,需要通過查看獲取-解碼-執行周期來理解流水線。簡而言之,在一個時鐘周期內 (一個操作在 CPU 上執行的時間) 要完成以下三件事之一:
- Fetch: CPU 從內存中獲取下一個機器代碼指令。
- 解碼: 中央處理器的控制單元解釋的指令,以工作,它實際上做什么。
- 執行: CPU 執行指令,即在寄存器和內存之間移動數據,或通過邏輯單元推送位。
當 CPU 使用更簡單的 RISC 指令集時,這些步驟各占用一個周期,可以并發地排列這些操作。在每個時鐘周期,可以得到 3 個指令運行,并行導致 (平均) 每個時鐘周期執行一個機器碼操作。
圖片
當使用 CISC 時,每個步驟可能不會采用一致的指令周期。對于 POLY 操作,對于 x2 表達式,單獨的執行步驟可能需要 10 個周期。在 CISC 中,很難讓操作很好地排列起來,因此很難在復雜的指令上獲得良好的性能。
簡而言之,流水線是并發地交織這些指令的概念。
2.3 為什么 CPU 體系結構遷移很困難?
蘋果和 AIM 聯盟策劃了他們的計劃。PowerPC 是一種現代的精簡指令集微處理器架構,旨在與占主導地位的 Intel x86 架構直接競爭。
PowerPC 承諾提高效率,也就是說,每瓦特電能可以產生更多的 CPU 操作。而且由于蘋果同時控制軟件和硬件,可以針對這種處理器架構優化 Mac OS。現在只需要遷移他們的生態系統。
為一個處理器編寫的軟件不一定在另一個處理器上運行。不同的處理器系列自然包含不同的指令集,即定義每個 CPU 操作的匯編指令列表。
下面是一段摩托羅拉 68k 的匯編代碼:
MOVE.L $1000, D0 ; Load longword from address $1000 into data register D0
MOVE.L $1004, D1 ; Load longword from address $1004 into data register D1
ADD.L D1, D0 ; Add the values in D0 and D1, result stored in D0
MOVE.L $1000, D0 ; Load longword from address $1000 into data register D1
NOT.L D1 ; Invert all bits in D1現在,下面是 PowerPC 匯編代碼的樣子:
lwz r3, 0x1000 ; Load word from address 0x1000 into register r3
lwz r4, 0x1004 ; Load word from address 0x1004 into register r4
add r5, r3, r4 ; Add the values in r3 and r4, result stored in r5
lwz r3, 0x1000 ; Load word from address 0x1000 into register r3
not r4, r3 ; Invert all bits in r3 and store the result in r4由于機器指令本身是不同的,蘋果生態系統中的所有現有軟件都需要重新編譯,在某些情況下還需要重新編寫,以便在 PowerPC 機器上運行。
2.4 PowerPC 的過渡
蘋果公司制定了兩項策略來應對這種轉變:
- 開發了一個模擬器,PowerPC 可以在其中模擬 motorola CPU。這可以實時地將指令從一個指令集架構轉換到另一個。毫不奇怪,這會帶來巨大的性能成本。幸運的是,由于 PowerPC CPU 非常強大,對于正在升級硬件的用戶來說,模擬通常不是一個大問題。
- 蘋果采用的另一個策略是在過渡期間對軟件使用 “胖二進制文件”。這允許軟件包含為 68k 和 PowerPC 架構編譯的代碼。因此,工程師可以通過包含兩個獨立的二進制文件來發布一個可以在兩個 Mac CPU 平臺上運行的應用程序。
在那個時代,80mb 是一個相當不錯的硬盤驅動器,這是相當惱人的,所以一個二進制剝離工具產生了,最終用戶只需要保存在在自己設備上工作的那一個。
總的來說,蘋果的遷移是成功的。從 68k 升級到 PowerPC 極大地提高了性能。模擬和胖二進制文件允許軟件生態系統順利過渡。
不幸的是,Wintel 聯盟幾乎沒有受到影響。隨著奔騰和 windows95 的發布,它們的市場主導地位達到了前所未有的水平。Windows 成為默認的計算平臺,悲劇性地將世界各地的學校資訊及科技課程轉變為 “如何使用微軟 Office”。
現在他們有了堅實的硬件平臺,蘋果陳舊的 System 7 Mac OS 成為了主要的阻力。打造 Windows 現代競爭對手的內部項目已經失敗,這意味著收購是擺脫困境的唯一途徑,需要購買一款新操作系統。
這為蘋果收購 NeXT 和史蒂夫?喬布斯的回歸奠定了基礎。
圖片
3.英特爾 x86: 2006 年
到了 21 世紀初,喬布斯再次成為 CEO,iPod 將一家市場份額僅為個位數的苦苦掙扎的電腦公司變成了一家消費電子巨頭。
在 80 年代、90 年代和世紀之交,桌面電腦占據了主導地位。但隨著摩爾定律不可阻擋地向前推進,電子產品正在小型化,筆記本電腦正在成為大生意。當硬件沒有連接到電源,電池就成了瓶頸。隨著對性能每瓦特的關注,有一件事情在 2000 年代初期變得清晰: PowerPC 架構無法跟上 Intel x86 巨獸的步伐。
英特爾只是在執行、制造和研發方面超過了競爭對手。他們龐大的 Windows 硬件安裝基礎為兼容軟件提供了一個無與倫比的生態系統,并印制鈔票進一步投資于深化英特爾處理器技術的護城河。
2000 年代早期的 PowerPC CPU 消耗了太多的電能,產生了太多的熱量,以至于無法制造出喬布斯所設想的超薄 MacBook Air。由于超過 50% 的收入來自筆記本電腦,蘋果的決定很明確: 為了競爭,蘋果不得不轉向英特爾。
3.1 WWDC 2005
史蒂夫?喬布斯在 WWDC 2005 上宣布從 PowerPC 轉向英特爾,全球開發者大會上做了最好的解釋:
“兩年前,我站在你們面前,向你們承諾一臺 3 Ghz 的 Mac 電腦,但我們至今還沒能交付給你們。...當我們展望未來時,可以預見到一些我們想為您打造的令人驚嘆的產品,但我們不知道如何在未來的 PowerPC 路線圖中打造它們。
... 所以現在就登錄 Xcode 2.1 獲得你的拷貝吧。演講結束后,登記處的每個人都會立即得到一份。”
作為一個在 2010 年代成為開發者的人,在一個會議上拿起一張 CD 來更新你的最新 Xcode 看起來是如此古怪。
3.2 什么讓英特爾 x86 CPU 如此出色?
英特爾 x86 處理器是 1978 年英特爾 8086 開創的指令集架構家族的后裔。未來的處理器,例如 1982 年的 Intel 80186 或 2000 年的 Pentium 4,保持了與原始指令集的向后兼容性。沒錯。 70 年代在 8086 上編譯的程序在 2000 年代可以正常運行,不需要任何修改。
但是軟件生態系統只是故事的一部分,到 2006 年,高端 Intel x86 處理器的效能功耗比將達到 PowerPC 的 5 倍,時鐘速度達到 PowerPC 的 1.5 倍。
英特爾在其 CPU 的各個方面都進行了創新,例如:
- CPU 緩存 (L1、 l2 和 L3)
- 分支預測
- 超頻架構
這些概念在現代 CPU 性能中非常重要。英特爾的 x86 并非單槍匹馬成為贏家ーー CPU 的互聯特性意味著所有這些組件的優化使 x86 保持領先地位。
3.2.1 CPU 緩存
如前所述,CPU 從RAM中獲取數據,將其放置在處理器芯片上的超高速寄存器中,并對該數據執行操作。但是在千兆赫茲的時鐘速度 (每秒 1,000,000,000 次操作) 下,從 RAM 獲取指令和數據太慢了。
因此,CPU 發展了片上緩存來存儲中等數量的數據。這些作為中間的微型 RAM 塊,存儲在物理上靠近芯片本身,并允許更快地訪問必要的數據。
這些緩存本身是分層的:
- L1 緩存是最小、最快的一層,直接與 CPU 內核集成以存儲少量數據 (幾 kB) 以便快速檢索。由于這些都集成在處理器電路本身附近,所以每個 CPU 核心都有一個 l1 緩存。
- L2緩存是中間層,平衡速度和容量,通常集成在 CPU 芯片本身的某個地方,通常放在一邊。這個緩存可以為每個 CPU 核心分區,也可以在它們之間共享。
- L3 緩存是最后一個緩沖區ーー在主板和后臺之間往返的代價極大的緩沖區。這一層存儲是所有 CPU 核心之間的一個大量字節的共享內存池。
圖片
每當 CPU 需要獲取不存儲在最近的緩存中的指令或數據時,就稱為緩存丟失。它需要從下一層緩存、下下層緩存、 RAM 或磁盤獲取數據!這會嚴重影響速度和效率。作為一個宏觀尺度的類比,考慮當程序必須通過網絡而不是本地存儲查找數據時,應用程序的加載速度有多慢。
到 2000 年代中期,Intel 的 x86 CPU 緩存使 PowerPC 上的緩存相形見絀,這意味著更低的延遲和更好的性能。如果輔以改進的預取和預測算法,代價高昂的緩存缺失在 x86 上就不會成為問題。這反過來又提高了每瓦性能,因為當數據靠近處理器時,通過 CPU 電路移動內存字節的物理電流就會減少。
3.2.2 分支預測
分支預測聽起來像神秘的魔法。分支指令是條件語句的匯編代碼版本,比如 if/else ー在處理器上表現為跳轉、調用和返回。CPU 使用統計學來猜測代碼的去向,并盡量保持指令流水線以獲得最大的利用率。
這種機制涉及直接內置在 CPU 電路中的硬件算法。名為 “分支歷史表” 的緩沖區暫存了最近的分支結果,通過分析模式得出預測。
高級分支預測器應用最終的 YOLO 方法: Speculative_execution,在確認結果之前執行預測分支上的指令。英特爾的硅芯片技術幫助 x86 處理器的速度遠遠勝出。
3.2.3 超頻架構
超頻架構是多任務處理的終極形式。超頻 CPU 可以在一個時鐘周期內同時執行多條指令:
- 在獲取階段,CPU 從操作流水線收集多條指令。
- 解碼階段利用多個解碼器單元來計算每條指令。
- 這些指令可能被分配到 CPU 的不同執行單元。
這種架構之所以有效,是因為諸如算術、寄存器之間的移動存儲器和浮點運算等操作需要在 ALU 上使用不同的電路。因此,如果CPU足夠聰明,可以并行執行多條指令。這是一個艱難的過程。如果多個同時進行的操作需要使用相同的資源,例如相同的寄存器或相同的 ALU 加法器電路,就會出現瓶頸。依賴性問題也可能導致停頓,特別是當一條指令被卡住等待另一個運行時間較長的操作結果時。
英特爾有意愿更有資金,讓超頻架構有效地工作在他們的 CPU 核心。除了緩存、分支預測和超頻架構,英特爾的 x86 芯片還進一步優化了 CPU 的許多特性:
- 高級流水線將獲取、解碼、執行周期分割為多達 21 個階段,允許在給定的時鐘速度下每秒運行更多的指令。
- ALU中執行單元的數量增加,從而使得超頻架構的操作更容易并行化。
- 超線程,允許一個 CPU 核心作為 2 個邏輯核心呈現給操作系統,使一個核心可以同時執行 2 個線程。
3.3 蘋果的遷移戰略
蘋果再次采用了他們歷史悠久的過渡技術,以平穩地進行 CPU 架構遷移。
蘋果引入了為這兩種 CPU 架構構建的通用二進制文件,可以通過一個簡單的 Xcode 構建配置進行設置。蘋果還推出了動態二進制翻譯器 Rosetta,蘋果稱其為 “你永遠不會見到的最令人驚嘆的軟件”。它嵌入在 Mac OS x Tiger (第一個在 x86 Mac 上發布的操作系統) 中,并允許 PowerPC 應用程序自動在 x86 上運行。
蘋果不厭其煩地解釋 Rosetta 不是一個模擬器,Rosetta 會在程序運行時動態地翻譯代碼。實際上,這意味著來自應用程序二進制文件的 PowerPC CPU 指令和 OS 系統調用被轉換為等效的 x86 匯編和系統調用。
蘋果在長達一年的過渡時間內沒有兌現承諾,卻提前完成了任務,實現了喬布斯的夢想,將蘋果帶入了新時代。
圖片
4. Apple Silicon: 2020年
蘋果的終極競爭優勢是硬件和軟件的緊密結合,以生產出令人瘋狂的偉大產品。對英特爾 x86 CPU 的依賴意味著對英特爾供應限制和發布延遲的痛苦依賴,這有時會影響蘋果的路線圖。
幾十年來,中央處理器一直是遠離我們的東西。從蘋果 i 的現成 MOS 6502 微處理器到 2019 年 Mac Pro 的高端英特爾至強 CPU,蘋果從未真正擁有價值鏈的這一部分。
但是現在,他們可以了。
iPhone 于 2007 年發布,搭載三星提供的 ARM 處理器。然而,在十年之交,從 iPhone 4 開始,蘋果開始設計自己的芯片,從 A4 開始迭代,持續迭代。2020年,iPhone 是所有搖錢樹中的神。
蘋果公司那時是世界上市值最高的上市公司,正在將 200 億美元的現金流投入到研發領域,就像什么都不是一樣。
4.1 回顧過去容易被忽略的事情
2008 年,蘋果以 2.78 億美元收購了P.A.半導體公司,這是一家以高端低功耗處理器著稱的 CPU 設計公司。P.A.的 CPU 最初基于 IBM 的 Power架構ーー與 PowerPC Mac 中 AIM 聯盟使用的指令集完全相同。
當時,Android 操作系統正在進入智能手機市場。擁有自己的芯片設計將使 iPhone 在新近擁擠的市場上與競爭對手進一步區別開來。此次收購還使得以保密著稱的蘋果公司能夠將其最好的專有芯片設計保密在公司內部。這筆收購在 10 年后的 2018 年得到增強,當時蘋果公司以 3 億美元部分收購了歐洲芯片設計公司 Dialog。
ARM 成立于 1990 年,是蘋果公司和 Acorn 電腦公司的合資企業。有傳言說,史蒂夫?喬布斯說服 Acorn 放棄他們的硬件產品,轉而專注于低功耗處理器的設計。這一點后續體現了蘋果公司長期以來的思維方式。
4.2 Apple Silicon的黎明
蘋果的工程師們多年來一直在設計和迭代 iPhone 和 iPad 中的 ARM 芯片。由于移動設備的形狀因素,很難把散熱風扇裝在口袋里,電力消耗和熱效率成為最大的問題。RISC 架構是這個問題的明確答案,在移動場景中取代了 x86 巨人。
到 2020 年,這些 ARM 處理器已經得到了快速的發展,比英特爾的 x86 芯片快得多。
圖片
蘋果定制的 ARM 處理器已經改進到了毋庸置疑的地步,性能已經足夠強大,可以用在蘋果筆記本電腦上。
2020 年,蘋果宣布了第三次 Mac CPU 架構的偉大轉變,推出了 M1,標志著Apple Silicon時代的到來。
4.3 M1 到底是什么?
M1 是蘋果硅芯片 “m 系列” 的第一代產品,這是他們為 Mac 筆記本電腦和臺式機定制的硬件,有同代系產品如 M1 Pro,M1 Max,和 M1 Ultra。今天,甚至可以買到M2,M3甚至M4。
M1 是一個SoC。這是一種構建不同于標準桌面 pc 的硬件方法。與在主板上安裝可互換組件 (如 CPU、存儲器、 RAM、顯卡) 不同,SoC將所有組件集成到一個單獨的組件中,這就是為什么這種方法適用于空間受限的移動設備。
第一次升級到 M1 MacBook 就像變魔術一樣,真正的游戲規則改變者。一切都是閃電般的快速,冷卻風扇似乎從來沒有打開,電池持續一整天一次充電。
正如在 Intel 部分中提到的,CPU 的互連特性通常使得很難評估芯片架構之間的優異性能。
英特爾的主要性能驅動因素是縮小晶體管大小,并在芯片上安裝更多、更快的 CPU 內核,從而帶來更高的性能。
但在 m1 的情況下,有一個完全不同的方法,導致其出色的表現: 專業化。
4.3.1 異構計算
M 1 芯片采用的是異構計算策略,這意味著針對特定工作負載的專用組件。電腦游戲玩家對此已經很熟悉了。幾十年來,Nvidia 一直在銷售GPU ,以處理視頻游戲渲染引擎遇到的特殊并行工作負載。
Apple 將這種方法提升到了一個新的水平,在異構工作負載的方向上進行了根本性的轉變。M1 SoC 的組件專門用于許多計算任務:
- 圖像處理電路
- 數學信號處理器
- 人工智能加速神經引擎
- 專用視頻編解碼器
- 用于加密存儲的安全區域
- 8 個 GPU 核,128 個并行執行單元
- 4 個高性能 Firestorm CPU 內核
- 4 個高效、低能耗的 Icestorm CPU 核心
這種利用雙 CPU 集的方法被 ARM 稱為 big.LITTLE 架構,它優化了那些沒有分配給專用組件的通用 CPU 工作負載的功耗。
Firestorm CPU 執行用戶請求的時間敏感型工作負載;而 Icestorm CPU 處理后臺工作負載的速度更慢,但功耗卻減少了 90% 。
除了 Apple Silicon SoC 的核心異構架構之外,m1 令人驚嘆的性能還有其他一些原因。
4.3.2 統一內存架構
M1 芯片具有 GPU 和 CPU 之間共享的統一內存架構。這是性能方面的一大亮點。當將數據發送到外部 GPU 進行處理時,CPU 通常需要將數據復制到 GPU 所擁有的內存中,然后才能提取數據進行處理。圖形驅動程序的中間轉換利用了 CPU,當真正希望將圖形指令傳遞給 GPU 時,這會引入嚴重的性能瓶頸。
為什么不是所有的處理器都集成了顯卡?為了解決這個問題,蘋果不得不解決兩個主要的問題,當把 CPU 和 GPU 集成到 SoC 上時:
- CPU 和 GPU 喜歡不同的數據格式。CPU 喜歡蠶食小字節,GPU 喜歡吞噬大量的數據,偶爾為了大規模并行處理機處理。
- GPU產生很多熱量,這就是為什么顯卡集成稱為冷卻風扇的 “大型噴氣式客機” 。
蘋果的方法是在兩個處理器之間分配相同的內存塊 (RAM 和 l3 緩存) ,這種方式可以在 CPU 需要的高吞吐量下提供 GPU 喜歡的大塊內存。 ARM 芯片能耗很低,可以集成在同一個芯片上。
4.3.3 亂序執行
雖然異構架構允許專門的工作負載使用最好的工具,但 Firestorm CPU 核心本身對于一般工作負載來說是非常強大的。
超頻架構使 CPU 核能夠同時獲取、解碼和分派多條指令。憑借其 RISC,m1 芯片使蘋果能夠在亂序執行上將其提升到一個新的水平。
ARM RISC 指令都是 4 字節長 (32 位) ,而 x86 CISC 指令從 1-15 字節不等。這意味著 ARM 芯片可以很容易地將連續的指令字節流直接分解到解碼器,而不需要任何解析開銷。
基本的 m1 芯片有8個 解碼器,其中Firestorm CPU 核心同時填補每個時鐘周期。這些指令與它的各種專用電路并行發送。
Apple Silicon 同時分析數百條指令之間的依賴關系圖,因此它知道哪些指令現在可以發送,哪些指令需要等待結果。將其與高級分支預測結合起來,M1 CPU 實際上是在燒 Atium。
4.3.5 物理上的約束
m1 芯片上的所有東西在物理上都非常接近,即使電子信號以閃電般的速度移動,當傳輸距離較短時,操作速度也會更快。在 GHz 的時鐘速度下,這些納秒會累加起來。
4.4 超高性能
對于 M1 Ultra 芯片,旨在提供最大的輸出,M1 Ultra 芯片只是兩個 m1 max 芯片粘在一起。或許還有更微妙的原因ーー橋接結構可以實現 2.5 TB/s 的芯片間吞吐量,這使得各個組件的行為完全像是同一個芯片。
在從 Intel x86 到 Apple Silicon 的轉變過程中,蘋果繼續應用其久經考驗的方法。開發者可以構建包含 Intel 和 Apple Silicon 二進制文件的通用應用程序。此外,Rosetta已經升級到二代,無形中解釋英特爾指令到 ARM上 的運行。蘋果公司一如既往地宣稱,一些英特爾應用程序和游戲在使用 Rosetta II 的 ARM 處理器上的表現將會比在原始版本上更好。
作為英特爾最大的客戶之一,蘋果終止了與英特爾長期以來的合作關系,這對英特爾是一個沉重的打擊。英特爾在某種程度上否認了現實,并且相當肯定他們可以通過進一步投資自己的產品來迎頭趕上。在 Apple Silicon 和 Nvidia 在人工智能領域的統治地位之間,有一件事是清楚的: 英特爾已經自滿太久了。
成功滋生自滿,自滿滋生失敗,只有偏執狂才能生存
小結
本文是一個有點自以為是的回顧,蘋果著名的 CPU 架構遷移——
為什么Macintosh團隊選擇了摩托羅拉 68k?為什么遷移到 PowerPC 這樣的新 CPU 架構變得如此困難?是什么導致英特爾的 x86 架構在競爭中遙遙領先?為什么 m1 芯片是如此的高效?































