CUDA
NVIDIA GPU向けの並列計算プラットフォーム/プログラミングモデル。データ並列(parallel-computing の SIMD/SIMT)を大規模スレッドで実現する。
実行モデル
- 階層は Grid × Block × Thread(上限 65535 × 65535 × 512)。
threadIdx/blockIdx: ID、blockDim: ブロック内スレッド数、gridDim: グリッド内ブロック数。
- スレッドは Warp 単位(例: 32 threads/Warp)で制御される。SIMT 実行。
- カーネル関数は
.cuに書きnvccでコンパイル。__device__関数はデバイス側、cudaFreeでメモリ解放を忘れない。CUDA化すると可読性が落ちロックインしやすい。
性能上の論点
- Branch divergence: Warp内でスレッドの分岐先が分かれると、各経路を逐次実行し効率が落ちる。GPU向けコンパイラ最適化の主題。
- データ移動の最適化: Swizzle Inventor は GPU カーネルのデータ移動(swizzle)合成による最適化研究。
- メモリアクセスパターン(シーケンシャル/ストライド)が性能を左右する。
エコシステム
- CUDA.jl: Julia から GPGPU を行うパッケージ。
- WSL2上での利用は Cuda_in_WSL2(NVIDIA Driver + nvidia-docker2、
nvidia-smi -plで電力制限)で構築でき、virtualization-hypervisor のコンテナ/仮想化と関わる。