32 ポイント 投稿者 xguru 2020-12-04 | 17件のコメント | WhatsAppで共有
  • 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を作る戦略は何か?

  1. 順次的に、より速く命令を実行する

  2. 複数の命令を並列に実行する

80年代には簡単だった。ただクロック周波数を上げれば命令は速く実行できた。

コンピュータはクロックサイクルごとに何かを行うが、この「何か」は非常に小さいため、1つの命令に複数のクロックサイクルが必要なこともある

しかし現代では、クロック周波数を上げることには限界がある。

「ムーアの法則の終わり」

そのため、今はできるだけ多くの命令を並列に実行することが重要

  • Multi-core or Out-of-Order processors?

→ 並列実行には2つのアプローチがある

  1. CPUコアを増やすこと(開発者の観点ではスレッドを増やすこと)
 理論上、プロセッサのコアは複数のスレッドを実行できる(ソフトウェアスレッド)

 これはスレッド間を切り替えながら実行する方式なので、I/Oやネットワークで何かを待つ状況で使われる

 ハードウェアスレッドは速度を高められるが、開発者がそれを活用するコードを書く必要がある。

 サーバー/クラウドではこのモデルが適している。

 そのためAmpereのような企業が、128コアを持つAltra Maxのようなクラウド向けARM CPUを作っている。

 Appleはこれと正反対だ。Appleは単一ユーザー向けのデバイスを作る企業だ

 デスクトップソフトウェアの多くは、多数のコアを活用するようには作られていない。

 ゲームは8コアなら性能向上があるだろうが、128コアは無駄にすぎない。

 だからこそ、より少数の強力なコアが必要になる
  1. 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つの点で自らを追い込んでしまった

  1. 異種コンピューティングとSoC設計を後押しするビジネスモデルがない

  2. 複雑なx86 CISC命令がレガシーとなっており、OoO性能を改善しにくくしている

→ もちろん、まだゲームオーバーではない。さらにクロックを上げ、冷却を強化し、コア数を増やし……

→ Intelはさらに厳しい。すでにコア速度でFirestormに後れを取り、SoCに載せたGPUも弱い。

→ 多コアは当然サーバーには向いているが、AmazonとAmpereが128コアで攻勢をかけている。Intel/AMDは両面で戦わなければならない状況

→ 幸いにもAMD/Intelと違って、Appleはチップを市場で販売していない

→ すぐにはそうならないだろうが、PCユーザーはゆっくりとAppleへ移っていき、AppleはPC市場でより大きな比重を占めるようになるだろう

17件のコメント

 
shaha 2022-04-05

本当に文章がお上手ですね

 
hoking337 2020-12-07

とても分かりやすく、うまく整理してくださってありがとうございます。最高です!

 
dreamydh 2020-12-05

良い内容をありがとうございます。

 
xguru 2020-12-05

ありがとうございます!!

 
pilgwon 2020-12-04

M1搭載機が欲しかったのに、そうじゃなくて株を買うべきでしたね..

良い記事をありがとうございます!

 
xguru 2020-12-05

私も、Apple株は将来価値が高いという点に一票です。

いつか本当にApple Carが登場しそうですね。

 
functor 2020-12-04

Weak memory modelがますます重要になってきていますね.. Appleは今や本当に、チップから組み立て、ハードウェア、OS、アプリに至るまで全部自前で作れる(ジョブズが夢見ていた)closedな会社になってきていますね。

私も次のデバイスはM1 Mac miniかMacBook Airにしようと考えています..

 
xguru 2020-12-05

私も2015年のMacBook ProからM1へ…年末か、そうでなければ来年初めに届くそうです!

 
hankpark 2020-12-06

今日確認したところ、韓国国内で発売されていました!

 
shawnkim 2020-12-04

わあ!グル様、本当に最高です!!

 
xguru 2020-12-05

ありがとうございます ;)

 
ffdd270 2020-12-04

その文章の中に著者が書いたRISC/CISCの比較記事もあるのですが、本当におすすめです。どうしてそういう命令語構造を持つようになったのか?という点を、すらすらと解きほぐして説明してくれます。

 
xguru 2020-12-06

基本的に文章を書くのが上手な人なんだと思います。この記事もかなり長いのに、すらすら読めました。

 
jun0683 2020-12-04

わあ、良い内容をありがとうございます。

 
xguru 2020-12-05

ありがとうございます!

 
godrm 2020-12-04

コンピュータアーキテクチャの授業をもう一度受けている気分ですね(笑)

結局、AppleはAppleがいちばん得意なことを、これからもさらに磨き続けられる構造なんですよね

 
xguru 2020-12-04

Intel と AMD はもうどうなるんでしょうね..

今日公開した GeekNews ポッドキャスト第16話で M1チップの Memory-Order トリックについて簡単に紹介しましたが、それとはまた別に詳しく書かれた記事ですね。

来週のポッドキャストでもまた話すことになりそう ^^;