yuuho.wiki

カオスの欠片を集めて知恵の泉を作る

ユーザ用ツール

サイト用ツール


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 ;

頻出データ構造/関数

  • dim3
  • cudaMalloc
  • cudaMemcpy
    • cudaMemcpyHostToDevice
    • cudaMemcpyDeviceToHost
  • cudaFree
  • cudaGetDeviceCount
  • cudaSetDevice
tips/cuda/start.1631854116.txt.gz · 最終更新: 2021/09/17 04:48 by yuuho