蘋果M1使用了Arm自定義指令集?開發者逆向驚奇發現:?蘋果M1未公開的秘密--矩陣協處理器
2021-01-18 09:26:35
EETOP
點擊關注->創芯網公眾號,后臺告知EETOP論壇用戶名,獎勵200信元
近期,國外開發者Dougall Johnson通過逆向工程,在蘋果M1處理器內發現了一個被稱為AMX的強大的未公開過的秘密協處理器--矩陣協處理器。
要弄清Apple矩陣協處理器具體是做什么的,需要弄清楚幾個基本知識,例如什么是協處理器?什么是矩陣?為什么還要關心這些?
更重要的是,為什么蘋果公司的幻燈片都沒有提到這個協處理器?為什么它似乎是一個秘密?如果你已經了解了M1片上系統(SoC)中的神經引擎,您可能會對Apple的矩陣協處理器(AMX)與眾不同的原因感到困惑。
在闡述這個大問題之前,我先說說基本概念,比如什么是矩陣?什么是協處理器。
矩陣基本上只是一個數字表。如果您使用過Microsoft Excel等電子表格,則基本上可以使用與矩陣非常相似的東西。關鍵的區別在于,在數學中,這樣的數字表有一個它們支持的操作列表和特定的行為。正如您在這里看到的,矩陣可以有不同的風格。有這樣一行的矩陣,通常稱為行向量。如果一個是列向量,我們稱之為列向量。關于矩陣相關內容,相信每一個理工科專業的都應該非常了解,因此在此也不做過多的贅述了。
-
圖像處理
-
機器學習
-
語音和手寫識別
-
人臉識別
-
壓縮
-
多媒體:音頻和視頻
尤其是這幾年很火的機器學習。僅僅在CPU上增加更多的核心并不能讓這個運行速度足夠快,因為它的要求真的很高,這需要專門的硬件。常規任務如瀏覽互聯網、寫郵件、文字處理和電子表格已經運行了多年,速度已經足夠快。而機器學習,這是我們真正需要提高處理能力的特殊任務。本文由EETOP編譯整理
在任何給定的芯片上,蘋果公司都有一個最大的晶體管數量來構建不同類型的硬件。他們可以增加更多的CPU核心,但這實際上只是加快常規任務的速度,而常規任務的運行速度已經足夠快。因此,他們選擇花晶體管來制造專門的硬件來解決圖像處理、視頻解碼和機器學習。這個專用硬件就是協處理器和加速器。
如果你了解一些關于神經引擎的知識,你將會知道它還會執行矩陣運算以幫助完成機器學習任務。那么我們為什么需要矩陣協處理器呢?還是說它們其實只是同一種東西?這里大家是不是被搞糊涂了?
接下來就澄清一下蘋果的Matrix協處理器和神經引擎有什么不同,以及為什么在M1處理器中這兩者都需要。
Nvidia圖形卡中的GPU和神經引擎都是加速器的一種。
在這兩種情況下,都有特殊的內存區域,CPU必須填充要處理的數據,而內存的另一部分則填充加速器應執行的指令列表。CPU設置此類處理非常耗時。需要進行大量協調,填寫數據,然后等待獲得結果。
因此,對應更大的任務來說,這個會帶來回報,但是對于較小的任務,開銷將太高。
與加速器不同,協處理器監視從內存讀取到主處理器的指令流。相比之下,加速器不會遵守CPU從內存中提取的指令。
這就是協處理器優于加速器的地方。協處理器會監視從內存(更具體地說,是緩存)輸入CPU的機器代碼指令流。協處理器是用來對特定指令作出反應的。與此同時,CPU通常會忽略這些指令,或者幫助協處理器處理這些指令。
我們從中得到的好處是,協處理器執行的指令可以放在你的常規代碼中。這與GPU不同。如果你做過GPU編程,則知道著色器程序已放置在單獨的內存緩沖區中,并且你必須將這些著色器程序顯式傳輸到GPU。你不能將GPU特定的指令放在常規代碼中。因此,對于涉及矩陣處理的較小工作量,AMX將比神經引擎更加有效。
這樣你需要在你的微處理器的指令集架構(ISA)中實際定義新的特定的指令。因此,與使用加速器相比,使用協處理器時需要與CPU緊密集成。
對于ARM指令集體系結構(ISA)的創建者ARM公司來說,長期以來一直拒絕向其ISA添加自定義指令。而可擴展自有指令,這個是RISC-V的優點之一。
但是,由于客戶的壓力,ARM在2019年10月做出了讓步并宣布將允許擴展。參考:Arm推出自定義指令集功能
這可能有助于解釋為什么官方文檔中沒有描述AMX指令。ARM期望Apple將此類指令保存在客戶提供的庫中。
很容易將矩陣協處理器與SIMD向量引擎混淆,目前大多數現代處理器(包括ARM處理器)內都有SIMD向量引擎。SIMD是單指令多數據的縮寫。
單指令單數據(SISD)與單指令多數據(SIMD)
當你需要對多個元素執行相同的操作時,SIMD是一種獲得更高性能的方法。這與矩陣運算密切相關。實際上,SIMD指令(例如ARM的Neon指令或Intel x86SSE或AVX)通常用于加速矩陣乘法。
然而SIMD向量引擎是微處理器內核的一部分。就像ALU(算術邏輯單元)和FPU(浮點單元)是CPU的一部分。在微處理器內部有一個指令解碼器,它將對一條指令進行拆分,并決定激活什么功能單元。
在CPU內部,會有ALU、FPU以及SIMD向量引擎,作為獨立的部分,由指令解碼器激活。而協處理器則是外置在微處理器內核上的。比如英特爾8087,這是最早的協處理器芯片之一,它是一種物理上獨立的芯片,旨在加快浮點計算的速度。
對于8087,你可能會很奇怪,為什么有人會想通過擁有一個像這樣的單獨芯片來使CPU設計復雜化?該芯片必須嗅探從內存到CPU的數據流,以查看是否有任何浮點指令。
原因很簡單,第一批PC中的原始8086 CPU包含29,000個晶體管。相比之下,8087要復雜得多,有45,000個晶體管。將這兩個芯片結合在一起會非常困難和昂貴。
但是隨著制造技術的改進,將浮點單元(FPU)放置在CPU內早已不是問題。因此,因此FPU取代了浮點協處理器。
回到現在,我們還不清楚為什么AMX不是M1上Firestorm核心的一部分。不過無論如何,它們都集成在同一個硅芯片上。在此我們只能提供一些推測,通過成為協處理器,CPU繼續并行運行可能會更容易、蘋果可能還喜歡將非標準的ARM產品保留在其ARM CPU內核之外等。
如果官方文檔中沒有描述AMX,我們是怎么發現的呢?這個要感謝開發人員Dougall Johnson,他出色地完成了M1的逆向工程,以發現該協處理器。這里
https://gist.github.com/dougallj/7a75a3be1ec69ca550e7c36dc75e0d6f
描述了他所作的努力。對于與矩陣有關的數學運算,Apple具有特殊的庫或框架,例如Accelerate,其組成如下:
-
vImage-更高級別的圖像處理,例如格式之間的轉換,圖像處理。
-
BLAS —一種線性代數的行業標準(我們稱其為處理矩陣和向量的數學方法)。
-
BNNS —用于運行神經網絡和訓練。
-
vDSP — 數字信號處理。傅立葉變換,卷積。這些是在圖像處理或真正包括音頻的任何信號中很重要的數學運算。
-
LAPACK -更高的水平線性代數函數,例如,用于求解線性方程組。
Dougall Johnson知道這些庫將使用AMX協處理器來加快計算速度。因此,他編寫了一些特殊程序來分析和觀察這些程序做了什么,以發現未記錄的特殊AMX機器代碼指令。
但為什么蘋果公司不記錄下來,讓我們直接使用這些指令呢?如前所述,這是ARM公司希望避免的事情。如果自定義指令被廣泛使用,可能會使ARM生態系統碎片化。
然而更重要的是,這對蘋果來說是一個優勢。通過僅允許他們的庫使用這些特殊指令,蘋果保留了以后從根本上改變這個硬件工作方式的自由。他們可以刪除或添加AMX指令。或者他們可以讓神經引擎來完成這項工作。無論哪種方式,他們都會讓開發者的工作變得更容易。開發者只需要使用Accelerate框架,就可以忽略蘋果如何專門加快矩陣計算的速度。
這是蘋果通過垂直整合獲得的最大優勢之一。通過控制硬件和軟件,他們可以利用這些技巧。那么下一個問題是這有多大的意義?就性能和功能而言,這對蘋果有什么好處?
NodLabs是一家從事機器交互,智能和感知的公司。快速矩陣運算自然是他們的興趣所在。他們寫了一篇有關AMX性能測試的技術性很強的博客文章:比較Apple的M1 matmul性能-AMX2 vs NEON。https://nod.ai/comparing-apple-m1-with-amx2-m1-with-neon/
他們要做的是比較用AMX做類似代碼的性能和用ARM官方支持的Neon指令做的性能。Neon是SIMD指令的一種。
Nod實驗室發現,通過使用AMX,他們能夠獲得Neon指令兩倍的矩陣運算性能。這并不意味著AMX對所有事情都更好,但至少對于機器學習和高性能計算(HPC)類型的工作,我們可以期待AMX給競爭者帶來優勢。
蘋果矩陣協處理器看起來是一些相當令人印象深刻的硬件,讓蘋果的ARM處理器在機器學習和HPC相關的工作中占據優勢。
-
英特爾x86快了那么多?">終于講明白了!蘋果M1為什么比英特爾x86快了那么多?
-
-
芯片裸片對比">蘋果A14,M1芯片裸片對比

點擊閱讀原文預約報名
關鍵詞:
蘋果M1
M1處理器
AMX
AMX協處理器
矩陣協處理器
-
EETOP 官方微信
-
創芯大講堂 在線教育
-
半導體創芯網 快訊