GPU

GPU

執筆済 コンピュータアーキテクチャGPU

同じ演算を大量のデータに並列適用することに特化したプロセッサ。

CPU との違い#

CPU GPU
コア数 8〜64 数千〜数万
1 コアの性能 高い 低い
キャッシュ 大きい 小さい
制御回路 複雑(分岐予測、OoO) 単純
得意 分岐の多い逐次処理 同じ処理の大量並列

CPU はトランジスタの大半を「1 つの命令列を速く流す」ために使う。 GPU は演算器そのものに使う。

SIMT#

多数のスレッドをまとめ(NVIDIA では 32 スレッドの warp)、 同じ命令を同時に実行する。

if (x > 0) { A } else { B }

warp 内でスレッドごとに条件が分かれると、 A を実行してから B を実行し、 それぞれ該当しないスレッドを無効化する。

分岐すると両方の経路を実行するので遅くなる(ダイバージェンス)。 GPU 向けのコードで分岐を避けるのはこのため。

レイテンシ隠蔽#

GPU はキャッシュが小さく、メモリレイテンシを隠せない。 代わりに待っているスレッドを別のスレッドに切り替える

十分な数のスレッドがあれば、 常にどれかが実行可能な状態になり、演算器が遊ばない。 大量の並列性があることが前提の設計。

深層学習との相性#

順伝播逆伝播も 本質は大きな行列積

  • 分岐がほとんど無い
  • 同じ演算を大量のデータに適用する
  • 並列度が十分にある

GPU の前提と完全に一致している。 これが深層学習の実用化に GPU が不可欠だった理由。

近年は行列積専用の演算ユニット(Tensor Core)や 低精度演算(FP16、BF16、FP8)で、さらに特化が進んでいる。

参考文献#

ノート一覧を閉じる