CUDAを勉強しようとして,まずつまずくのが,
ThreadやBlock, Gridなどのソフトウェア上の概念と,
Streaming Multiprocessor(SM),CUDA Core,Warp, Occupancyなどのハードウェアの概念がごっちゃになる点だ.
今回はじめて理解できた(気がする)ので,忘れないうちに書き残しておく.
ソフト的(と思われる)概念
- Thread
- デバイス上のプログラムが動くときの最小単位
- 非同期に動く
- Block
- Threadをまとめたもの
- 3次元表現
- Grid
- Blockをまとめたもの
ハード的(と思われる)概念
- SM
- 上のBlockはハードではSMにあたる
- 1つのSMで実行されるBlockは1つ
- 1つのSMに複数のBlockが同時に存在できる
- Registerは全Threadで分割
- Shared memoryはBlockで分割
実際に書いてみたが,これではCUDAの入門書の内容と同じで,
初学者には絶対に理解できない.
この動画にでてくるこの図がわかりやすかった
GPGPUと流体計算(@ponkotuy) @ 関東GPGPU勉強会 - YouTube