Apple M1チップはなぜそんなに速いのか?
(erik-engheim.medium.com)- M1は1つのCPUではなく、大型のシリコンパッケージに複数のチップを載せたシステム全体。CPUはそのうちの1つにすぎない
→ CPU、GPU、メモリ、I/OコントローラなどをまとめたSoC(System on a Chip)
- 汎用コアを多数載せる代わりに、特定の処理に特化したチップを搭載している
→ CPU : OSとアプリを実行
→ GPU : グラフィックス処理を実行。アプリのUI、2D/3Dゲームなど
→ ISP(Image Processing Unit) : 画像処理を高速化
→ DSP(Digital Signal Processor) : CPUよりも数学的に集約された処理を実行。音楽ファイルの展開など
→ NPU(Neural Processing Unit) : 機械学習、音声認識、カメラ処理などを高速化
→ Video Encoder/Decoder : 低消費電力で動画ファイル/フォーマットを処理
→ Secure Enclave - 暗号化、認証、セキュリティ
→ UMA(Unified Memory Architecture) : CPU、GPUおよび他のコアが高速に情報をやり取り
これらのチップが、画像/動画編集や大規模な動画エンコードで高い性能を発揮する理由
- Unified Memory Architecture(UMA)の何が特別なのか?
→ これまでのCPU/GPU統合チップは遅かった
両者は別々のメモリ領域を、それぞれ異なる方法で使っていた。
しかもGPUは発熱が大きいため、大型の冷却ファンを備えた巨大なカードのほうが高性能だった
しかしこうなると大量のデータを相互にコピーする必要があり、PCIeのようなバスが必要になる
→ Unified MemoryはCPU/GPU向けに別々に割り当てず、そのまま共有して使う。
Shared Memoryと違ってCPUとGPUが同時にアクセスでき、位置情報の受け渡しだけでアクセスできるためコピーが不要になる
- このSoC方式が良いなら、他のメーカーはなぜやらないのか?
→ すでにやっている。AMDはCPU/GPUを同じシリコンダイに載せたAPUの形で作り始めている
→ ただし実際にやるのは難しい。SoCはコンピュータ全体を1つのチップに載せるものなので、HPやDellのようなコンピュータメーカーにより向いている
→ IntelとAMDのビジネスモデルは、人々がPCマザーボードに挿す汎用CPUがベースだが、
新しいSoC市場では、異なるベンダーの物理製品を持ち寄って組み立てるのではなく、IP(Intellectual Property)を組み合わせることになる
→ 果たしてIntel、AMD、NvidiaはDellやHPにIPをライセンスできるのか?
→ もちろんIntelやAMDが完成したSoCを販売することはできるが、CPUメーカー/PCメーカー/MSの間で利害の衝突(何を載せるかなど)が起きる可能性がある
→ しかしAppleにとっては単純な問題だ。彼らはすべてを自分たちで作っている。"They control the whole widget"
- CPUを速くするうえで最も根本的な挑戦
→ M1の高速な汎用CPUコアであるFirestormは本当に速い。これが、従来のAMD/Intelなどと比べて遅かった従来のARMとの違い
→ Firestormは速度面でほとんどのIntel/AMD Ryzenコアに勝っており、常識的には起こりえないこと
→ 高速なCPUを作る戦略は何か?
-
順次的に、より速く命令を実行する
-
複数の命令を並列に実行する
80年代には簡単だった。ただクロック周波数を上げれば命令は速く実行できた。
コンピュータはクロックサイクルごとに何かを行うが、この「何か」は非常に小さいため、1つの命令に複数のクロックサイクルが必要なこともある
しかし現代では、クロック周波数を上げることには限界がある。
「ムーアの法則の終わり」
そのため、今はできるだけ多くの命令を並列に実行することが重要
- Multi-core or Out-of-Order processors?
→ 並列実行には2つのアプローチがある
- CPUコアを増やすこと(開発者の観点ではスレッドを増やすこと)
理論上、プロセッサのコアは複数のスレッドを実行できる(ソフトウェアスレッド)
これはスレッド間を切り替えながら実行する方式なので、I/Oやネットワークで何かを待つ状況で使われる
ハードウェアスレッドは速度を高められるが、開発者がそれを活用するコードを書く必要がある。
サーバー/クラウドではこのモデルが適している。
そのためAmpereのような企業が、128コアを持つAltra Maxのようなクラウド向けARM CPUを作っている。
Appleはこれと正反対だ。Appleは単一ユーザー向けのデバイスを作る企業だ
デスクトップソフトウェアの多くは、多数のコアを活用するようには作られていない。
ゲームは8コアなら性能向上があるだろうが、128コアは無駄にすぎない。
だからこそ、より少数の強力なコアが必要になる
- Out-of-Order Execution(OoO、アウトオブオーダー実行)は、より多くの命令を並列に実行するが、マルチスレッドのように明示的に使う必要がない
開発者の視点では、各コアがただ高速に動いているように見える
特定位置のメモリからデータを取得するのは遅い
しかし、1バイトを取っても128バイトを取っても遅延の差はない
データはデータバスを通って移動し、このバスが広ければ同時に複数バイトを読み込める
CPUは実行時に複数の命令の塊をまとめて処理するが、これらの命令は順番に実行するよう書かれている
最新のマイクロプロセッサはOut-of-Order実行を行う。
つまり複数の命令を解析し、相互に依存関係があるかを見つけ出す。
01: mul r1, r2, r3 // r1 ← r2 × r3
02: add r4, r1, 5 // r4 ← r1 + 5
03: add r6, r2, 1 // r6 ← r2 + 1
上の命令では1と2に依存関係があるが、3番は前とはまったく関係がない。
この場合、Out-of-Orderプロセッサは依存関係のない3番の命令を並列に実行できる。
実際にはCPUは1つや2つではなく、数百の命令間の依存関係を把握できる。
CPUは命令をノードグラフとして結び付けて解析し、並列実行できる命令と、実行前に結果を待たなければならない箇所を見つけ出せる。
M1のFirestromコアが驚異的な速度を出す理由は、非常に優れたOut-of-Order実行を行うため。
Intel/AMDを含む主流市場の他の誰よりも優れているように思える。
- なぜAMDとIntelのOut-of-Order実行はM1より遅いのか?
→ 先ほど述べたものは、実際にはROB(Reorder Buffer)と呼ばれるもので、一般的な機械語コード命令そのものではない(CPUが実行のためにメモリから取ってくるもの)
これらの命令はCPU Instruction Set Architecture(ISA)と呼ばれ、私たちがx86、ARM、PowerPCと呼んでいるもの
→ CPUは内部では、プログラマには見えないまったく別の命令セットであるmicro-operations(マイクロ命令、micro-ops or μops)で実行しており、ROBはこのmicro-opsで満たされている
→ ARM/x86命令は公開API、micro-opsは非公開APIだと考えればよい
→ CISCは命令が大きく複雑なためmicro-opsが必須だが、RISCは使うかどうかを選べる。
(たとえば小型のARM CPUではmicro-opsを使わないこともある。だからといってOoOができないわけではない)
→ なぜこれが重要なのか?「高速性はROBをどれだけ速く、どれだけ多く埋められるか」が重要だから
→ 速く埋められるほど、より多くの命令を並列実行できる機会が増え、性能が向上する
→ 機械語コードはデコーダによってmicro-opsへ分解される。
→ Intel/AMDのコアには4つのデコーダがあるが、
Appleには「狂ったような」8つのデコーダがあり、ROBは3倍大きく、基本的に3倍多くの命令を保持できる
- ではなぜIntelとAMDはもっと多くの命令デコーダを載せないのか?
→ ここでRISCの反撃が始まる。M1 FirestormコアにARM RISCが採用されていることが重要だ。
→ x86命令の長さは1〜15バイトで、RISCは固定サイズ
→ すべての命令の長さが同じなら、8つの別々のデコーダに切り分けて投げればいいだけ
→ しかしx86では、ある命令の次の命令がどこから始まるのかわからないため、実際に各命令を解析するしかない
→ IntelとAMDがこの問題を力任せに処理する方法は、あらゆる命令開始位置ごとにデコードすること
つまり、誤った推測やミスを次々に捨てなければならないということ。
そのためデコーダを増やすのは難しいが、Appleには非常に簡単
→ これによって、基本的に同じクロック周波数でAMD/Intel CPUの2倍の命令を処理できるようになる
→ 現実にはx86でも複雑なCISC命令はあまり使わず、RISCのような短い命令を主に使っているが、あの15バイトの命令にも対応しなければならないため複雑さは残る。
- でもAMDのZen3コアのほうがまだ速いのでは?
→ ベンチマークではZen3がFirestormより速いが、Zen3は5Ghzで、Firestormは3.2Ghz
→ Appleがクロック周波数を上げないのは、チップが熱くなるからだ。
→ 基本的にはZen3よりFirestormコアのほうが優れている
→ Zen3はより多くの電力を消費し、より大きな熱を出しながらゲームに使えるが、「Appleはそれをやらないと決めた」
→ Appleがより高い性能を望むなら、より多くのコアを追加するだろう。そうすることで、より少ない電力でより高い性能を出せる
- 未来
→ AMD/Intelは2つの点で自らを追い込んでしまった
-
異種コンピューティングとSoC設計を後押しするビジネスモデルがない
-
複雑なx86 CISC命令がレガシーとなっており、OoO性能を改善しにくくしている
→ もちろん、まだゲームオーバーではない。さらにクロックを上げ、冷却を強化し、コア数を増やし……
→ Intelはさらに厳しい。すでにコア速度でFirestormに後れを取り、SoCに載せたGPUも弱い。
→ 多コアは当然サーバーには向いているが、AmazonとAmpereが128コアで攻勢をかけている。Intel/AMDは両面で戦わなければならない状況
→ 幸いにもAMD/Intelと違って、Appleはチップを市場で販売していない
→ すぐにはそうならないだろうが、PCユーザーはゆっくりとAppleへ移っていき、AppleはPC市場でより大きな比重を占めるようになるだろう
17件のコメント
本当に文章がお上手ですね
とても分かりやすく、うまく整理してくださってありがとうございます。最高です!
良い内容をありがとうございます。
ありがとうございます!!
M1搭載機が欲しかったのに、そうじゃなくて株を買うべきでしたね..
良い記事をありがとうございます!
私も、Apple株は将来価値が高いという点に一票です。
いつか本当にApple Carが登場しそうですね。
Weak memory modelがますます重要になってきていますね.. Appleは今や本当に、チップから組み立て、ハードウェア、OS、アプリに至るまで全部自前で作れる(ジョブズが夢見ていた)closedな会社になってきていますね。
私も次のデバイスはM1 Mac miniかMacBook Airにしようと考えています..
私も2015年のMacBook ProからM1へ…年末か、そうでなければ来年初めに届くそうです!
今日確認したところ、韓国国内で発売されていました!
わあ!グル様、本当に最高です!!
ありがとうございます ;)
その文章の中に著者が書いたRISC/CISCの比較記事もあるのですが、本当におすすめです。どうしてそういう命令語構造を持つようになったのか?という点を、すらすらと解きほぐして説明してくれます。
基本的に文章を書くのが上手な人なんだと思います。この記事もかなり長いのに、すらすら読めました。
わあ、良い内容をありがとうございます。
ありがとうございます!
コンピュータアーキテクチャの授業をもう一度受けている気分ですね(笑)
結局、AppleはAppleがいちばん得意なことを、これからもさらに磨き続けられる構造なんですよね
Intel と AMD はもうどうなるんでしょうね..
今日公開した GeekNews ポッドキャスト第16話で M1チップの Memory-Order トリックについて簡単に紹介しましたが、それとはまた別に詳しく書かれた記事ですね。
来週のポッドキャストでもまた話すことになりそう ^^;