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

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

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


第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のスレッドは、
「高速に切り替わる実行文脈」
というより、
「大量に同時存在する計算単位」
として設計されています。

設計上の意味

このスレッド/ワープ構造は、

  • 制御を単純化する
  • 演算器を最大限に活用する
  • 電力効率を高める

という目的のために選ばれています。


次節では、
この大量のスレッドが
どのようなメモリ構造を使って
データにアクセスしているのかを解説します。


→ 第2-5節 GPUのメモリ構造