今日勉強したことを
つらつらと
logo

GPUとTPUの違いを解説

2026/02/25 19:02
GPUとTPUの構造的な違いを、命令セット、計算方式、メモリアーキテクチャの観点から解説します。

GPUとTPUの違いを解説

大規模言語モデルを学習させるとき、GPUとTPUのどちらを選ぶかで、学習時間が数倍違うことがあります。その秘密は、両者のアーキテクチャの根本的な違いにあります。

GPU(Graphics Processing Unit)とTPU(Tensor Processing Unit)は、どちらも高速な並列計算が可能なプロセッサですが、設計思想や最適化の対象が大きく異なります。この記事では、演算ユニット、計算方式、メモリアーキテクチャの観点から、両者の技術的な違いを詳しく解説します。

注記: 本記事ではGPUの例としてNVIDIA A100を、TPUの例としてGoogle Cloud TPU v3を中心に説明しています。新しいバージョン(TPU v4/v5など)ではアーキテクチャの詳細が異なる場合があります。

命令セットの違い:ALUとMXUの役割

プロセッサの中核となる演算ユニットは、どの計算に最適化されているかで大きく異なります。

用語解説

  • ALU(算術論理演算器):足し算、掛け算、論理演算など、様々な種類の計算ができる汎用の演算ユニット
  • MXU(行列乗算ユニット):行列×行列の計算に特化した専用の演算ユニット

GPU:ALU(算術論理演算器)

GPUは従来のCPUと同じくALU(Arithmetic Logic Unit)を中心に設計されています。ALUは汎用的な演算を実行でき、加算、減算、乗算、除算、論理演算など多様な計算に対応できます。

AIにおける役割: 前処理データの加工、活性化関数(ReLU、sigmoid)、正規化、その他の補助的な計算を効率的に処理します。ニューラルネットワーク全体を支える「汎用の計算エンジン」として機能します。

TPU:MXU(行列乗算ユニット)

一方、TPUはGoogle Tensorflowの推論・学習を最適化するために設計されており、MXU(Matrix Multiply Unit)を中心としています。MXUは行列乗算に特化した演算ユニットであり、ディープラーニングの中核となるテンソル計算に最適化されています。

AIにおける役割: ニューラルネットワークの全体の計算量の大部分を占める行列乗算を、極限まで高速化します。大規模言語モデルでは計算の90%以上が行列乗算であり、MXUはこの重い処理を効率的に処理するために存在します。

特性 ALU(GPU) MXU(TPU)
汎用性 高い(全演算対応) 低い(行列乗算特化)
計算速度 中程度 非常に高速
AI向けタスク 補助的な計算全般 行列乗算(計算の大部分)
電力効率 中程度 非常に効率的

計算方式の違い:SIMTとシストリックアレイ

GPU:SIMT(Single Instruction Multiple Thread)

GPUが採用するSIMT方式は、同一の命令を複数のスレッドが異なるデータに対して同期的に実行します。NVIDIA A100 GPUの場合、108個のストリーミングマルチプロセッサ(SM)があり、各SMで最大2,048スレッド(ソフトウェアスレッド)が実行可能です。実際には、32スレッドのワープ単位でロック・ステップ実行されます。

具体的な動作例: 画像分類ネットワークの全結合層(1024入力×1000出力)を処理する際、1000個の出力値を異なるスレッドで並行計算します。各スレッドは同じ「内積計算」命令を実行しますが、異なる重みベクトルと入力データに対して作用します。

GPU SIMT の実行例(全結合層)

入力(1024)  ×  重み(1024×1000)  =  出力(1000)

┌────────┐      ┌──────┐         ┌────────┐
│入力    │      │w[0]  │         │出力1   │
│ベクトル│  ×   │w[1]  │   =     │出力2   │
│        │      │...   │         │出力3   │
└────────┘      │w[999]│         │...     │
                └──────┘         │出力1000│
                                 └────────┘

特徴:各スレッドが異なる出力を並行計算
     全スレッドが同じ「内積」命令を実行

AIにおける役割: ニューラルネットワークの多様な層を処理します。畳み込み層では異なる位置のカーネル適用、全結合層では異なる出力ユニットの計算、正規化や活性化関数の適用など、異なる計算パターンの層をすべて効率的に実行できます。

メモリアクセス特性: 各スレッドが独立したレジスタを保持し、シェアドメモリやグローバルメモリにアクセスします。スレッド数が多いため、一部スレッドのメモリ遅延を他のスレッドの実行で隠蔽できます。

TPU:シストリックアレイ

TPUはシストリックアレイアーキテクチャを採用しています。Google TPU v3の場合、128×128の格子状にALU(乗算・加算ユニット)を配置した2つのシストリックアレイで構成されます。

具体的な動作例: 行列乗算 A(128×128)×B(128×128)を計算する場合:

TPU シストリックアレイ (128×128)

データは上と左から流入 → 計算結果は下と右に流出

   B の列 →
  ↓  ↓  ↓  ↓
  ┌──┬──┬──┬──┐
A ↓ │①②③④│  ①=積和①, ②=積和②, ...
の │⑤⑥⑦⑧│  格子状に配置された
行 ├──┼──┼──┼──┤  乗算・加算ユニット
  │⑨⑩⑪⑫│  (各セルがALU)
  ├──┼──┼──┼──┤
  │⑬⑭⑮⑯│
  └──┴──┴──┴──┘
   ↓  ↓  ↓  ↓
  (出力)

128クロックで128×128行列乗算が完成します
(メモリアクセス不要)

このプロセス中、メモリアクセスは発生しません。データがALU間を「流れ」ながら計算が進行します。

🔑 TPUの最大の特徴:メモリアクセスなしで計算完結

行列乗算中にメモリアクセスが一切発生しません。 データがALU間を波状に伝播しながら計算が進むため、 メモリバンド幅がボトルネックにならず、 GPUの10倍以上のスループットを実現します。

AIにおける役割: ニューラルネットワークの学習と推論を支配する行列乗算に特化しています。大規模言語モデルでは計算の90%以上が行列乗算(テンソル積)であり、TPUのシストリックアレイはこの重い処理を他のハードウェアより数桁高速に処理します。

特性 SIMT(GPU) シストリックアレイ(TPU)
ユニット配置 ストリーミングマルチプロセッサ(階層的) 128×128格子状(平面的)
実行方式 各スレッド独立(メモリアクセス多い) 計算結果が隣接ユニット間を伝播
柔軟性 高い(多様なアルゴリズム対応) 低い(規則的タスク向け)
メモリ遅延対策 多数スレッド+キャッシュ データフロー(遅延なし)
電力効率 中程度(多くのメモリアクセス) 極めて高い(メモリアクセス最小)
行列乗算性能 中程度(Tflops) 最高峰(Pflops級)

メモリ階層の違い

GPU:複雑なメモリ階層

GPUはメモリ階層が複雑で、複数のレベルで構成されています(Google Cloud公式ドキュメント参照):

  • グローバルメモリ:全スレッドから参照可能。容量は16GB~80GB。メモリアクセス時のレイテンシが大きい。
  • シェアドメモリ:スレッドブロック内で共有。容量はスレッドブロック当たり96KB。グローバルメモリより高速。
  • レジスタ:各スレッドが数百バイト~数KBを独立に持つ。最高速だが容量が限定的。スレッドブロック単位では最大256KBのレジスタリソースを共有します。

GPUには2,500~5,000個のALUが搭載されており、各々が独立したデータにアクセスするため、メモリアクセスパターンは不規則になりやすく、キャッシュミスが発生します。プログラマはシェアドメモリを効果的に使い、メモリアクセスを最適化する必要があります。

アーキテクチャ特性: von Neumann アーキテクチャを採用。計算のたびにメモリからデータを読み込む必要があり、メモリアクセスがボトルネックになることがあります。ただし、多くの異なるアルゴリズムに柔軟に対応できます。

TPU:シストリックアレイに最適化されたメモリ

TPUはシストリックアレイアーキテクチャに特化して設計されています(Google Cloud公式ドキュメント参照):

  • High Bandwidth Memory(HBM):大容量のメインメモリ。パラメータと入力データを保持。
  • Matrix Multiplication Unit(MXU):128×128のALUを格子状に配置(TPU v3の場合)。2つのシストリックアレイで構成され、合計2×(128×128)=32,768個のALUがあります。
  • データフロー:パラメータをHBMからMXUに読み込み、その後メモリアクセス不要で計算が進行。

TPUの最大の特徴は、行列乗算中にメモリアクセスが発生しないことです。データがMXU内を流れている間、追加のメモリアクセスなしに積和演算が繰り返されます。

アーキテクチャ特性: シストリックアレイでは、128×128個のALUが格子状に接続され、計算結果が隣接ユニットに自動的に送信されます。この「流れ」により、メモリバンド幅を限界まで活用でき、GPUの10倍以上のスループットを実現します。

特性 GPU(複雑なメモリ階層) TPU(シストリック最適化)
演算ユニット数 2,500~5,000 ALU 32,768 ALU(2×128×128)
メモリアクセス 計算のたびに必要 行列乗算中は不要
レイテンシ隠蔽 キャッシュと多数スレッド データフローによる自動最適化
アーキテクチャ von Neumann(汎用) シストリックアレイ(特化)
最適用途 多様なアルゴリズム 行列乗算中心のタスク

エコシステムの違い

GPU:CUDAエコシステム

CUDAはNVIDIAが提供するプログラミングプラットフォームで、GPUプログラミングの事実上の標準です。多くの深層学習フレームワーク(PyTorch、TensorFlowなど)がCUDAをサポートしており、エコシステムが非常に充実しています。

TPU:Google Cloudエコシステム

TPUはGoogle Cloudプラットフォーム(GCP)上で利用でき、TensorFlowとの統合が深いです。Google Colabで無料版TPUを利用することもできますが、GPUほどエコシステムは広範ではありません。

用途の使い分け

  • GPU:汎用の並列計算、グラフィックス処理、多様な機械学習タスク、推論と学習の両方
  • TPU:大規模な深層学習の学習と推論、行列計算が中心のタスク、特にGoogle CloudやTensorFlowベースのプロジェクト

参考資料

この記事はGitHubのIssue(issue #6)を元に作成しました。


© 2026 simodake