tips:cuda:start
文書の過去の版を表示しています。
CUDA
基本事項
- GPU 上で動く関数には
__global__または__device__が付いている。 __global__は C++ から直接呼び出す用の関数で__device__は__global__の関数内から呼び出される関数だと思う。cudaMallocで確保した GPUメモリにcudaMemcpyでCPU側からデータを移して- CUDAの関数を呼び出して実行されたら
cudaMemcpyでCPU側のメモリにデータを移す。 - CUDAの関数(カーネル)は関数名の後に
<<<grid, threads>>>というテンプレート的な表記のものが付くのでわかりやすい。
CUDAにおける配列
Grid の中には複数の Block があり、Block の中には複数の thread がある。
画素の座標を知るには?
dim3 gridShape(a, b, c);: 3次元テンソルdim3 blockShape(d, e, f);: 3次元テンソル- として、
<<<gridShape, blockShape>>>で呼び出すとよい。 - 全体としては 6次元テンソルのように見える。
例)
| サイズ | 実際の値 | インデックス名 | インデックス |
|---|---|---|---|
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 ;
頻出データ構造/関数
dim3cudaMalloccudaMemcpycudaMemcpyHostToDevicecudaMemcpyDeviceToHost
cudaFree
cudaGetDeviceCountcudaSetDevice
tips/cuda/start.1631854116.txt.gz · 最終更新: 2021/09/17 04:48 by yuuho
