🙌

CUDAの仕組み

に公開

CUDAのアーキテクチャ

CUDAはNVIDIAのGPUを汎用計算に活用するためのアーキテクチャ。
もともとグラフィックス用だったGPUを「大量の並列計算装置」として使えるようにしたもの。


1. ホスト(CPU)とデバイス(GPU)の役割分担

  • (ホスト)CPUがプログラムを管理し、(デバイス)GPUに重い計算処理を依頼
  • CUDAプログラムは、CPUからGPUに「カーネル関数(計算内容)」を投げることで実行される

2. スレッド階層:スレッド → ブロック → グリッド

  • スレッド:最小の計算単位(1つのデータを処理)
  • ブロック:複数スレッドの集合。スレッド間で共有メモリを使用できる
  • グリッド:複数ブロックの集合。GPU全体で動作

→ 配列演算や画像処理など、同じ処理を多数のデータに一斉適用するのが得意


3. メモリ構造(階層と特性)

種類 アクセス範囲 特徴
レジスタ スレッド内 最速・最小
共有メモリ 同一ブロック内 高速、スレッド間通信に適す
グローバルメモリ 全スレッドから可 大容量だが遅い
定数/テクスチャ 読み取り専用 最適化された用途向け
  • 高速処理には共有メモリとレジスタを活用
  • グローバルメモリへのアクセス回数やパターンにも注意(coalescing)

4. 実行の流れ

  1. CPUでデータを準備・転送(cudaMemcpy
  2. GPUでカーネル関数を大量スレッドで並列実行(<<<grid, block>>>
  3. 必要に応じて結果をCPUに戻す

5. なぜこの構造?

  • GPUはもともと「同じ処理を大量のピクセルに適用」する構造
  • その特性を一般計算に活かしたのがCUDA
    同じ処理を大量のデータに一括適用する処理に非常に強い

6. CUDAが得意な処理

  • ベクトル・行列演算(数値線形代数)
  • シミュレーション(流体・粒子)
  • ディープラーニング(Tensor計算)
  • 画像・映像・音声処理

まとめ

CUDAは、

  • CPUが全体を管理し、GPUが並列演算を実行
  • スレッド → ブロック → グリッドの階層で大規模並列を実現
  • メモリ構造を理解して最適化することが性能のカギ

大量データ・同一処理に強い構造が最大の特徴。

参考文献

Discussion