新しいM1 Macの実際の体験が動き始めました。速いです。本当に速い。しかし、なぜ? 魔法は何ですか?
エリック・エンハイム
Youtubeで、昨年iMacを購入したMacユーザーを見ました。それは40GBのRAMを搭載、約4000ドルの費用がかかて最大になりました。その時には、超高価なiMacが、わずか700ドルを支払った新しいM1 Mac Miniによって破壊されていく様子を信じられないような気持ちで見ていました。
実際のテストでは、M1 MacはIntel Macの最上位を超えて追い越しているだけでなく、それらを破壊しているのです。信じられない人たちは、一体どうやってこんなことが可能なのかと尋ね始めました。
あなたがその人たちの一人なら、あなたはうってつけの場所に来ました。ここでは、AppleがM1で行ったことを正確に消化可能な部分に分解する予定です。具体的には、多くの人たちが持っていると思う疑問は次のとおりです。
- このM1チップが速い技術的な理由は何か?
- Appleはこれを可能にするために、本当にエキゾチックな技術的選択をしたのか?
- IntelやAMDなどの競合他社が同じ技術的なトリックを引き出すのはどれほど簡単か?
確かにこれをGoogleで検索してみることはできます。しかし、Appleが表面的な説明を超えて何をしたかを知ろうとすると、すぐにM1が使った高度に技術的な専門用語、非常に幅広い命令デコーダー、巨大なリオーダー・バッファ(ROB)などに埋もれてしまいます。あなたがCPUのハードウェア・オタクでない限り、この多くは単にゴブルディグックとなります。
この話を最大限に活用するために、以前の記事を読むことをお勧めします。RISCとCISCは2020年に意味があるのか? マイクロプロセッサ(CPU)とは何か、また、様々な重要な概念について説明します。
- 命令セット・アーキテクチャ(ISA)
- パイプライン
- ロード/ストア・アーキテクチャ
- マイクロコードとマイクロ演算
しかし、せっかちなあなたには、M1チップの私の説明を把握するために理解しておくべき資料のクイック・バージョンを作成します。
マイクロプロセッサ(CPU)とは何か?
通常、IntelとAMDのチップについて話すときは、中央処理装置(CPU)やマイクロプロセッサのことを指します。RISCとCISCの話を読んでいただければ分かると思いますが、これらはメモリから命令を引き出して使用します。そして、各命令は通常、順番に実行されます。
M1ではなく、非常に基本的なRISC CPUの命令は、メモリから青い矢印に沿って命令レジスタに移動します。そこでデコーダが命令の内容を把握し、赤い制御線を介してCPUの様々な部分を有効にします。ALUは、レジスタに配置された数字を加算したり減算したりします。
CPUの最も基本的なレベルは、レジスタと呼ばれる名前付きメモリセルと、算術論理ユニット(ALU)と呼ばれる計算ユニットの数を持つデバイスです。ALUは、加算、減算などの基本的な数学演算を実行します。しかし、これらはCPUのレジスタにしか接続されていません。2つの数値を合計する場合は、メモリからその2つの数値をCPUの2つのレジスタに取り込まなければなりません。
ここでは、M1に搭載されているRISC CPUが実行する典型的な命令の例を次に示します。
load r1, 150 load r2, 200 add r1, r2 store r1, 310
ここで、r1とr2は私が話したレジスタです。最新のRISC CPUでは、このようなレジスタにない数値の演算はできません。例えば、RAMの中の2つの異なる場所にある2つの数値を加算することはできません。その代わりに、これら2つの数値を別のレジスタに引っ張ってくる必要があります。これが、この簡単な例で行うことです。RAMのメモリ位置150にある数値を取り込み、それをCPUのレジスタr1に入れます。次に、アドレス200の内容をレジスタr1に入れます。この時だけ、add r1、r2命令で数値を加算できます。
アキュムレータと入力レジスタの2つのレジスタを持つ古い機械式計算機。最近のCPUは一般的に12個以上のレジスタがあり、機械的というよりは電子的なものです。
レジスタの概念は古いです。例えば、この古い機械式計算機では、レジスタは加算する数値を保持するものです。レジスターという言葉の由来と思われます。レジスターは、入力した数値を登録する場所です。
M1はCPUではない!
しかし、ここにM1について理解しておくべき非常に重要なことがあります。
M1はCPUではなく、複数のチップが1つの大きなシリコンパッケージに収められたシステムです。CPUはこれらのチップの1つにすぎません。
基本的に、M1はチップの上に1台のコンピューター全体をです。M1には、CPU、グラフィック・プロセッシング・ユニット(GPU)、メモリ、入出力コントローラ、コンピューター全体を構成するその他の多くのものが含まれています。これが、システム・オン・チップ(SoC)と呼ばれるものです。
M1は、システム・オン・チップです。つまり、コンピュータを構成するすべての部品が1つのシリコンチップ上に搭載されているということです。
今日では、IntelやAMDのチップを購入すると、1つのパッケージに複数のマイクロプロセッサが含まれています。以前は、コンピューターのマザーボード上に物理的に分離した複数のチップが搭載されていました。
コンピュータのマザーボードの例。メモリ、CPU、グラフィックカード、IOコントローラ、ネットワークカードなど、多くの部品をマザーボードに取り付けて、相互に通信を行うことができます。
しかし、今日ではシリコンダイに非常に多くのトランジスタを搭載できるようになったため、IntelやAMDなどの企業は、1つのチップに複数のマイクロプロセッサを搭載するようになりました。今日では、これらのチップをCPUコアと呼びます。1つのコアは基本的に完全に独立したチップで、メモリから命令を読み取って計算を実行できます。
複数のCPUコアを備えたマイクロチップ。
これは長い間、性能を向上させるという点でゲームの名前になっています。汎用的なCPUコアを増やせばいいのです。しかし、支配力に地殻変動があります。CPU市場には、この流れから逸脱しているプレーヤーが1社あります。
Appleのあまり知られていないヘテロジニアス・コンピューティング戦略
Appleは、これまで以上に汎用的なCPUコアを追加する代わりに、別の戦略にとってきました。Appleは、いくつかの特殊なタスクを実行する、これまで以上に特殊なチップの追加を始めました。この利点は、特殊チップは、汎用CPUコアよりもはるかに少ない電流でタスクを大幅に高速に実行できる傾向があるということです。
これは全く新しい知識ではありません。すでに何年前も前から、NvidiaやAMDのグラフィックカードには、グラフィック・プロセッシング・ユニット(GPU)のような特殊チップが搭載されており、汎用CPUよりもはるかに高速にグラフィック関連の処理を実行しています。
Appleが行ったことは、この方向性に向けてより根本的なシフトを行うことです。M1には、汎用コアとメモリだけでなく、様々な専用チップが搭載されています。
- 中央処理装置(CPU) — SoCの「頭脳」。オペレーティングシステムとアプリのほとんどのコードを実行します。
- グラフィックス・プロセッシング・ユニット(GPU) — アプリのユーザインタフェースの視覚化や2D/3Dゲームなどのグラフィックス関連のタスクを処理します。
- 画像処理ユニット(ISP) — 画像処理アプリケーションで実行される一般的なタスクを高速化するために使用できます。
- デジタル・シグナル・プロセッサ(DSP) — CPUよりも数学的に集中的な機能を処理します。音楽ファイルの解凍が含まれます。
- ニューラル・プロセッシング・ユニット(NPU) — 機械学習(AI)タスクを高速化するためにハイエンド・スマートフォンで使用されます。音声認識やカメラ処理などが行われます。
- ビデオエンコーダ/デコーダ — ビデオファイルやフォーマットの電力効率の高い変換を処理します。
- Secure Enclave — 暗号化、認証、セキュリティ
- ユニファイド・メモリ — CPU、GPU、その他のコアが情報をすばやく交換できるようにします。
M1 Macを使って画像やビデオの編集作業をしている多くの人々が、このような速度の向上を実感している理由の一部です。彼らが行う多くのタスクは、専用のハードウェア上で直接実行できます。これが、高価なiMacがすべてのファンを回転させても追いつけないのに、安価なM1 Mac Miniは汗をかかずに大きなビデオファイルをエンコードできるのはそのためです。
青色で表示されているのは複数のCPUコアがメモリにアクセスし、緑色で表示されているのは多数のGPUコアがメモリにアクセスしているのが分かります。
ユニファイド・メモリというとあなたは混乱するかも知れません。共有メモリとどう違うのでしょうか? また、ビデオメモリとメインメモリを共有するのは、過去には性能の低下をもたらすひどい考えだったのではないでしょうか? はい、共有メモリは確かに悪かったです。その理由は、CPUとGPUが交互にメモリにアクセスする必要があったためです。共有するということは、データバスの使用を争うことになります。基本的には、GPUとCPUは、データをプッシュまたはプルするために細いパイプを交代で使用する必要がありました。
ユニファイド・メモリの場合、そうではありません。ユニファイド・メモリでは、GPUコアとCPUコアが同時にメモリにアクセスできます。従って、この場合、メモリを共有することによるオーバーヘッドはありません。さらに、CPUとGPUは、メモリがどこにあるかを相互に伝え合うことができます。以前は、CPUはメインメモリの領域からGPUが使用する領域にデータをコピーしなければなりませんでした。ユニファイド・メモリを使用すると、「GPUさん、メモリ位置2430から30MBのポリゴンデータを持ってきたぞ」と言っているようなものです。その後、GPUはコピーを行わずにそのメモリの使用を開始できます。
つまり、M1上の様々な特殊なコプロセッサはすべて、同じメモリプールを使うことで相互に高速に情報を交換できるため、大幅に性能の向上が可能になるということです。
ユニファイド・メモリ以前のMacのGPUの使い方。Thunderbolt 3ケーブルを使って、グラフィックカードをコンピュータの外部に出すという選択肢もありました。これは将来も可能かもしれないという推測があります。
なぜ、IntelとAMDがこの戦略を真似しないのか?
Appleがやっていることがとても賢いのなら、なぜ皆がそれをやらないのだろうか? ある程度はやっています。他のARMチップメーカーは、特化したハードウェアをどんどん投入しています。
AMDもまた、一部のチップに強力なGPUを搭載し始め、基本的にCPUコアとGPUコアを同じシリコンダイに配置した高速処理ユニット(APU)を使ったSoCのような形に徐々に移行しています。
AMD Ryzen Accelerated Processing Unit (APU)は、CPUとGPU(Radeon Vega)を1つのシリコンチップに搭載したものです。しかし、他のコプロセッサ、IOコントローラ、ユニファイド・メモリは含まれていません。
しかし、彼らがそれができない重要な理由があります。SoCは、基本的にはチップ上のコンピュータ全体を指します。そのため、HPやデルのような実際のコンピュータ・メーカーに自然に適合します。ばかげた車の例えではっきりさせておきましょう。あなたのビジネスモデルが自動車エンジンの製造と販売である場合、自動車全体の製造と販売を開始することは異例のことです。
対照的に、ARMの場合、これは問題ではありません。デルやHPなどのコンピュータ・メーカーは、ARMの知的財産のライセンスを取得し、他のチップのIPを購入するだけで、SoCに必要と思われる特殊なハードウェアを追加することができます。次に、完成した設計をGlobalFoundriesやTSMCのような半導体ファウンドリに渡します。TSMCは現在、AMDとApple向けのチップを製造しています。
台湾のTSMC半導体ファウンドリ。TSMCは、AMD、Apple、Nvidia、Qualcommなどの他の企業向けチップを製造しています。
ここで、IntelとAMDのビジネスモデルに大きな問題が発生します。彼らのビジネスモデルは、大きなPCマザーボードに差し込むだけの汎用CPUの販売に基づいています。そのため、コンピュータ・メーカーは、マザーボード、メモリ、CPU、グラフィック・カードを様々なベンダーから購入し、それらを1つのソリューションに統合することができます。
しかし、私たちは急速にその世界から離れつつあります。新しいSoCの世界では、様々なベンダーの物理コンポーネントを組み立てることはありません。代わりに、様々なベンダーのIP(知的財産)を集めます。グラフィック・カード、CPU、モデム、IOコントローラなどの設計を様々なベンダーから購入し、それを使って自社でSoCを設計します。そして、これをファウンドリに製造してもらうのです。
Intel、AMD、Nvidiaのいずれも、デルやHPに知的財産のライセンスして、マシン用のSoCを作るつもりはないので、大きな問題が発生しました。
確かに、IntelとAMDは完成したSoC全体の販売を開始するかも知れません。しかし、これらには何が含まれているのでしょうか? PCメーカーは、何が含まれるべきかについて様々な考えを持っているかも知れません。Intel、AMD、Microsoft、PCメーカーの間で、ソフトウェア・サポートが必要になるため、どのような種類の特殊チップを含めるべきかについて衝突が起こる可能性があります。
Appleにとって、これは簡単なことです。彼らはウィジェット全体をコントロールしています。開発者が機械学習用のものを作成するためのCore MLライブラリなどを提供しているのです。Core MLがAppleのCPUで動作するか、Neural Engineで動作するかは、開発者が気にする必要はありません。
どんなCPUでも高速に動作させるための基本的な課題
そのため、ヘテロジニアス・コンピューティングは理由の一部ですが、唯一の理由ではありません。M1に搭載されているFirestormと呼ばれるの高速汎用CPUコアは、純粋に高速です。これは、AMDやIntelのコアと比較して非常に弱い傾向があった過去のARMのCPUコアとは大きく異なります。
対照的に、Firestormは、ほとんどのIntelコアを打ち負かし、最速のAMD Ryzenコアをほぼ打ち負かしています。従来の常識では、そうはいかないと言われていました。
Firestormがなぜ速いかの理由について説明する前に、高速CPUを作るための核となる考え方が実際に何であるかを理解しておきましょう。
原則的には、次の2つの戦略を組み合わせて達成しています。
- より多くの命令をより速く連続して実行する。
- たくさんの命令を並行して実行する。
80年代には簡単でした。クロック周波数を上げるだけで、命令はより速く終了します。すべてのクロック・サイクルは、コンピュータが何かを行うときです。しかし、その何かは非常に小さいものである可能性があります。このように、命令はいくつかの小さなタスクで構成されているため、1つの命令が終了するまでに複数のクロックサイクルが必要になる場合があります。
しかし、今日ではクロック周波数を引き上げることはほぼ不可能です。これこそが、10年以上前から人々が唱えてきた「ムーアの法則の終焉」なのです。
このように、実際には、可能な限り多くの命令を並行して実行することが重要なのです。
マルチコアか、アウト・オブ・オーダー・プロセッサか?
これには2つのアプローチがあります。1つは、CPUコアを増やすことです。ソフトウェア開発者から見れば、スレッドを追加するようなものです。すべてのCPUコアはハードウェア・スレッドのようなものです。スレッドが何かを知らない人は、タスクを実行するプロセスと考えるといいでしょう。2つのコアを持つCPUは、2つの別々のタスク(2つのスレッド)を同時に実行できます。タスクは、メモリに格納されている2つの別々のプログラムとして記述することもできます。実際には同じプログラムを2回実行することもできます。各スレッドは、プログラム命令の順序でスレッドが現在どこにあるかなど、いくつかの帳簿が必要です。各スレッドは、一時的な結果を格納することができますが、これは個別に保持する必要があります。
原則として、プロセッサは1つのコアだけで複数のスレッドを実行できます。この場合、単純に1つのスレッドを停止し、現在の進行状況を保存してから別のスレッドに切り替えます。その後、別のスレッドに切り替わります。これはあまり性能の向上にはならず、ユーザーからの入力を待ったり、低速のネットワーク接続からのデータを待ったりするためにスレッドを頻繁に停止する場合にのみ使用されます。これらはソフトウェア・スレッドと呼ばれることがあります。ハードウェア・スレッドとは、物事を高速化するために、追加のコアなどの物理ハードウェアを自由に追加できることを意味します。
これに伴う問題は、開発者がこれを利用するためにコードを書かなければならないことです。サーバ・ソフトウェアなどの一部のタスクは、このように簡単に書けます。接続している各ユーザを個別に処理することを想像できます。これらのタスクは互いに独立しているので、多くのコアを持つことは、サーバー、特にクラウドベースのサービスにとって非常に優れた選択肢です。
クラウド・コンピューティング用に設計された128コアのAmpere Altra Max ARM CPUでは、多くのハードウェア・スレッドがメリットをもたらします。
AmpereのようなARM CPUメーカーが、クレイジーな128コアを搭載したAltra MaxのようなCPUを製造しているのを目にするのはそのためです。このチップは特にクラウド用に作られています。クラウドでは、できるだけ多くの同時使用ユーザを処理するために、1ワットあたりのスレッド数をできるだけ多くする必要があるため、シングルコアの性能は必要ありません。
対照的に、Appleは完全に反対側にいます。Appleはシングルユーザ向けのデバイスを製造しています。スレッド数が多いことは利点ではありません。彼らのデバイスは、ゲーム、ビデオ編集、開発などに使用されています。彼らは求めているのは、応答性の高い美しいグラフィックスとアニメーションを備えたデスクトップです。
デスクトップ・ソフトウェアは、一般的に多くのコアを利用するようには作られていません。例えば、コンピュータ・ゲームは8コアの恩恵を受ける可能性がありますが、128コアのようなものは全くの無駄になります。その代わりに、より少ないがより強力なコアが必要になります。
・・・
ここで興味深いことに、アウト・オブ・オーダー実行は、より多くの命令を並行して実行する方法ですが、その能力を複数のスレッドとして公開することなく、実行することができます。開発者は、この機能を利用するためにソフトウェアを特別にコーディングする必要はありません。開発者の視点から見ると、各コアの実行速度が速くなったように見えます。
これがどのように機能するかを理解するには、メモリに関するいくつかのことを理解する必要があります。ある特定のメモリ位置でデータを要求するのは遅いです。しかし、例えば1バイトを取得する場合も128バイトを取得する場合も遅延に違いはありません。データは、データバスと呼ばれるものを介して送信されます。これは、メモリと、データがプッシュされるCPUの様々な部分との間の道路やパイプと考えることができます。実際には、もちろん電気を通す銅のトラックです。データバスの幅が十分に広い場合は、同時に複数のバイトを取得できます。
このようにして、CPUは一度に実行する命令のチャンク全体を取得します。しかし、それらの命令は次々に実行されるように書かれています。最新のマイクロプロセッサは、アウト・オブ・オーダー(OoO)と呼ばれる実行を行います。
つまり、命令のバッファをすばやく分析し、どの命令がどれに依存しているかを知ることができます。以下の簡単な例を見て下さい。
01: mul r1, r2, r3 // r1 ← r2 × r3 02: add r4, r1, 5 // r4 ← r1 + 5 03: add r6, r2, 1 // r6 ← r2 + 1
乗算は遅い処理になる傾向があります。そのため、実行には複数のクロックサイクルが必要だとしましょう。2番目の命令は、その計算がr1レジスタに格納される結果を知ることに依存しているため、単に待機しなけらばなりません。
しかし、03行目の3番目の命令は、前の命令の計算に依存しません。従って、アウト・オブ・オーダー・プロセッサは、この命令の計算を並列に開始できます。
しかし、より現実的には、何百もの命令が必要になります。CPUは、これらの命令間のすべての依存関係を把握できます。
各命令への入力を調べることにより、命令を分析します。 入力は1つ以上の他の命令からの出力に依存しているか? 入力と出力とは、以前の計算結果を含むレジスタを意味します。
例えば、add r4, r1, 5命令は、mul r1, r2, r3によって生成されるr1からの入力に依存します。これらの関係を連鎖させて、CPUが処理できる長い精巧なグラフにまとめることができます。ノードは命令であり、エッジはそれらを接続するレジスタです。
CPUは、このようなノードのグラフを分析し、どの命令を並列に実行できるか、また複数の依存性のある計算結果を待ってから続行する必要があるかを判断します。
多くの命令はすぐに終了しますが、その結果を公式なものにすることはできません。それらをコミットすることはできません。そうでなければ、間違った順序で結果を提供してしまいます。他の人には、あたかも命令が発行されたときと同じ順番で実行されているかのように見えなければなりません。
スタックのように、CPUは、実行されていない命令にぶつかるまで、実行された命令を上から順にポップし続けます。
この説明はまだ終わっていませんが、これで少しヒントが得られます。基本的に、プログラマが知っていなければならない並列処理と、CPUがすべてをシングルスレッドであるかのように見せかけている並列性があります。しかし、その舞台裏では、アウト・オブ・オーダーの黒魔術が働いています。
M1のFirestormコアを蹴散らして名を馳せているのは、優れたアウト・オブ・オーダー実行のおかげなのです。実際には、IntelやAMDのどのコアよりもはるかに強力です。おそらk、メインストリーム市場の他のどの製品よりも強いでしょう。
なぜ、AMDとIntelのアウト・オブ・オーダー実行はM1より劣るのか?
私の説明の中で、アウト・オブ・オーダー実行(OoO)のいくつかの重要な詳細をスキップしまいましたが、これをカバーする必要があります。そうしないと、なぜAppleが先行しているのか、なぜIntelやAMDが追いつくことができないのかが理解できません。
私が話した大きな「スクラッチパッド」は、実際にはリオーダー・バッファ(ROB)と呼ばれるもので、通常のマシンコード命令は含まれていません。CPUがメモリから取り出して実行する命令ではありません。これらは、CPU命令セット・アーキテクチャ(ISA)の命令です。x86、ARM、PowerPCなどと呼ばれている命令はこのようなものです。
しかし、CPUの内部では、プログラマには見えないまったく別の命令セットで動作しています。私たちは、これらをマイクロ演算(micro-opsまたはμops)と呼んでいます。ROBはこれらのマイクロ演算でいっぱいです。
これらは、CPUが何かを並列に実行させるために行うすべての魔法に対して、はるかに実用的です。その理由は、マイクロ演算は非常に幅が広く(多くのビットを含む)、あらゆる種類のメタ情報を含むことができるからです。ARMやx86の命令にそのような情報を追加することはできません。
- プログラムのバイナリを完全に肥大化させる。
- CPUがどのように機能するか、OoOユニットがあるかどうか、レジスタの名前変更があるかどうか、その他の多くの詳細を明らかにします。
- メタ情報の多くは、現在の実行のコンテキストでしか意味を成しません。
これは、プログラムを書く時と同じように考えることができます。安定していて誰もが使う必要があるパブリックAPIがあります。これは、ARM、x86、PowerPC、MIPSなどの命令セットです。マイクロ演算は基本的にプライベートAPIで、パブリックAPIを実装するために使用されます。
また、マイクロ演算は通常、CPUにとっては作業が簡単です。なぜでしょうか? それは、それぞれが単純な限られたタスクを実行するからです。通常のISA命令はより複雑で、多くのことが起こるため、実際には複数のマイクロ演算に変換されます。
CISC CPUでは、通常はマイクロ演算を使用する以外の選択肢はありません。そうでなければ、大規模で複雑なCISC命令はパイプラインやOoOを実現するのはほぼ不可能になります。
RISC CPUには選択肢があります。 例えば、小型のARM CPUは、マイクロ演算をまったく使用しません。しかし、それはOoOのようなことができないことを意味します。
・・・
しかし、なぜこのようなことが重要なのか疑問に思うでしょう? なぜAppleがAMDやIntelに対して優位に立っているのかを理解するために、この詳細を知ることが重要なのでしょうか?
これは、高速に実行できるかどうかは、ROBをどれだけ速くマイクロ演算で満たすか、そしてどれだけの数で埋められるかに依存しているためです。満たすのが速いほど、また大きくなるほど、並列に実行できる命令を選択する機会が増え、性能を向上させることができます。
マシンコード命令は、私たちが命令デコーダーと呼ぶものによってマイクロ演算に切り分けられます。より多くのデコーダーがあれば、より多くの命令を並列に切り刻むことができ、ROBをより速く埋めることができるようになります。
ここに大きな違いがあります。最大の最悪のIntelやAMDマイクロ・プロセッサコアは4つのデコーダがあります。つまり、4つの命令を並列にデコードしてマイクロ演算を行うことができることを意味します。
しかし、Appleにはクレイジーな8つのデコーダーがあります。それだけでなく、ROBは3倍も大きくなっています。基本的には3倍の命令を保持することができます。他の主流のチップメーカーは、CPUにこれほど多くのデコーダーを搭載しているところはありません。
なぜ、IntelやAMDは命令デコーダーを増やせないのか?
ここでようやくRISCの復讐が見えてきましたが、M1 FirestormコアがARM RISCアーキテクチャを採用しているという事実が重要になり始めました。
x86の場合、命令の長さは1〜15バイトです。RISCチップでは、命令は固定サイズです。この場合、なぜそれが関係するのでしょうか?
すべての命令の長さが同じである場合、バイトのストリームを命令に分割して8つの異なるデコーダーに並列に供給することは簡単になるためです。
しかし、x86 CPUでは、デコーダーは次の命令がどこから始まるかが分かりません。各命令がどのくらいの長さかを知るためには、実際に各命令を分析する必要があります。
IntelとAMDがこれに対処する力ずくの方法は、考えられるすべての開始点で命令をデコードしようとすることです。つまり、破棄しなければならない多くの間違った推測や間違いに処理しなければなりません。これにより、デコーダーの段階で、非常に複雑になるため、デコーダーを増やすことが非常に難しくなります。しかし、Appleにとっては、デコーダーを追加することは簡単なことです。
実際、追加すると、他にも多くの問題が発生するため、AMD自身によると4つのデコーダーは基本的にどこまで到達できるかの上限となっています。
これが、M1 Firestormコアが同じクロック周波数でAMDやIntel CPUの2倍の命令を処理することを可能にします。
反論として、CISC命令がより多くのマイクロ演算に変わり、密度が高くなるため、例えば、1つのx86命令のデコードは、2つのARM命令のデコードすることに似ています。
これが現実の世界には当てはまらないことを除いて。高度に最適化されたx86コードは、複雑なCISC命令を使用することはめったにありません。ある面で、それはRISCの風味を持っています。
しかし、15バイト長の命令がまれであっても、デコーダーではれらを処理するために作らなければならないため、IntelやAMDには役立ちません。これは複雑さを招き、AMDやIntelがデコーダーを追加するのを阻んでいます。
しかし、AMDのZen3コアはまだ速いですよね?
私が、性能ベンチマークで覚えている限りでは、最新のAMDのCPUコア、Zen3と呼ばれるものは、Firestormコアよりもわずかに高速です。しかし、ここに落とし穴があります。これは、Zen3コアのクロックが5GHzだからです。Firestormコアのクロックは3.2GHzです。Zen3は、クロック周波数がほぼ60%近く高いにもかかわらず、Firestormをかろうじて追い抜いています。
では、なぜAppleはクロック周波数も上げないのでしょうか? クロック周波数が高くなるとチップが熱くなるからです。これは、Appleの重要なセールスポイントの1つです。 IntelやAMD製品とは異なり、Appleのコンピュータは冷却をほとんど必要としません。
本質的に、FirestormコアはZen3コアよりも本当に優れていると言えます。Zen3は、より多くの電流を流し、より高温にすることで、ゲームにとどまることができます。 Appleは単にそうしないことを選択しました。
Appleがより高いパフォーマンスを望むなら、彼らは単により多くのコアを追加するだけです。これにより、性能を向上させながら、ワット使用量を抑えることができます。
将来
AMDとIntelは、2つの面で自分たちを窮地に追い込んでいるようです。
- ヘテロジニアス・コンピューティングとSoC設計を追求することを容易にするビジネスモデルがありません。
- レガシーなx86 CISC命令セットが、OoO性能を向上させることを難しくしています。
ゲームオーバーという意味ではありません。もちろん、単純にクロックを増やしたり、冷却装置を増やしたり、コアを増やしたり、CPUキャッシュを強化したりすることもできます。しかし、どちらも不利な状況にあります。Intelは、コアはすでにFirestormに打ち負かされており、SoCソリューションに統合するためのGPUが弱いため、最悪の状況にあります。
コア数を増やすことの問題点は、一般的なデスクトップのワークロードでは、コア数が多すぎるとリターンが減少してしまうことです。確かに、多くのコアはサーバには最適です。
しかし、ここでは、AmazonやAmpereのような企業が128コアのモンスターCPUで攻撃しています。これは、西部戦線と東部戦線を同時に戦うようなものです。
しかし、AMDやIntelにとって幸いなことに、Appleはチップを市場に販売していません。だから、PCユーザは、彼らが提供しているものは何でも我慢するしかありません。PCユーザは彼らを見捨てるかも知れませんが、それはゆっくりとしたプロセスです。多額の投資をしているプラットフォームをすぐに離れることはありません。
しかし、どのプラットフォームにもあまり深く投資せずに、有り余るほどのお金を持っている若い専門家は、将来的にはますますAppleに頼るようになるかも知れません。プレミアム市場での地位を強化し、その結果、PC市場での総利益のシェアを高める可能性があります。