tips:cuda:start
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| tips:cuda:start [2021/09/17 04:45] – yuuho | tips:cuda:start [2022/04/27 04:10] (現在) – yuuho | ||
|---|---|---|---|
| 行 16: | 行 16: | ||
| 画素の座標を知るには? | 画素の座標を知るには? | ||
| - | * '' | + | * '' |
| - | * '' | + | * '' |
| * として、''< | * として、''< | ||
| + | * 全体としては 6次元テンソルのように見える。 | ||
| 例) | 例) | ||
| ^ サイズ ^ 実際の値 ^ インデックス名 ^ インデックス ^ | ^ サイズ ^ 実際の値 ^ インデックス名 ^ インデックス ^ | ||
| - | | gridDim.x | + | | '' |
| - | | gridDim.y | + | | '' |
| - | | gridDim.z | + | | '' |
| - | | blockDim.x | + | | '' |
| - | | blockDim.y | + | | '' |
| - | | blockDim.z | + | | '' |
| グローバルな ID は次のように計算すれば良い。 | グローバルな ID は次のように計算すれば良い。 | ||
| <code c++>int id = (gridDim.y*blockDim.x)*blockIdx.x + (blockDim.x)*blockIdx.y + threadIdx.x; | <code c++>int id = (gridDim.y*blockDim.x)*blockIdx.x + (blockDim.x)*blockIdx.y + threadIdx.x; | ||
| // id = (131*256)*i + (256)*j + k ;</ | // 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:// | ||
| === 頻出データ構造/ | === 頻出データ構造/ | ||
| 行 43: | 行 60: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| + | |||
| + | |||
| + | === 同期の保証 === | ||
| + | * '' | ||
| + | * カーネルを連続して実行した場合、thread内では順序が保証されていそう。 | ||
| + | |||
| + | === 実行コンフィグレーション(execution configuration) === | ||
| + | * 参考 [[https:// | ||
| + | * '' | ||
| + | * '' | ||
| + | * グリッドとブロックの次数を定義。 | ||
| + | * 正式な文法 | ||
| + | * '' | ||
| + | * 省略された引数は 1 で初期化? | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * シェアードメモリのバイトサイズを指定するような状況とは、実行するまで必要なサイズがわからない場合。 | ||
| + | * カーネル呼び出し側で指定したサイズが作成される。 | ||
| + | * 動的な確保の場合はカーネル内で '' | ||
| + | |||
| + | === Warp とは === | ||
| + | スレッドを複数まとめたもの。実行の同期がとられる一単位。 | ||
| + | 同じ Warp 内にあるスレッドは while 文など実行すると、他のスレッドの while が止まるまで待たなければいけない。 | ||
| + | |||
tips/cuda/start.1631853957.txt.gz · 最終更新: 2021/09/17 04:45 by yuuho
