CUDA

基本事項

CUDAにおける配列

Grid の中には複数の Block があり、Block の中には複数の thread がある。
画素の座標を知るには?

例)

サイズ 実際の値 インデックス名 インデックス
gridDim.x 131 blockIdx.x i
gridDim.y 131 blockIdx.y j
gridDim.z 1 blockIdx.z
blockDim.x 256 threadIdx.x k
blockDim.y 1 threadIdx.y
blockDim.z 1 threadIdx.z

グローバルな ID は次のように計算すれば良い。

int id = (gridDim.y*blockDim.x)*blockIdx.x + (blockDim.x)*blockIdx.y + threadIdx.x;
// id = (131*256)*i + (256)*j + k ;

物理構造とデータモデル

単位 説明
GPC Graphics Processing Cluster, has N x SM
SM Streaming Multi-Processor, has N x CUDA Core
CUDA Core thread に対応(?)

一つの Block は一つの SM に割り当てられる。
同じ Block 内のスレッドでは共有メモリを共有できるらしい。
共有メモリはデバイスメモリよりも高速にアクセス可能。

例) 1080ti は 6[GPC/GPU], 5[SM/GPC], 128[CUDACo./SM]
ただし 30SM のうちの 2 つの SM が無効化されている。

頻出データ構造/関数

同期の保証

実行コンフィグレーション(execution configuration)

Warp とは

スレッドを複数まとめたもの。実行の同期がとられる一単位。 同じ Warp 内にあるスレッドは while 文など実行すると、他のスレッドの while が止まるまで待たなければいけない。