CPU・GPU・NPUの違い:設計思想・演算器・データ型・電力効率を比較
CPUは何でも実行できる汎用のプロセッサで、少数の複雑なコアで1つの処理を速く終わらせます。GPUは多数の演算器で大量のデータを並列に処理し、グラフィックスやAIの学習など幅広い並列計算に使われます。NPUは、ニューラルネットワークの計算の大部分を占める行列の積和演算に特化した専用回路で、INT8などの低い精度の演算器を多数並べ、データをチップ内のメモリで使い回すことで、推論を非常に高い電力効率で行います。そのかわり、対応している演算以外は苦手です。
| 項目 | CPU | GPU | NPU |
|---|---|---|---|
| 設計思想 | 汎用・低遅延。1つの処理をできるだけ速く終わらせる | 高スループット。大量の並列な計算をまとめてこなす | ニューラルネットワークの演算(主に推論)に特化し、電力あたりの性能を高める |
| 演算器の構成 | 複雑なコアが数個〜数百個。各コアにSIMDの演算器 | 単純な演算器が数千個。行列演算ユニットを持つものも多い | 積和演算器の大きな配列(シストリックアレイなど)と、活性化関数などのためのベクトル演算器 |
| 制御のしかた | 命令ごとに分岐予測や投機実行(アウトオブオーダー)を行う | 多数のスレッドを切り替えてメモリの待ち時間を隠す | 多くは、コンパイラが事前に決めたデータの流れに沿って動き、命令ごとの制御は少ない |
| 得意な処理 | 分岐の多い処理、OS、アプリケーションのロジック | グラフィックス、AIの学習と推論、科学技術計算 | 畳み込みや行列の積を中心とするAIの推論 |
| メモリ | 大きなキャッシュとDDRなどのメインメモリ | GDDRやHBMなどの高い帯域のメモリ | チップ内のSRAMのバッファで重みや中間データを使い回す。SoC内蔵ではCPUとメインメモリを共有 |
| 主なデータ型 | FP64・FP32と整数を中心に、ほぼ何でも | FP32・FP16・BF16が中心。学習向けにFP8なども | INT8・INT4やFP16などの低い精度が中心 |
| 性能の表し方 | クロック周波数、コア数、IPC | FLOPS(TFLOPSなど) | TOPS(多くはINT8で数えた理論上の最大値) |
| AIの推論での電力効率 | 低い | 高い | 最も高い。CPUより1桁以上高いことがある |
| 柔軟性 | 最も高い。どんなプログラムも動く | 高い。並列化できる処理なら幅広く使える | 低い。対応していない演算はCPUやGPUに戻して実行する |
| プログラミング | 一般のプログラミング言語とコンパイラ | GPU向けの並列プログラミングモデルでカーネルを書く | 学習済みのモデルを、AIコンパイラや推論ランタイムで変換して実行する。直接プログラムすることは少ない |
| 置かれる場所 | あらゆるコンピュータ | 単体のカード、またはSoCに内蔵 | スマートフォンやパソコンのSoCに内蔵されることが多い。データセンター向けの専用チップもある |
数値は代表的な目安で、世代や製品によって異なります。