【CUDA】SM,Warp,Occupancyなどの概念

CUDAを勉強しようとして,まずつまずくのが,
ThreadやBlock, Gridなどのソフトウェア上の概念と,
Streaming Multiprocessor(SM),CUDA Core,Warp, Occupancyなどのハードウェアの概念がごっちゃになる点だ.

今回はじめて理解できた(気がする)ので,忘れないうちに書き残しておく.

ソフト的(と思われる)概念
  • Thread
    • デバイス上のプログラムが動くときの最小単位
    • 非同期に動く
  • Block
    • Threadをまとめたもの
    • 3次元表現
  • Grid
    • Blockをまとめたもの
ハード的(と思われる)概念
  • CUDA Core
    • 実際にThreadが動く部分
    • CUDA Core以上にThreadを生成する利点は,GPUGPU側のDRAM間のメモリアクセスの遅延の隠蔽にある
  • SM
    • 上のBlockはハードではSMにあたる
    • 1つのSMで実行されるBlockは1つ
    • 1つのSMに複数のBlockが同時に存在できる
    • Registerは全Threadで分割
    • Shared memoryはBlockで分割
  • Warp
    • 上でSMごとと書いたが,より詳細には,このWarpのスレッドごとに動作する
  • Occupancy
    • 理論的に実行可能Warp数のうち,実際に動いているWarp数の割合
    • 高いほうがよい傾向


実際に書いてみたが,これではCUDAの入門書の内容と同じで,
初学者には絶対に理解できない.

この動画にでてくるこの図がわかりやすかった
GPGPUと流体計算(@ponkotuy) @ 関東GPGPU勉強会 - YouTube
f:id:yusuke_ujitoko:20160127210204p:plain