M1はRISC-Vの台頭を予告する
(medium.com/@erik-engheim)"M1はパラダイムシフトの始まりとしてRISC-Vを後押しするだろうが、そのやり方はあなたが思っているものとは違うだろう"
『"M1チップはなぜあれほど速いのか?"』を書いたエンジニアによる続編記事。RISC-Vの未来を興味深い観点から予想している。
M1の性能要因は
-
多数のデコーダとOoOのアウトオブオーダー実行
-
GPU、NPU、DSPなど複数の専用チップ
この記事は、2番目のHeterogeneous(異種)コンピューティングについてより詳しく扱っている。
専用チップにはさまざまな呼び方があるが、ここではすべてCoprocessor(コプロセッサ)と総称する(またはAcceleratorとも呼べる)。
-
コプロセッサはまったく新しいトレンドではない
-
1985年に登場したAmiga 1000にもオーディオ/グラフィックス向けのコプロセッサがあり、GPUもコプロセッサであり、
GoogleのTPU(Tensor Processing Unit)もまた機械学習に最適化されたコプロセッサである
[ Coprocessorとは何か ]
-
CPUと違って単独では存在できない。コプロセッサだけを載せてもコンピュータにはならず、単に特定の処理が得意な特殊用途プロセッサである
-
初期の例としては、Intelの8087 Floating Point Unit(FPU)がある。Intelの8086は整数計算は得意だったが、浮動小数点演算は不得意だった
-
整数計算でも浮動小数点演算をエミュレートすることはできるが遅かった。これは、初期のマイクロプロセッサが加算/減算しかできず乗算はできなかったため、加算を何度も繰り返して乗算を処理していたのに似ている
-
つまり、"複雑な数学計算は単純な処理の反復によって実行できる"
-
すべてのコプロセッサがしていることも同じである。CPUでもコプロセッサの仕事はできる。単純な動作を繰り返せばよい
-
初期にGPUが必要だった理由は、何百万ものポリゴン/ピクセルに同じ計算を繰り返す処理がCPUでは非常に時間がかかったからである
[ データはコプロセッサでどのように入出力されるのか ]
-
マウス/キーボード/スクリーンをはじめ、GPU/FPU/Neural Engineを含むすべてのコプロセッサは、特定のメモリにアクセスしてデータを読み書きするものと考えられる
-
これらの処理はDevice Driverが扱うため、一般のソフトウェア開発者が意識することはない
→ DMA(Direct Memory Access)コントローラなどの役割
-
DOS時代のC/C++では、ポインタでビデオメモリのアドレスに直接アクセスしてピクセルを書き換えることができた
-
コプロセッサはこのような方式で動作し、NPU、GPU、T1などはそれぞれ自分たちと通信するためのアドレスを持ち、非同期に通信できる
-
CPUはNeural EngineまたはGPUに送る一連の命令をメモリ上に並べ、そのアドレスをNeural Engine/GPUに知らせる
-
CPUはコプロセッサがその命令とデータを処理している間、待つ必要がないため、このとき割り込みが必要になる
[ 割り込みはどのように動作するか ]
-
グラフィックス/ネットワークカードはPCに挿され、割り当てられた割り込みラインを持っている
-
これはCPUに直接つながったラインのように動作し、有効になるとCPUはほかの仕事を中断して割り込みを処理する
-
実際には、現在位置とレジスタをメモリに保存しておくことで、あとでそこへ戻ることができる
-
その後、割り込みテーブルから実行すべき処理を探す。テーブルには、割り込み発生時に実行するプログラムのアドレスが入っている
-
プログラマにはこうした仕組みは見えず、特定のイベントに登録するコールバック関数のように見える。Device Driverが低レベルでこれを処理する
-
こうした説明をする理由は、コプロセッサを使うときに何が起きているかを知っておくことで、実際に通信するときにどんなことが伴うのかを理解できるからである
-
割り込みを使うと、多くのことが並列に起こる
→ CPUがマウスによって中断されている間にも、アプリケーションはネットワークカードから画像を受け取ることができ、マウスが移動するとCPUは新しい座標を取得し、それをGPUに送って新しい位置にマウスカーソルを描画する。GPUがマウスカーソルを描いている間に、CPUはネットワークから取得した画像の処理を始める
- こうした割り込みを使って、M1のNeural Engineに複雑な機械学習タスクを送れば、WebCamで顔を識別できる。Neural Engineが画像データを処理している間も、コンピュータとCPUは別の作業をしながらユーザーに応答できる
[ The Rise of RISC-V ]
-
2010年、UCバークレーの並列コンピューティング研究室は、より多くのコプロセッサを使う方向へ発展していった
-
汎用CPUコアを絞り出すだけでは、もはや簡単に性能を伸ばせないという点にムーアの法則の終わりを見た
→ 特殊なハードウェアであるコプロセッサが必要になった
- クロック周波数は、発熱や消費電力などの理由で容易には上げられない
→ 多数のデコーダとOoOのアウトオブオーダー実行がひとつの方法
→ 『"M1チップはなぜあれほど速いのか?"』を参照 https://ja.news.hada.io/topic?id=3315
[ トランジスタ予算をCPUコアに使うか、Coprocessorに使うか ]
-
128コアに増やしても、デスクトップシステムがより効率的になるわけではない
-
80年代初頭には、2万個のトランジスタ予算があれば、1万5000個を使ってCPUを作ればよかった
-
CPUが100種類の異なる仕事をするとき、そのうち1つの仕事を処理するためのコプロセッサを作るのに1000個のトランジスタが必要だとすると、すべての仕事向けのコプロセッサを作るには10万個のトランジスタが必要になり、予算を超えてしまう
[ トランジスタが増えるにつれて戦略が変わる ]
-
初期設計では汎用コンピューティングに集中すべきだったが、今では非常に多くのトランジスタを載せられるようになり、それらを何に使うべきかが問題になっている
-
そのため、コプロセッサの設計が大きなテーマになっている。さまざまな新しいコプロセッサを作る研究が数多く進められている
-
この研究では、単純なアクセラレータの状態から基礎的な部分を育てていかなければならないことが多い
-
CPUと違って、すべての段階の命令を読み取って処理するわけではないため、メモリへのアクセスや後始末の方法などが分からない
-
これに対する解決策は、シンプルなCPUをコントローラとして使うこと
-
つまり、コプロセッサ全体はシンプルなCPUによって制御される特殊なアクセラレータ回路として構成され、特定の仕事を高速化する
→ たとえばNeural Engine/Tensor Processing Unitのようなチップは、行列を保持できる大きなレジスタを操作できる
[ RISC-VはAcceleratorを制御するために特化している ]
-
これこそがRISC-Vの設計目的である
-
汎用的なCPU処理向けに40〜50個の最小命令セットを持っている
→ x86 CPUには1500個の命令セットがある
-
大きな固定命令セットの代わりに、RISC-Vは拡張という考え方を中心に設計されている
-
すべてのコプロセッサは異なるため、RISC-Vはコア命令セットに加えて、コプロセッサが必要とする拡張命令セットを持つように構成できる
これがこの記事で説明したいことだ。
-
AppleのM1は、業界全体をコプロセッサが支配する未来へ向かわせるだろう
-
そして、そのコプロセッサを作るために、"RISC-Vはパズルの重要なピース"になる
[ RISC-VでCoprocessorを作る利点 ]
-
チップを作ることは複雑でコストのかかる仕事である
-
チップ検証のためのツール構築から、テストプログラムの実行、診断やそのほか多くのことに大きな労力が必要になる
-
これが、いまARMを使う価値の一部でもある。大きなエコシステムがあるため、設計を検証しテストできる
-
だからこそ、独自の命令セットを持つのはよい考えではない
-
RISC-Vには複数の企業がツールを作れる標準があり、エコシステムが形成されているので、複数社で負担を分担できる
-
既存のARMを使わない理由は何か。ARMは汎用目的CPUとして作られており、大きな固定命令セットを持つからである
-
顧客の要求とRISC-Vとの競争を受けて、ARMも2019年に拡張用命令セットを公開した
-
しかし依然として問題は、それが最初からこの目的のために設計されたものではないことだ
→ ARMのツールチェーン全体は、大きなARM命令セットが実装されていることを前提としている
→ しかしコプロセッサは、大きな命令セットを望んでいるわけでも必要としているわけでもない
→ コプロセッサが求めているのは、拡張機能を備えた最小限の固定基本命令セットという発想に基づいて構築されたツールのエコシステムである
- これがなぜ有益かは、NvidiaによるRISC-V活用から洞察が得られる
→ 大規模GPUには、コントローラとして使う一種の汎用CPUが必要になる
→ FALCON: FAst Logic CONtrollerというチップを作って使っていた
→ 低コストで高効率
-
RISC-Vは小さくシンプルな命令セットを持っているため、ARMを含むあらゆる競合製品を上回る
-
NvidiaはRISC-Vを選ぶことで、より小さなチップを最小限の電力で実現した
-
拡張メカニズムを使えば、必要な作業に合わせた命令だけを追加できる
[ ARMは新しいx86になる ]
-
皮肉にも、MacとPCがARMで動く未来を見ることになるだろう
-
しかし、その周囲のカスタムハードウェアはRISC-Vが支配するコプロセッサ群が占めることになる
-
コプロセッサが一般化するにつれ、SoC上ではARMよりRISC-Vチップの方が多くなるだろう
-
未来はARM or RISC-Vではなく、ARM and RISC-Vになる
[ ARMはRISC-Vコプロセッサ軍団を指揮することになる ]
-
汎用ARMプロセッサは、グラフィックス、暗号化、ビデオ圧縮、機械学習、信号処理を担当するRISC-Vコプロセッサの軍団とともに中心に位置することになる
-
UC BerkeleyのDavid Patterson教授とそのチームは、このような未来が近づいているのを見て、RISC-Vをそれにうまく合うよう調整した
-
あらゆる種類の特殊ハードウェアやマイクロコントローラがRISC-Vに強い関心を示しており、今日ARMが支配している多くの領域がRISC-Vに置き換わっていくだろう
[ RISC-VをメインCPUとして使えないのか? ]
-
多くの人は、ARMをRISC-Vで完全に置き換えるのはどうかと考える
-
RISC-Vのあまりに単純な命令セットでは、ARMやx86が提供する高性能を出せないという意見もある
-
しかし、RISC-Vをメインプロセッサとして使うことは十分可能であり、性能は問題ではない
→ ただし、ARMのような高性能RISC-Vを作る人が必要だ
→ つまり可能ではあるが、問題は勢いにある。MacOSとWindowsはすでにARMで動いている
→ 短期的には、MSやAppleが別のハードウェア移行のために再び労力を投じることはないだろう
8件のコメント
面白いですね。良い要約をありがとうございます。
これからは学校でも、x86 や amd64 ではなく arm や risc-v を基準にアーキテクチャの授業をする日が来るのでしょうね……
以前、ARM出身のエンジニアがRISC-Vを批判した内容がここに投稿されたことがありましたよね。
https://ja.news.hada.io/topic?id=3137
上の内容どおりなら、RISC-Vを採用したチップの多様性が高まるのは意図されたものなのでしょう。
ますます面白くなってきましたね。
IntelとAMDがどう対応するのか気になります。
中国がRISC-Vにほぼオールインしているようなものだと聞いていますが……本当に未来がどうなるのか想像もつきませんね
私も中国のことを思い浮かべました。米国のけん制を受け続けているファーウェイが前に出て、メインCPUとして作ってみたらどうなるんでしょうね(笑)
HuaweiはARMだけでなくTSMCも使えない状況なので、どうせ高性能CPUの開発自体はもう失敗したと見てもよさそうです。せいぜい、性能要求がそれほど高くない自社のネットワーク機器向けなら別かもしれません。
ただ、ほかにも多くの企業がRISC-Vを使っているので、これらの企業から成果が出てきそうです。
ああ、TSMC自体が塞がれていることを考えていませんでした。SMICが7nmを超えて5nmまでのプロセスを実現しない限り、難しそうですね
この方は本当に文章が上手ですね。これも面白く読みました。
RISC-V が別の代替案になるだろうという予想は多かったのですが、
こういう形で補助プロセッサ向けとしては最高のチップになり得る、という観点では考えたことがありませんでした。