tips:cuda:start
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| tips:cuda:start [2021/09/16 12:53] – yuuho | tips:cuda:start [2022/04/27 04:10] (現在) – yuuho | ||
|---|---|---|---|
| 行 2: | 行 2: | ||
| - | 頻出データ構造/ | + | === 基本事項 === |
| + | |||
| + | * GPU 上で動く関数には '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * CUDAの関数を呼び出して実行されたら '' | ||
| + | * CUDAの関数(カーネル)は関数名の後に ''< | ||
| + | |||
| + | === CUDAにおける配列 === | ||
| + | |||
| + | Grid の中には複数の Block があり、Block の中には複数の thread がある。\\ | ||
| + | 画素の座標を知るには? | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * として、''< | ||
| + | * 全体としては 6次元テンソルのように見える。 | ||
| + | |||
| + | 例) | ||
| + | ^ サイズ ^ 実際の値 ^ インデックス名 ^ インデックス ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | グローバルな ID は次のように計算すれば良い。 | ||
| + | <code c++>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, | ||
| + | | CUDA Core | thread に対応(?) | ||
| + | |||
| + | 一つの Block は一つの SM に割り当てられる。\\ | ||
| + | 同じ Block 内のスレッドでは共有メモリを共有できるらしい。\\ | ||
| + | 共有メモリはデバイスメモリよりも高速にアクセス可能。 | ||
| + | |||
| + | 例) 1080ti は 6[GPC/GPU], 5[SM/GPC], 128[CUDACo./ | ||
| + | ただし 30SM のうちの 2 つの SM が無効化されている。 | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | === 頻出データ構造/ | ||
| * '' | * '' | ||
| * '' | * '' | ||
| 行 12: | 行 60: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| + | |||
| + | |||
| + | === 同期の保証 === | ||
| + | * '' | ||
| + | * カーネルを連続して実行した場合、thread内では順序が保証されていそう。 | ||
| + | |||
| + | === 実行コンフィグレーション(execution configuration) === | ||
| + | * 参考 [[https:// | ||
| + | * '' | ||
| + | * '' | ||
| + | * グリッドとブロックの次数を定義。 | ||
| + | * 正式な文法 | ||
| + | * '' | ||
| + | * 省略された引数は 1 で初期化? | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * シェアードメモリのバイトサイズを指定するような状況とは、実行するまで必要なサイズがわからない場合。 | ||
| + | * カーネル呼び出し側で指定したサイズが作成される。 | ||
| + | * 動的な確保の場合はカーネル内で '' | ||
| + | |||
| + | === Warp とは === | ||
| + | スレッドを複数まとめたもの。実行の同期がとられる一単位。 | ||
| + | 同じ Warp 内にあるスレッドは while 文など実行すると、他のスレッドの while が止まるまで待たなければいけない。 | ||
| + | |||
tips/cuda/start.1631796811.txt.gz · 最終更新: 2021/09/16 12:53 by yuuho
