最終更新:2014-02-10 (月) 11:20:03 (3721d)  

CUDA/用語
Top / CUDA / 用語

ハードウェア

ホスト

デバイス

  • GPUのこと。

ストリーミングマルチプロセッサ (SM)

CUDAコア

  • 1つのスレッドを処理する単位。旧称SP

CUDA/メモリ

  • スレッド単位
  • ブロック単位
  • デバイス単位

のメモリがある

ソフトウェア

CUDA/カーネル

  • ホストから呼び出され、デバイス上で実行される関数。

グリッド

  • ホストから実行を指令する単位で、グリッド内の全スレッドは同じプログラム(カーネルと呼ぶ)を実行する。
    • X,Y,Zの3次元。
    • 0≦X,Y≦65,535、Zは1
  • GPUがグリッドを実行する際に、マルチプロセッサで並列処理を行うため、グリッドを複数の「ブロック」と呼ばれる単位に分割し、分割されたブロックをマルチプロセッサへ割り当てる。

CUDA/スレッドブロック (ブロック?)

  • 1つのストリーミングマルチプロセッサ(SM)上で実行するスレッドの塊。
  • 一般に、ブロック当たりのスレッド数はマルチプロセッサ当たりのストリーム・プロセッサ数よりも多いため、時分割でスレッドを割り当てる
  • 単純に並列動作させたいスレッドの総数を指定するのではなく、わざわざスレッドブロックに分割するのは次の理由から。
  • GPU内部は複数のマルチプロセッサ(SM)に分割されている。
  • 1つのマルチプロセッサ(SM)で同時に扱えるスレッド数には制限がある。(最大で512)
  • CUDAはスレッドブロックをマルチプロセッサ(SM)へ割り当てる単位にしている。

スレッド

  • 1つのCUDAコアで実行。
  • ブロック内のスレッドは32個単位で分割されワープ単位で実行されます。

CUDA/ワープ

  • 並列実行されるスレッドのグループ。
    • 1つのブロック内のスレッドは32個ずつの「ワープ」という単位にまとめられて処理される。
  • ワープ内の全スレッドは同一命令を実行
    • G80/GT200ではSMあたり8コアなので8スレッド並列 - 4サイクルでWarp1つ分の32スレッドの命令を発行
    • G80では、SM当たりのレジスタ数は8,192本。
      • 32レジスタを各スレッドに割り当てると、立ち上げることができるワープ数はたった8個 (8192/32 = 256スレッド、それを32で割る)
      • 16レジスタを各スレッドに割り当てると、立ち上げることができるワープ数は16個 (512スレッド)
  • Fermiでは2cycleで2warpを処理
    • SM1個に含まれる32個のCuda Coreは16個でひとつの塊となっており、 ふたつのスレッドの命令は、それぞれの塊へディスパッチされます。

参考