- 第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-3節 並列処理の基本(SIMD / SIMT)
GPUの高い性能は、
特殊な並列実行モデルによって支えられています。
本節では、GPUで用いられる
SIMD および SIMT という考え方を解説します。
並列処理とは何か
並列処理とは、
複数の計算を同時に実行することで
全体の処理時間を短縮する手法です。
CPUでも並列処理は行われますが、
GPUではその考え方がさらに徹底されています。
SIMD(Single Instruction, Multiple Data)
SIMDとは、
1つの命令を複数のデータに対して同時に適用する
方式です。
代表的な例として、次のような処理があります。
- 配列の各要素に同じ加算を行う
- 画像の各画素に同じ演算を適用する
CPUでもSIMD命令(SSE、AVXなど)が存在しますが、
GPUではこの仕組みが基本構造として採用されています。
SIMDの直感的イメージ
SIMDでは、
- 命令は1つ
- データは大量
という構成になります。
制御は単純ですが、
非常に高い演算密度を実現できます。
SIMT(Single Instruction, Multiple Threads)
GPUではSIMDをさらに拡張した
SIMT というモデルが採用されています。
SIMTでは、
各スレッドが独立した実行単位として見えますが、
内部では同一命令が同時に実行されています。
これにより、
- プログラマからはスレッド単位に見える
- ハードウェア的にはSIMDとして動作する
という特徴を持ちます。
なぜSIMTが必要なのか
純粋なSIMDでは、
条件分岐やスレッド管理が難しくなります。
SIMTは、
- プログラムはスレッド単位で記述できる
- 実行はSIMD的に高速
という両立を実現するための設計です。
分岐と性能低下
SIMTでは、
同時に実行されるスレッドが
異なる分岐に入ると性能が低下します。
この場合、
GPUは各分岐を順番に実行し、
不要な結果を無効化します。
そのため、
GPU向けプログラムでは
分岐をできるだけ揃える工夫が重要になります。
CPUとの並列処理の違い
- CPU:少数のコアで高度な制御を行う
- GPU:多数の演算器で単純な計算を行う
GPUの並列性は、
「制御を捨てて演算に特化する」
という割り切りの上に成り立っています。
次節では、
このSIMTモデルが
具体的にどのような単位で実行されるのか、
スレッドとワープの関係を解説します。