- 第2章 GPUと専用計算機の仕組み
章トップ(目次)
2-1 GPUとは何か
2-2 並列計算モデル(SIMD / SIMT)
2-3 GPUのメモリ階層と帯域
2-4 スレッド管理とスケジューリング
2-5 GPUが得意な処理・不得意な処理
2-6 GRAPE計算機の誕生
2-7 GRAPE-1の構造と思想
2-8 GRAPE-DRとASIC化
2-9 CPUとGPUの違い
2-10 専用計算機の思想とFPGAへの継承
▶ 第3章 FPGAの仕組みへ
第2章 GPUの仕組み
第2-4節 スレッドとワープ(実行モデル)
GPUの並列処理は、
単に「スレッドがたくさんある」というだけではありません。
GPUでは、スレッドを特定の単位にまとめて実行することで、
高い性能を実現しています。
GPUにおけるスレッドとは
GPUプログラムでは、
処理はスレッド単位で記述されます。
各スレッドは、
- 独立したプログラムカウンタを持つ
- 独立したレジスタを持つ
- 異なるデータを処理できる
ように見えます。
この点はCPUのスレッドと似ています。
ワープ(Warp)という実行単位
しかし、GPU内部では、
スレッドはワープと呼ばれる固定数のグループで
まとめて実行されます。
一般的なGPUでは、
- 1ワープ = 32スレッド
という構成になっています。
このワープが、
GPUにおける最小の実行単位です。
ワープ単位での命令実行
同じワープに属するスレッドは、
同一命令を同時に実行します。
各スレッドは異なるデータを扱いますが、
- 命令フェッチ
- デコード
- 実行
はワープ単位で行われます。
この仕組みにより、
命令制御を簡素化しつつ、
高い演算密度を実現できます。
分岐が起きた場合の動作
同じワープ内のスレッドが
異なる分岐に入ると、
GPUは次のように動作します。
- 分岐Aの命令を実行(該当スレッドのみ有効)
- 分岐Bの命令を実行(該当スレッドのみ有効)
結果として、
実行は直列化され、
性能が低下します。
これを
ワープ分岐(Warp Divergence)
と呼びます。
スレッド数と性能の関係
GPUでは、
スレッド数が多いほど性能が出るとは限りません。
重要なのは、
- ワープを十分に埋めること
- 分岐を揃えること
- メモリアクセスを規則的にすること
です。
CPUスレッドとの本質的な違い
- CPUスレッド:重く、数が少ない
- GPUスレッド:軽く、数が非常に多い
GPUのスレッドは、
「高速に切り替わる実行文脈」
というより、
「大量に同時存在する計算単位」
として設計されています。
設計上の意味
このスレッド/ワープ構造は、
- 制御を単純化する
- 演算器を最大限に活用する
- 電力効率を高める
という目的のために選ばれています。
次節では、
この大量のスレッドが
どのようなメモリ構造を使って
データにアクセスしているのかを解説します。