宇宙誕生の少し前から宇宙終焉の少し先までを数で表す論文

この宇宙を数で表すことは出来るのか。

第2-3節 並列処理の基本(SIMD / SIMT)


第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モデルが
具体的にどのような単位で実行されるのか、
スレッドとワープの関係を解説します。


→ 第2-4節 スレッドとワープ(実行モデル)