CUDA(Compute Unified Device Architecture)は、NVIDIAが開発したGPU並列コンピューティングプラットフォームおよびプログラミングモデルです。GPUの数千~数万コアを活用し、AI・科学計算・画像処理などを劇的に高速化します。
CUDAは「GPUを汎用計算機として使う」ためのソフトウェア層です。CPU(ホスト)とGPU(デバイス)が協調して動作します。
| 項目 | 説明 |
|---|---|
| 開発元 | NVIDIA |
| 初リリース | 2006年11月 |
| 最新バージョン(2025年12月) | CUDA Toolkit 12.6 |
| 対応言語 | C/C++、Fortran、Python(Numba, CuPy)、Juliaなど |
| 対応GPU | GeForce, RTX, Tesla, Jetson, Data Center(Ampere以降推奨) |
// 典型的なCUDAプログラムの流れ
1. CPUでデータ準備
2. cudaMalloc() でGPUメモリ確保
3. cudaMemcpy() でCPU→GPUへデータ転送
4. __global__ カーネル関数をGPUで起動 <<>>
5. GPUで並列計算実行
6. cudaMemcpy() で結果をGPU→CPUへ戻す
7. cudaFree() でGPUメモリ解放
#include <cuda_runtime.h>
#include <stdio.h>
__global__ void vectorAdd(const float *A, const float *B, float *C, int N) {
int i = blockDim.x * blockIdx.x + threadIdx.x;
if (i < N) C[i] = A[i] + B[i];
}
int main() {
int N = 1<<20; // 約100万要素
float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;
// ホスト(CPU)メモリ確保・初期化
h_A = (float*)malloc(N*sizeof(float));
// ... 初期化省略 ...
// デバイス(GPU)メモリ確保・データ転送
cudaMalloc(&d_A, N*sizeof(float));
cudaMemcpy(d_A, h_A, N*sizeof(float), cudaMemcpyHostToDevice);
// ... Bも同様 ...
// カーネル起動(1024スレッド×1024ブロック)
vectorAdd<<<(N+1023)/1024, 1024>>>(d_A, d_B, d_C, N);
// 結果取得
cudaMemcpy(h_C, d_C, N*sizeof(float), cudaMemcpyDeviceToHost);
cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);
return 0;
}
| 分野 | 代表例 | 高速化倍率(CPU比) |
|---|---|---|
| 深層学習 | TensorFlow, PyTorch, JAX | 10〜100倍 |
| 科学シミュレーション | 分子動力学、気象予報、CFD | 50〜500倍 |
| 画像・動画処理 | エンコード、超解像、Stable Diffusion | 20〜200倍 |
| 金融 | モンテカルロシミュレーション、オプション価格 | 100倍以上 |
| ゲノム解析 | DNAシーケンシング、AlphaFold | 30〜300倍 |
CUDAは2025年現在もAI・HPC分野で事実上の業界標準です。
「NVIDIAが勝つ=CUDAが勝つ」時代はまだまだ続きます!
@Grok