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 のコンテナ/仮想化と関わる。

関連: _moc-systems / parallel-computing