motpod
Dwarkesh Podcast · 2026年5月23日

Reiner Pope – チップ設計をボトムアップで考える

AI generated article / ja / study
この記事でわかること
  • Reiner Pope(MatX CEO、元Google TPUアーキテクト)が、論理ゲートから出発し、乗算累積回路、シストリックアレイ、そしてGPU・TPU・FPGA・...
  • [0:00] 論理ゲートから乗算累積回路へ:チップ設計の最小単位 チップの最下層で動作する基本要素は、AND、OR、NOTといった論理ゲートであり、これらが金属配線(me...
  • この乗算累積を実現する回路は、まず部分積(partial products)を生成するために多数のANDゲートを必要とする。Pビット×Qビットの乗算では、P×Q個のAND...
こんな人向け

自分では見つけにくい海外Podcastの話題に、日本語で気軽に触れたい人。

出典Podcast

Dwarkesh Podcast / Dwarkesh Patel

Read
Open episodeFind more episodes

Reiner Pope(MatX CEO、元Google TPUアーキテクト)が、論理ゲートから出発し、乗算累積回路、シストリックアレイ、そしてGPU・TPU・FPGA・人間の脳に至るまで、チップ設計の階層をボトムアップで解説した黒板講義である。ホストのDwarkesh PatelはMatXへのエンジェル投資家という立場であり、その視点から「なぜAIチップは現在のような構造になったのか」「設計上の本質的なトレードオフは何か」を徹底的に問う。議論は、ビット幅と回路面積の二次関係、データ移動コストが演算コストを圧倒する構造、クロックサイクルとパイプラインレジスタの最適化、FPGAの10倍のオーバーヘッドの原因、キャッシュ対スクラッチパッドの設計思想の違い、CPUコアがGPUコアより遥かに大きい理由、そして脳とシリコンのエネルギー効率の比較に及ぶ。チップ設計の「計算対通信」という普遍的なトレードオフが、ゲートレベルからデータセンター全体まで一貫して現れることを示した点が、本エピソードの核心である。

0:00論理ゲートから乗算累積回路へ:チップ設計の最小単位

チップの最下層で動作する基本要素は、AND、OR、NOTといった論理ゲートであり、これらが金属配線(metal traces)で物理的に接続される。AIチップが実行すべき主要な計算は行列乗算であり、その基本プリミティブは乗算累積(multiply-accumulate、MAC)である。Popeは具体例として、4ビット数同士の乗算に8ビットの加算を組み合わせた回路を手計算で示す。なぜ乗算累積が基本単位なのか。第一に、行列乗算の内側では「for i, j, kの三重ループ」の各ステップで乗算と加算が発生するからである。第二に、AIチップ特有の事情として、乗算は低精度(例:FP4)で行われる一方、累積(加算)の精度は高く保つ必要がある。多数の積を足し合わせる過程で丸め誤差が蓄積するため、加算側により多くのビット幅が必要となる。

この乗算累積を実現する回路は、まず部分積(partial products)を生成するために多数のANDゲートを必要とする。Pビット×Qビットの乗算では、P×Q個のANDゲートが消費される。次に、これらの部分積と累積項を合計するために、フルアダー(full adder)と呼ばれる論理ゲートが用いられる。フルアダーは3つの1ビット入力(X, Y, キャリーイン)を受け取り、2ビットの出力(サムとキャリーアウト)を生成する。これは「3-to-2圧縮器」とも呼ばれ、同じ桁の3ビットを数えて2進数で表現する動作をする。Popeは、このフルアダーを繰り返し適用して部分積の列を圧縮していく「データ乗算器(data multiplier)」の手法を説明する。入力ビット数が24(16個の部分積+8ビットの累積項)で出力が8ビットの場合、消費されるフルアダーの数は24−8=16個となる。一般化すると、P×Q個のフルアダーが必要であり、この綺麗な代数関係が乗算累積を基本単位とする第二の理由である。

ここで重要なのは、ビット幅と回路面積の関係が二次関数的(quadratic)であることだ。Popeは「ビット幅を半分にすると、回路面積は4分の1になる」と指摘する。これが、ニューラルネットワークにおいて低精度演算がこれほど効果的に機能した唯一最大の理由である。Nvidiaの製品スペックを見ると、B100やB200まではビット精度を半分にするごとにFLOP数が2倍になっていたが、これは二次関数的なスケーリングを正確に反映しておらず、本来は4倍になるべきである。B300以降ではFP4がFP8の3倍高速とされており、このズレを部分的に修正し始めている。ただし、ここで示したのは整数乗算の単純なケースであり、FP4やFP8のような浮動小数点では指数部の処理が加わり計算はより複雑になる。

16:31マルチプレクサとデータ移動の隠れたコスト

乗算累積回路そのものよりも、データを演算器に運ぶためのデータ移動コストがはるかに大きいというのが、Popeの核心的な指摘である。従来のCPUやTensor Core登場前のGPU(CUDAコア)では、レジスタファイル(register file)から任意の3つのレジスタを読み出し、乗算累積を実行して結果を書き戻すというアーキテクチャをとっていた。このとき、レジスタファイルからALUへのデータ選択にはマルチプレクサ(MUX)が必要となる。

MUXの回路コストを分析すると、N個の入力から1つを選択するN入力MUXは、Pビット幅の場合、N×P個のANDゲートと(N−1)×P個のORゲートを消費する。これは、各入力ビットを選択信号でマスクし、それらをORで統合するという「最も愚直な方法」で実装されるからである。Popeは具体例として、8エントリのレジスタファイルから3つの入力を選択する場合を計算する。この場合、データ移動だけで3×8×P個のANDゲートが必要となる。一方、乗算累積回路そのものはP×Q(Q=4なら4P)個のゲートで済む。つまり、レジスタファイルがたった8エントリという非常に小さいケースでも、データ移動コストは演算コストの6倍にもなる。

この問題を解決するために導入されたのが、Nvidia Volta世代以降のTensor Core、より一般的にはシストリックアレイ(systolic array)である。Popeは「ソフトウェアプログラマからは見えないデータ移動にほとんどの回路面積を費やしており、本来重視すべき演算にはごく一部しか使われていない。このバランスを変える必要がある」と説明する。シストリックアレイの戦略は、行列乗算のループを一段階上の粒度でハードウェアに焼き付けることにより、レジスタファイルへのアクセス回数あたりの演算量を劇的に増やすことである。

26:10シストリックアレイの動作原理:計算対通信の最適化

シストリックアレイの本質は、行列乗算の「計算量は二次関数的に増えるが、入出力の通信量は一次関数的に抑える」という設計にある。Popeは2×2の簡単な例を用いて説明する。行列とベクトルの乗算では、各列でドット積が計算される。このとき、重み行列(weight matrix)はシストリックアレイ内部のレジスタに局所的に格納され、長期間再利用される。一方、入力ベクトルと出力ベクトルのみが外部のレジスタファイルとの間でやり取りされる。これにより、シストリックアレイのサイズをX×Yとしたとき、計算量はX×Yに比例するが、入出力の通信量はX(またはY)に比例するように設計できる。

重み行列をシストリックアレイにロードする方法も重要である。Popeは「非常にゆっくりと(very slowly)流し込む」と表現する。各列でデイジーチェーン(daisy chain)を形成し、1クロックサイクルごとに1行ずつシフトしながらデータを投入する。これにより、外部レジスタファイルからの配線帯域幅をXに抑えつつ、X×Y個の重みを格納できる。古いTPUでは128×128のシストリックアレイが採用されていた。

ここで浮かび上がるのは、チップ設計のあらゆる階層に現れる「計算対通信」のトレードオフである。前回のエピソードで議論したデータセンター全体での推論最適化(バッチサイズを大きくしてメモリ帯域幅あたりの計算量を増やす)と、今回のシストリックアレイ内部の最適化は、本質的に同じ原理に基づいている。Popeは「これはゲートのすぐ近くからデータセンターまで、スタックの上下を通じて現れる」と総括する。

シストリックアレイの設計における非自明なトレードオフとして、Popeは「サイジング決定」を挙げる。シストリックアレイを大きくすればデータ移動のオーバーヘッドは減少するが、レジスタファイルの柔軟性(多様なアプリケーションへの対応力)が犠牲になる。チップ面積のうち何%をデータ移動に割り当てるかという予算配分が、設計上の核心的な判断となる。

39:11クロックサイクルとパイプラインレジスタ:同期の代償

チップは1000億ものトランジスタを搭載する超並列デバイスであり、その同期にはソフトウェアのミューテックスとは根本的に異なるアプローチが取られる。Popeは「約1ナノ秒ごとに、チップ上のすべての回路が一斉に一時停止し、同期する。これがクロックサイクルである」と説明する。この同期は、レジスタと呼ばれる記憶素子によって媒介される。レジスタの間には「論理の雲(cloud of logic)」が存在し、クロックが次のタイミングを刻むまでに、この雲の中での計算が完了していなければならない。

クロック速度を上げるための主要な手法が、パイプラインレジスタの挿入(pipeline register insertion)である。一つの大きな論理ブロックを分割し、中間にレジスタを挟むことで、各段の遅延を短縮し、クロック周波数を倍にできる。ただし、これにはレジスタ増加による面積コストが伴う。Popeは「レジスタとANDゲートだけの単純なループなら、4〜6GHzという驚異的なクロック速度も可能だが、その場合、面積のほとんどがパイプラインレジスタに消費され、実質的な仕事量は減ってしまう」と指摘する。チップのスループットは「1クロックあたりの仕事量×クロック周波数」の積であり、両者のバランスが重要である。

より困難なケースは、計算結果が自分自身にフィードバックするループ(例:累積加算)である。このループの途中にパイプラインレジスタを挿入すると、計算の意味が変わってしまう(偶数番目の値と奇数番目の値で別々の累積和になってしまう)。Popeは「すべてのチップのどこかに存在するこのループ構造が、クロックサイクルを決定する最も難しい要素である」と述べる。TSMCが提供する標準セルライブラリでは、1クロックサイクル内に直列に配置できるゲート数は約10〜30個であり、これが実用的なクロック周波数の上限を決める。

51:51FPGA vs ASIC:柔軟性と効率の10倍の差

FPGA(Field-Programmable Gate Array)とASIC(Application-Specific Integrated Circuit)は、同じ概念モデル(ゲート、配線、固定クロック)を共有するが、その実装方法とコスト構造が根本的に異なる。Popeは「FPGAで表現できるものはすべてASICでも表現できる。ASICの方が約1桁安く、エネルギー効率も良い。しかし、最初のFPGAは1万ドルで手に入るのに対し、最初のASICを作るには3000万ドル(約45億円)かかる」と対比する。高頻度取引(HFT)のように、決定論的なレイテンシと高速実行が必要だが、アルゴリズムを頻繁に変更する(月単位)ユースケースでは、FPGAが合理的な選択となる。

FPGAがどのようにASICのプログラミングモデルをエミュレートするか。その基本構成要素は、レジスタとルックアップテーブル(LUT)である。LUTは4ビット入力、1ビット出力の真理値表を内部に持ち、任意の論理ゲート(AND、OR、XORなど)をプログラム可能にする。4ビット入力の場合、16通りの出力パターンを格納する16エントリのテーブルとなり、これは実質的に16入力のMUXとして動作する。Popeは「LUT1つで32個のゲートを消費するが、ASICで同じ4入力ANDを実装すれば3ゲートで済む。この10倍のオーバーヘッドが、FPGAがASICより10倍遅い理由である」と説明する。

FPGAのプログラミングは、すべてのMUXの制御信号を設定することに他ならない。各LUTやレジスタの前には、近隣の回路から入力を選択するMUXが配置されており、その選択信号を構成ビット(configuration bit)として書き込む。Popeは「FPGAの内部は、MUXの上にMUXが乗り、さらにMUXが乗る構造になっている。MUXの入れ子構造がすべてだ」と表現する。AMD(旧Xilinx)などのFPGAベンダーは、近距離のローカル配線については高い柔軟性を提供するが、長距離の大域配線についてはトポロジーを固定する必要がある。

1:03:25キャッシュ vs スクラッチパッド:決定論的レイテンシの設計思想

CPUにおけるレイテンシの非決定論性の最大の原因は、キャッシュシステムである。CPUはメモリアクセス命令を実行するたびに、まずキャッシュを確認し、データが存在すれば(キャッシュヒット)高速に応答し、存在しなければ(キャッシュミス)メインメモリ(DDR)まで取りに行く。キャッシュはメインメモリより約2桁高速であり、これなしではプログラムは100倍遅くなる。しかし、キャッシュヒットするかどうかは、他のプログラムの実行状況や過去のアクセスパターンに依存するため、実行のたびにレイテンシが変動する。

これに対する代替設計がスクラッチパッド(scratchpad)である。TPUが採用するこの方式では、ソフトウェアが明示的に「スクラッチパッドから読め」と「HBM(高帯域メモリ)から読め」という異なる命令を使い分ける。ハードウェアが自動的に判断するのではなく、ソフトウェアがデータの配置と移動を完全に制御する。これにより、レイテンシは完全に決定論的になる。Popeは「GROQもTPUも、コア内部では決定論的レイテンシを実現している。CPUから非決定論性を取り除くことは技術的に可能だが、市場での魅力がなく、誰もそのようなCPUを作らなくなった」と指摘する。

CPUコアがGPUコアよりはるかに大きい理由も、ここに関連する。CPUのダイ面積の大部分はキャッシュとレジスタファイルが占めており、ALU(演算ユニット)はごく一部である。さらに、CPUには分岐予測器(branch predictor)という大規模な回路が存在する。分岐予測器は、条件分岐命令の結果が確定する前に、次の命令を予測して投機的に実行するための機構である。Popeは「分岐命令の評価とプログラムカウンタの更新には約5ナノ秒かかる。これは200MHzに相当する。しかしCPUは1〜2GHzで動作したい。そのため、分岐の結果が判明する前に後続の命令を実行し続ける必要がある。この投機的実行を支えるのが分岐予測器である」と説明する。GPUはこの分岐予測器を大幅に削減し、レジスタファイルもよりタイトに設計することで、同じダイ面積により多くのコアを搭載できる。

1:12:00脳 vs チップ:クロック速度とエネルギー効率の根本的差異

人間の脳とシリコンチップの比較において、Popeはいくつかの重要な差異を指摘する。第一に、脳のクロック速度(ニューロンの発火頻度)は約1kHz程度であり、シリコンのGHzと比較して桁違いに遅い。しかし、Popeは「GPUを1GHzではなく1MHzで動作させれば、脳と同程度の処理になるかというと、そうではない」と述べる。その理由は、シリコンのエネルギー消費の大部分が動的電力(dynamic power)、すなわちビットが0から1、または1から0に遷移する際のキャパシタの充放電に起因するからである。クロックを遅くすれば遷移回数は減るが、回路を安定させるための電圧を下げられるわけではなく、エネルギー効率が1000倍向上するわけではない。

第二に、脳ではメモリと計算が同一の場所(シナプスとニューロン)に共存している。これはシリコンチップにおける「メモリと計算の分離」とは対照的である。ただしPopeは、シストリックアレイが重みを局所的に格納する点で、ある種のメモリ計算融合を実現していると指摘する。

第三に、脳の結合は非構造的スパース性(unstructured sparsity)を持ち、任意のニューロンが任意のニューロンと接続できる。これに対し、シリコンチップのシストリックアレイは構造的スパース性(列や行に整列した規則的な接続)に最適化されている。Popeは「脳の非構造的結合をシリコンで模倣しようとすると、配線の複雑さが爆発的に増大する」と示唆する。

1:15:33GPUは多数の小さなTPUの集合である

GPUとTPUのトップレベルの構成を比較すると、GPUは多数のほぼ同一のユニット(SM、Streaming Multiprocessor)が規則的なグリッド状に配置され、中央にL2キャッシュを持つ。一方、TPUはより粗粒度のユニットで構成され、少数の大規模な行列演算ユニット(MXU、シストリックアレイ)とベクトルユニットが配置される。Popeは「GPUのSMを縮小すると、小さなMXUと小さなベクトルユニットを持つミニTPUになる。つまり、GPUは多数の小さなTPUをタイル状に並べたものだ」と表現する。

この構成の違いは、データ移動の帯域幅に影響する。GPUでは各SMが独自のレジスタとスケジューラを持ち、SM間のデータ移動は多数の配線経路を通じて行われる。TPUではベクトルユニットとMXUの間のデータ移動が限られた経路(チップの周辺部)に集中するため、GPUの方がベクトルユニットと行列ユニット間のデータ移動帯域幅が高い。しかし、GPUではSM内部で処理が完結する場合はデータ移動距離が短くエネルギー効率が良いが、SM間をまたぐ処理になると複雑さとコストが増大する。

Popeは自社MatXの設計思想について「分割可能なシストリックアレイ(splittable systolic array)」という概念を紹介する。これは、大きなシストリックアレイを必要に応じて小さなシストリックアレイとしても動作させられるようにするもので、GPUのような細粒度の柔軟性とTPUのような大規模効率を両立しようとする試みである。ただし、CUDAアーキテクチャをサポートするために必要なSM内の諸機能(レジスタ、ワープスケジューラなど)のうち、何を削除し何を残すかが設計上の核心的な判断となる。

結びに

本エピソードが聴き手に残す最大の洞察は、チップ設計のあらゆる階層に「計算対通信」という普遍的なトレードオフが貫かれているという認識である。論理ゲートのレベルではビット幅と面積の二次関係、シストリックアレイでは行列サイズと入出力帯域の一次対二次の関係、データセンター全体ではバッチサイズとメモリ帯域幅の関係として、同じ原理が現れる。Popeの説明は、ソフトウェアエンジニアが普段意識することのない「MUXのコスト」「パイプラインレジスタの挿入」「キャッシュミスの非決定論性」といったハードウェアの現実を、具体的なゲート数や数値とともに可視化した点で貴重である。特に、Nvidiaの製品スペックにおけるFP4とFP8の性能比が理論上の4倍ではなく3倍であるという指摘は、チップ設計における現実的な制約(データ移動、電力、ダイ面積の配分)を如実に示している。AIチップの進化を理解するためには、ソフトウェアの抽象化の向こう側にある、この物理的な制約の階層構造を理解することが不可欠である。

要点

  • 乗算累積回路のゲート数はビット幅の二乗に比例する(P×Q個のフルアダー)。これが低精度演算がニューラルネットワークで効果的な根本理由であり、Nvidia B300以降でFP4がFP8の3倍高速なのはこの二次関係を部分的に反映した結果である。
  • レジスタファイルからALUへのデータ移動(MUX)のコストは、演算そのもののコストをはるかに上回る。8エントリのレジスタファイルでも、データ移動は演算の6倍のゲート数を消費する。
  • シストリックアレイは、重みを局所的に格納して再利用することで、計算量(二次)に対する通信量(一次)の比率を劇的に改善する。古いTPUでは128×128のシストリックアレイが採用された。
  • クロックサイクルは、フィードバックループを持つ回路(累積加算など)の遅延によって制約される。パイプラインレジスタの挿入はクロック速度を向上させるが、面積コストとのトレードオフがあり、過度な挿入はスループットを低下させる。
  • FPGAはASICより約10倍遅くエネルギー効率も悪いが、最初の1個を1万ドルで入手できる(ASICは3000万ドル)。LUT1つ(4入力)は32ゲートを消費するが、ASICで同じ機能を実現すれば3ゲートで済む。
  • CPUのレイテンシ非決定論性の主因はキャッシュシステムであり、TPUのスクラッチパッド方式ではソフトウェアが明示的にメモリ階層を制御することで決定論的レイテンシを実現する。
  • CPUコアがGPUコアよりはるかに大きい理由は、大規模なキャッシュと分岐予測器の存在にある。GPUはこれらを削減し、より多くのコアをダイ上に集積する。
  • GPUは多数の小さなTPU(SM)をタイル状に配置した構造であり、TPUはより粗粒度の大規模シストリックアレイを採用する。MatXの「分割可能シストリックアレイ」は両者の利点を融合しようとする試みである。
Reiner Pope – チップ設計をボトムアップで考える | Dwarkesh Podcast | motpod | motpod