AMX、Apple M1の隠れた補助プロセッサ
(medium.com)Apple Matrix Coprocessor
-
M1の発表ではまったく語られなかった、行列専用プロセッサ
-
行列は画像処理、機械学習、音声/手書き認識、顔認識、圧縮、音声/映像メディア処理などで多く使われる
-
それはNeural Engineが処理してくれるものじゃないの? Neural Engineとは何が違う?
→ GPUやNeural EngineはAccelerator(アクセラレータ)
→ アクセラレータが使用するメモリ空間を埋めるためにCPUが作業するのは非効率
→ このとき命令を見張っていて、これをCoprocessorが代わりに処理する
→ これを利用するには別個の命令セットを定義する必要がある
→ ARMはカスタム命令を入れることを拒んできたが、2019年からは可能な拡張を提供し始めた
→ これがおそらくAMX命令が公式ドキュメントに載っていない理由だろう
- ではARMに入っているSIMD Vector Engineとは何が違う?
→ SIMD : Single Instruction Multiple Data
→ 複数のデータに同じOperationを実行するときに高い性能を出す方法
→ 行列演算と関連している
→ ただしSIMDはALU、FPUのようにCPU内蔵で、コプロセッサは外付け
→ かつてのIntel 8087(FPU)は8086よりもトランジスタ数が多く、当時は一緒に載せるのが難しかった。技術の進歩でトランジスタ数が増え、CPUにFPUが内蔵されるようになって消えていった
- なぜAMXがFirestormコアの中に入っていないのかは明確ではない
→ おそらく別にしておくことでCPUと並列に動作させやすかったのだろうし、
→ AppleとしてはARM標準ではないものを外部に置きたかったのかもしれない。
- ではなぜAMXを隠していたのか?
→ AMXが公式ドキュメントにないのに、どうやって分かったのか?
→ Dougal Johnsonがリバースエンジニアリングによって突き止めた
→ Appleは行列演算向けフレームワークであるAccelerateを通じてさまざまな機能を提供している
⇨ vImage : 高水準の画像処理。フォーマット変換および画像操作
⇨ BLAS : 線形代数(行列とベクトル演算)
⇨ BNNS : ニューラルネットワークおよび学習
⇨ vDSP : フーリエ変換などのデジタル信号処理。画像またはオーディオ処理向けの数学演算
⇨ LAPACK : 高水準の線形代数関数、線形方程式など
→ このAccelerateライブラリがAMXを利用して計算を高速化する
→ 命令そのものを公開していたらARMエコシステムが断片化していたはず(これはARMもAppleも望まない)
→ Appleはこれを公開せず、フレームワークとして開くことで、高性能を提供しつついつでも命令セットを修正できるようにした
⇨ Appleがハードウェア/ソフトウェアを同時に制御しているからこそ可能
⇨ 開発者はAccelerateを通じて作業するだけで、今後の改善の恩恵も受けられる
- Apple Matrix Coprocessorの利点は?
→ Nod LabsがARMv8.6のSIMD標準命令であるNEONと比較したところでは、AMXは2倍以上高速
→ すべてにおいてAMXが優れているというわけではないが、少なくとも機械学習や高性能計算(HPC)ではAMXが優位に立つ
2件のコメント
OpenCLがなくなり、Metalアクセラレーション以外ではAccelerateはそれほど強調されていませんでしたが、
毎年ライブラリを増やしていたところに、ハードウェアアクセラレーションを行う専用コプロセッサまで搭載されていたとは驚きですね。
以下の2本の記事を書いたエンジニアによる続編です。あわせて読むことをおすすめします。
→ YouTubeで解説を聞く : https://youtu.be/71LlixEBK0o
→ YouTubeで解説を聞く : https://youtu.be/F5sIQZvlJc8