🙌
CUDAの仕組み
CUDAのアーキテクチャ
CUDAはNVIDIAのGPUを汎用計算に活用するためのアーキテクチャ。
もともとグラフィックス用だったGPUを「大量の並列計算装置」として使えるようにしたもの。
1. ホスト(CPU)とデバイス(GPU)の役割分担
- (ホスト)CPUがプログラムを管理し、(デバイス)GPUに重い計算処理を依頼
- CUDAプログラムは、CPUからGPUに「カーネル関数(計算内容)」を投げることで実行される
2. スレッド階層:スレッド → ブロック → グリッド
- スレッド:最小の計算単位(1つのデータを処理)
- ブロック:複数スレッドの集合。スレッド間で共有メモリを使用できる
- グリッド:複数ブロックの集合。GPU全体で動作
→ 配列演算や画像処理など、同じ処理を多数のデータに一斉適用するのが得意
3. メモリ構造(階層と特性)
種類 | アクセス範囲 | 特徴 |
---|---|---|
レジスタ | スレッド内 | 最速・最小 |
共有メモリ | 同一ブロック内 | 高速、スレッド間通信に適す |
グローバルメモリ | 全スレッドから可 | 大容量だが遅い |
定数/テクスチャ | 読み取り専用 | 最適化された用途向け |
- 高速処理には共有メモリとレジスタを活用
- グローバルメモリへのアクセス回数やパターンにも注意(coalescing)
4. 実行の流れ
- CPUでデータを準備・転送(
cudaMemcpy
) - GPUでカーネル関数を大量スレッドで並列実行(
<<<grid, block>>>
) - 必要に応じて結果をCPUに戻す
5. なぜこの構造?
- GPUはもともと「同じ処理を大量のピクセルに適用」する構造
- その特性を一般計算に活かしたのがCUDA
→ 同じ処理を大量のデータに一括適用する処理に非常に強い
6. CUDAが得意な処理
- ベクトル・行列演算(数値線形代数)
- シミュレーション(流体・粒子)
- ディープラーニング(Tensor計算)
- 画像・映像・音声処理
まとめ
CUDAは、
- CPUが全体を管理し、GPUが並列演算を実行
- スレッド → ブロック → グリッドの階層で大規模並列を実現
- メモリ構造を理解して最適化することが性能のカギ
大量データ・同一処理に強い構造が最大の特徴。
参考文献
- 東京大学情報基盤センター
「これからの並列計算のためのGPGPU連載講座(II)+GPGPUプログラミング環境CUDA+入門編」
https://www.cc.u-tokyo.ac.jp/public/VOL12/No2/201003gpgpu.pdf
Discussion