17 人が閲覧(直近 30 日) AI

CUDAとは?読み方と仕組み・CUDA 12と13の違い・始め方【13.4対応】

CUDAとは?読み方と仕組み・CUDA 12と13の違い・始め方【13.4対応】

CUDA(読み方は「クーダ」、Compute Unified Device Architecture)は、NVIDIAのGPUで汎用の計算を行うためのプラットフォームです。生成AIの学習と推論、科学技術計算、画像処理など、同じ計算を大量のデータへ繰り返す処理をGPUの数千個の演算器に割り振って速くします。この記事では、仕組みとCUDAコア・Tensorコアの違いを整理したうえで、2026年10月時点の最新版CUDA 13.4、12系と13系の違い(nvcc 12.9と13.4の出力の比較)、PyTorchで使うときに何を入れればよいか、単体で動くコード例までを扱います。

まとめ:CUDAの要点

  • CUDAはNVIDIA専用のGPU計算プラットフォーム。読み方は「クーダ」。開発キットのCUDA Toolkitは無償で、C/C++を拡張した書き方でGPU上の関数(カーネル)を書く。
  • 最新はCUDA Toolkit 13.4.3(2026年10月)。13系はドライバR580以上が必要。13.0でMaxwell・Pascal・Volta(Compute Capability 7.5未満)向けのコンパイルが削除されたため、GTX 10シリーズやV100では12系を使う。12系も12.9.2(2026年5月)まで更新が続いている。
  • PyTorchを使うだけならCUDA Toolkitは要らない。Linuxでpipから入れるPyTorchはCUDAのランタイムとcuDNNを依存パッケージとして取り込み、WindowsでもPyTorch公式の配布先(–index-url)からCUDA版を入れれば、必要なのはNVIDIAのドライバだけ。nvccでカーネルを自作するときにToolkitを入れる。
  • AIを速くしているのは主にTensorコア。CUDAコアは汎用の並列演算、Tensorコアは行列の積和、RTコアはレイトレーシング専用。
  • AMDやIntelのGPUではCUDAは動かない。AMDはROCm/HIP、ベンダーをまたぐならVulkanやOpenCLを使う。

CUDAとは:読み方と得意な処理

CUDAは「クーダ」と読みます。NVIDIAが2006年11月に初の対応GPUであるGeForce 8シリーズとともに発表し、2007年2月に開発キット(SDK)のベータ版、同年7月にCUDA 1.0を公開しました。それまで描画専用だったGPUを、C言語に近い書き方で一般の計算に使えるようにしたのが始まりです。以降のNVIDIA製GPUはすべてCUDAに対応しています。

CUDAが効くのは「同じ演算を大量のデータに一斉に当てる」処理です。代表例は次のとおりです。

  • AIモデルの学習と推論(行列の積が計算の大半を占める)
  • 気象、流体、分子動力学などの科学シミュレーション
  • 医用画像の再構成、動画のエンコード、画像処理
  • 金融のリスク計算やデータ分析(SQLやデータフレーム処理のGPU化)

逆に、分岐が多く順番に処理するしかない仕事(Webアプリの業務ロジック、データベースのトランザクション処理など)はCPUのほうが向いています。AI・機械学習・深層学習の関係から整理したい場合はAI・ML・DLの違いとは?機械学習と深層学習の関係を原典の定義と具体例で解説が参考になります。

CUDAの仕組み:スレッド・ブロック・グリッドとSM

CUDAでは、計算を細かい単位に分けてGPUの多数の演算器へ配ります。押さえるのは「実行の階層」と「メモリの階層」の2つです。

スレッド・ブロック・グリッドの階層

計算の最小単位がスレッドで、たとえば配列の1要素の計算を1スレッドが受け持ちます。スレッドを束ねたものがブロック(1ブロックは最大1,024スレッド)、ブロックを束ねたものがグリッドです。カーネルを呼ぶときに「ブロック数」と「1ブロックあたりのスレッド数」を指定し、各スレッドは blockIdx.x * blockDim.x + threadIdx.x のように自分の番号を計算して担当するデータを決めます。

SM(Streaming Multiprocessor)とWarp

GPUの中では、演算器をまとめたSM(Streaming Multiprocessor)がブロックを受け取って実行します。SMはスレッドを32本ずつのWarp(ワープ)にまとめ、Warp内の32スレッドは同じ命令を同時に実行します。そのため、1ブロックのスレッド数は32の倍数(128や256がよく使われる)にします。Warpの中でif文の分岐が割れると、片方の経路のスレッドが待たされて遅くなります(分岐発散)。nvccの -arch=sm_86 の「sm」もこのSMを指し、GPUの性能表に並ぶ「SM数」はこの単位の数です。

メモリ階層:グローバル・シェアード・レジスタ

GPUのメモリは、速さと共有できる範囲で使い分けます。全スレッドから見える大容量のグローバルメモリ(GPUのVRAM)は遅く、同じブロック内のスレッドで共有するシェアードメモリは速く、各スレッド専用のレジスタが最も速い、という順です。何度も読むデータをシェアードメモリに置いてグローバルメモリへのアクセスを減らすのが、自作カーネルで最初に効く最適化です。ブロックあたりに使えるシェアードメモリの上限はGPUごとに違い、cudaGetDeviceProperties の sharedMemPerBlock で確かめられます。

CUDAコア・Tensorコア・RTコアの違い

NVIDIAのGPUには役割の違う3種類の演算器が載っています。製品の仕様表で「CUDAコア数」が大きく書かれますが、AIの速さを決めるのは主にTensorコアです。

演算器 役割 得意な演算 搭載開始
CUDAコア 汎用の並列演算 FP32などのスカラー演算 2006年(GeForce 8)
Tensorコア 行列演算の専用回路 FP16・BF16・FP8などの行列積和 2017年(Volta)
RTコア レイトレーシング専用 光線と物体の交差判定 2018年(Turing)

CUDAコアは1クロックに1つの積和を行う汎用の演算器で、数が多いほど並列性能が上がります。Tensorコアは小さな行列の積和をまとめて1命令で処理する回路で、ディープラーニングの計算はほぼ行列積なので、AI用途ではCUDAコアよりはるかに速く計算します。PyTorchで半精度(FP16・BF16)やFP8(8ビット浮動小数点)を使うと速くなるのは、主にTensorコアが使われるからです。FP8の詳細はFP8とは?FP16・BF16・FP4との違いとE4M3/E5M2の仕組み、対応GPU【2026年版】で扱っています。RTコアはゲームやCG制作の描画用で、AIの計算には使いません。

GPUを選ぶときは、CUDAコア数よりも、Tensorコアの世代(対応する数値形式)とVRAM容量を見ます。LLMを動かすならVRAMに載るかどうかが先に効きます。

CUDAのバージョンとCompute Capability対応表【13.4】

CUDAのバージョンには「CUDA Toolkitの版」と「GPUの世代(Compute Capability)」という2つの軸があり、両方が噛み合わないと動きません。NVIDIAのCUDA Toolkit Archiveでは、2026年10月22日時点の最新はCUDA Toolkit 13.4.3(2026年10月)です。13.4.0は2026年7月公開のDeveloper Previewで、9月の13.4.1以降は通常のリリースとして並んでいます。

Compute Capability(CC)は、GPUが対応する機能レベルを示す番号で、nvccの -arch=sm_86 のような指定はこの番号に対応します。NVIDIAのCompute Capability一覧から主なGPUを抜き出すと次のとおりです。

CC アーキテクチャ 代表的なGPU CUDA 13
5.x/6.x/7.0/7.2 Maxwell/Pascal/Volta GTX 900・10シリーズ、V100、Jetson Xavier 非対応(12系まで)
7.5 Turing RTX 20シリーズ、GTX 16シリーズ、T4 対応(下限)
8.0/8.6 Ampere A100、RTX 30シリーズ 対応
8.9 Ada Lovelace RTX 40シリーズ、L4、L40S 対応
9.0 Hopper H100、H200、GH200 対応
10.0/10.3 Blackwell(データセンター) B200・GB200/B300・GB300 対応
11.0 Blackwell(Jetson) Jetson T5000、T4000 対応
12.0 Blackwell(RTX) RTX 50シリーズ、RTX PRO 6000 Blackwell 対応
12.1 Blackwell(GB10) DGX Spark、RTX Spark 対応

同じBlackwellでも、データセンター向け(10.x)とRTX 50シリーズ(12.0)では番号が違い、互いのバイナリは使い回せません。RTX 5090は sm_100 向けの機械語(cubin)を読み込めず、-arch=sm_100 で一緒に埋め込まれるPTX(中間コード)を実行時にJITコンパイルして動くことになるため、初回の起動が遅くなります。ビルド時の指定は一覧で確認します。DGX SparkについてはDGX Sparkとは?64GB版と値上げ後の価格・GX10などGB10互換機の違い【2026年10月】で詳しく扱っています。

CUDA 12と13の違い:対応GPU・ドライバ・既定のビルド対象

「CUDA 12と13のどちらを入れるか」は、手元のGPUの世代とドライバで決まります。違いは次の3点です。nvccの出力は、2026年10月22日にGPUの無いx86_64のLinux(Docker)上でnvcc 13.4.92とnvcc 12.9を実行して確かめたものです。

対応するGPU世代:13はCC 7.5以上

CUDA 13.0のリリースノートには「Offline compilation and library support for these architectures have been removed in CUDA Toolkit 13.0 major version release.」とあり、対象はMaxwell・Pascal・Voltaです。nvccが対象にできる世代を表示させると、差がはっきり出ます。

$ nvcc --list-gpu-arch    # nvcc 13.4.92
compute_75 compute_80 compute_86 compute_87 compute_88 compute_89 compute_90 compute_100 compute_110 compute_103 compute_120 compute_121 compute_107

$ nvcc -arch=sm_70 -c vadd.cu
nvcc fatal   : Unsupported gpu architecture 'sm_70'

12.9で同じことをすると、一覧に compute_50 から compute_72 までが残っており、-arch=sm_70 でもビルドは通ります。ただし次の警告が出ます。古いGPU向けのビルドは、13系に上げた時点でできなくなるという予告です。

$ nvcc --list-gpu-arch    # nvcc 12.9.86
compute_50 compute_52 compute_53 compute_60 compute_61 compute_62 compute_70 compute_72 compute_75 compute_80 compute_86 compute_87 compute_89 compute_90 compute_100 compute_101 compute_103 compute_120 compute_121

$ nvcc -arch=sm_70 -c vadd.cu
nvcc warning : Support for offline compilation for architectures prior to '<compute/sm/lto>_75' will be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

Jetson Thor世代も番号が変わっています。12.9の一覧にあった compute_101 は13.4には無く、代わりに compute_110 が入っています。13.0のリリースノートに「SM101 has been renumbered as SM110 from this release.」とあり、NVIDIAの一覧でもJetson T5000・T4000は11.0です。12系で sm_101 を指定していたビルドスクリプトは、13系では書き換えが必要です。

必要なドライバ:13系はR580以上

CUDA 13.4のリリースノートの互換表では、13.x系のアプリはドライバ580以上、12.x系は525以上で動くとされています(マイナーバージョン互換)。ドライバは後方互換なので、580以上のドライバでも12.x系のアプリはそのまま動きます。13.4の新機能を使うにはR615以降のドライバが必要です。ドライバを古いまま13系のToolkitだけ入れても、ビルドはできても実行で止まります。

既定のビルド対象と12・13の選び分け

-arch を付けずにビルドしたときの対象も変わっています。nvcc --dryrun で確かめると、12.9は sm_52(Maxwell)向けにビルドして上の警告を出し、13.4は sm_75(Turing)向けにビルドします。どちらの既定も手元のGPUに最適化されたものではないので、-arch=sm_89 のように自分のGPUの番号を明示するのが基本です。選び方をまとめると次のとおりです。

状況 選ぶ版
GTX 10シリーズ、V100、Titan V CUDA 12.9系
RTX 20シリーズ以降で新規に始める CUDA 13系
使うライブラリが12系ビルドしか配っていない CUDA 12系
ドライバを580以上に上げられない(社内の管理端末など) CUDA 12系

12系は終わったわけではなく、12.9.2が2026年5月、12.8.2が2026年4月に出ています。ただし新しいGPU(13.x以降で追加されたCC)への対応は13系に入るので、新規のプロジェクトは13系で始め、古いGPUを抱える環境だけ12系に残すのが無理のない分け方です。

CUDAを使い始めるのに必要なもの:ドライバとToolkitの切り分け

「CUDAを入れる」と言うとき、実際には2つの別物が混ざっています。何をしたいかで、入れるものが変わります。

やりたいこと NVIDIAドライバ CUDA Toolkit
PyTorchでAIを動かす 必要 不要
CUDA対応のアプリやゲームを使う 必要 不要
.cuファイルを書いてnvccでビルドする 必要(実行時) 必要
llama.cppなどをCUDA有効でソースからビルドする 必要 必要

PyTorchならToolkitを入れなくてよい理由

Linuxでpipから入れるPyTorchは、CUDAのランタイムとライブラリを依存パッケージとして一緒に持ってきます(WindowsはPyPIの既定がCPU版で約124MBしかなく、下の –index-url 付きで入れます)。PyPIのtorch 2.14.1(2026年9月30日公開)のLinux版は cuda-toolkit[cublas,cudart,…]==13.0.3 と nvidia-cudnn-cu13==9.24.0.43 に依存しており、システムにCUDA Toolkitが無くてもGPUで動きます。必要なのはそれに見合うドライバで、PyPIの既定(CUDA 13.0版)ならR580以上です。PyTorchのリリース互換表(mainブランチ)では、2.14の安定版はCUDA 12.6・13.0・13.2向けに配布されています。GTX 10シリーズのように13系が使えないGPUでは、cu126版を選びます。

pip install torch --index-url https://download.pytorch.org/whl/cu126
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"

なお、PyTorchのmainブランチの互換表では、次の2.15(2026年10月28日公開予定)の安定版はCUDA 13.2のみになっており、12系のホイールは外れる見込みです。Pascal・Volta世代のGPUでPyTorchを使い続けるなら、2.14系で止める準備をしておきます。PyTorch自体の入れ方はPyTorchとは?読み方・できること・TensorFlowとの違いと入れ方【2.14対応】で解説しています。

nvidia-smiとnvccで表示されるCUDAの版は別物

nvidia-smi の右上に出る「CUDA Version」は、入っているドライバが対応するCUDAの上限です。Toolkitを入れていなくても表示されます。一方 nvcc --version は、インストールしたToolkitのコンパイラの版です。両者が食い違うのは普通で、nvidia-smiの値がnvccの値以上であれば問題ありません。nvidia-smiの読み方はnvidia-smiの使い方|GPU使用率とメモリの見方・CSV記録・DCGMへの移行判断で詳しく扱っています。

対応OS:WindowsとLinuxのみ、Macは不可

CUDA ToolkitはWindowsとLinux(x86_64とArm64)向けです。macOSはCUDA 10.2のリリースノートで「the last release to support macOS」とされ、以降は開発も実行もできません。Apple Silicon搭載のMacでGPUを使うなら、PyTorchのMPSバックエンドやAppleのMLXを使います。

CUDAのコード例:単体で動くベクトル加算

CUDAのプログラムは、CPU側(ホスト)が全体を進め、GPU側(デバイス)で重い計算をする分業で書きます。GPUで動く関数をカーネルと呼び、__global__ を付けて定義します。次のコードは、100万要素の配列の足し算をGPUで行う完全な例です。CPUとGPUの両方から見えるメモリを cudaMallocManaged で確保しているので、明示的なコピーを書かずに済みます。

// vadd.cu
#include <cstdio>
#include <cuda_runtime.h>

__global__ void add(const float *a, const float *b, float *c, int n) {
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    if (i < n) c[i] = a[i] + b[i];
}

int main() {
    const int n = 1 << 20;
    float *a, *b, *c;
    cudaError_t err = cudaMallocManaged(&a, n * sizeof(float));
    if (err != cudaSuccess) {
        printf("CUDA error: %s\n", cudaGetErrorString(err));
        return 1;
    }
    cudaMallocManaged(&b, n * sizeof(float));
    cudaMallocManaged(&c, n * sizeof(float));
    for (int i = 0; i < n; i++) { a[i] = 1.0f; b[i] = 2.0f; }
    int threads = 256;
    int blocks = (n + threads - 1) / threads;
    add<<<blocks, threads>>>(a, b, c, n);
    err = cudaGetLastError();
    if (err != cudaSuccess) {
        printf("CUDA error: %s\n", cudaGetErrorString(err));
        return 1;
    }
    err = cudaDeviceSynchronize();
    if (err != cudaSuccess) {
        printf("CUDA error: %s\n", cudaGetErrorString(err));
        return 1;
    }
    printf("c[0]=%.1f c[n-1]=%.1f\n", c[0], c[n - 1]);
    cudaFree(a); cudaFree(b); cudaFree(c);
    return 0;
}

add<<<blocks, threads>>> がカーネルの呼び出しで、ここでは256スレッドのブロックを4,096個起動します。if (i < n) は、要素数がスレッド数で割り切れないときに配列の外を書かないための判定です。ビルドと実行は次のとおりで、GPUがあれば c[0]=3.0 c[n-1]=3.0 と表示されます。

nvcc -arch=sm_86 -o vadd vadd.cu    # RTX 30シリーズの例。GPUのCCに合わせる
./vadd

GPUの無い環境でこのプログラムを実行すると、12.9でビルドしたものも13.4でビルドしたものも、最初の cudaMallocManaged で CUDA error: CUDA driver version is insufficient for CUDA runtime version を表示して終了しました。ドライバが無いか、ドライバがランタイムの版より古いときに出るエラーで、GPU搭載機でこれが出たら、まずドライバの更新を疑います。

カーネル呼び出し(<<<>>>)はエラーを返さないので、起動直後に cudaGetLastError で起動設定の誤りを、cudaDeviceSynchronize の戻り値でカーネル実行中のエラーを確かめます。エラーチェックを省くと、失敗しても初期値のまま計算が終わったように見えるので、最初から書いておきます。カーネル起動の回数が多く起動の待ち時間が効いてくる処理では、CUDA Graphsとは|カーネル起動オーバーヘッドを解消する仕組みと実装で扱う手法が使えます。Pythonのまま書きたい場合はNumbaとは?Pythonを高速化するJITコンパイラの使い方とインストールのCUDA対応も選択肢です。

CUDAとCPU・AMD・Vulkanの違い

CPUとの違い:置き換えではなく分業

CPUは数個〜数十個の高性能なコアで、分岐や順序のある処理を速く片づけます。GPUは数千個の単純な演算器を32スレッド単位(Warp)で同じ命令に従わせ、同じ計算の大量の繰り返しを速く片づけます。上のコード例なら、100万要素の足し算を約100万本のスレッドに1要素ずつ割り当てています。CUDAはCPUを置き換えるものではなく、プログラムの制御はCPU、重い並列計算だけをGPUに渡すという分業で使います。CPUとGPUの間のデータ転送は遅いので、小さな計算を何度もGPUに送ると、かえってCPUだけで計算するより遅くなります。

AMD GPUの代替:ROCmとHIP

CUDAはNVIDIA専用で、AMDのGPUでは動きません。AMD側の仕組みがROCmで、その上でCUDAに近い書き方ができるC++のAPIがHIPです。CUDAのソースをHIPへ書き換える変換ツール(HIPIFY)もあり、PyTorchはROCm版を公式に配布しています(mainブランチのRELEASE.mdの互換表では、2.14の安定版はROCm 7.14向け)。ただし、cuDNNなどNVIDIA独自のライブラリに依存したコードはそのままでは移せません。

Vulkan・OpenCLとの違い

VulkanとOpenCLはKhronos Groupが策定するベンダー横断の規格で、NVIDIA・AMD・IntelのGPUで動きます。Vulkanは本来グラフィックスのAPIで、計算にはコンピュートシェーダーを使います。CUDAはNVIDIAに限定される代わりに、cuBLASやcuDNNのような最適化済みライブラリと開発ツールが揃っています。違いが実際に表れる例が、ローカルLLMを動かすllama.cppです。llama.cppのビルド手順では、NVIDIA向けの -DGGML_CUDA=ON と、ベンダーを問わない -DGGML_VULKAN=ON を両方有効にしてビルドし、実行時に --device で使い分けられます。NVIDIAのGPUしか使わないならCUDA、AMDやIntelのGPUも同じバイナリで扱いたいならVulkan、という選び方になります。

CUDA-Xライブラリと開発ツール

CUDAの強みは言語よりも周辺のライブラリにあります。NVIDIAは最適化済みのライブラリ群をCUDA-Xと総称しており、行列計算のcuBLAS、ディープラーニングのcuDNN、高速フーリエ変換のcuFFT、乱数のcuRANDなどがあります。行列積を自分でカーネルに書くより、cuBLASを呼ぶほうがほぼ確実に速いので、まずライブラリで済む処理かを確認します。注意機構の高速化で知られるFlashAttentionとは?仕組みとFA2・FA3・FA4の違い、対応GPUとflash-attnの導入・設定も、CUDAで書かれた専用カーネルの一例です。

性能を詰める段階では、処理全体のCPUとGPUのやり取りを時系列で見るNsight Systemsで遅い区間を見つけ、カーネル単体の中身をNsight Computeで調べる、という順に使います。AIの受託開発でGPU環境の選定から相談したい場合は、生成AI開発・AI受託開発も扱っています。

よくある質問

CUDAの読み方は?

「クーダ」と読みます。Compute Unified Device Architectureの頭文字です。

CUDAは無料で使えますか?

CUDA ToolkitとNVIDIAのドライバは無償で入手できます。動かすにはCUDA対応のNVIDIA製GPUが必要で、AMDやIntelのGPU、Macでは使えません。

CUDA 12と13はどちらを入れればよいですか?

RTX 20シリーズ以降(Compute Capability 7.5以上)で、ドライバを580以上にできるなら13系です。GTX 10シリーズやV100は13系ではビルドできないので12.9系を使います。

PyTorchを使うにはCUDA Toolkitのインストールが必要ですか?

不要です。LinuxでpipからPyTorchを入れるとCUDAのランタイムとcuDNNも一緒に入ります。WindowsはPyPIの既定がCPU版なので、PyTorch公式の配布先(–index-url)からCUDA版を入れます。どちらもNVIDIAのドライバさえ入っていればGPUで動きます。Toolkitが要るのは、nvccでCUDAのコードをビルドするときです。

自分のGPUのCompute Capabilityはどう調べますか?

NVIDIAのCompute Capability一覧でGPU名を探すのが確実です。ドライバが入っていれば、nvidia-smi --query-gpu=name,compute_cap --format=csv でも確認できます。

関連記事

お気に入りに入れた記事の一覧

この記事は以下の記事からリンクされています

ほか 9 件の記事からもリンクされています。

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.27 テックブログ Brotli 脆弱性:CVE-2026-111497の影響確認とNode.js・Python・.NETの更新手順
  2. 2025.02.27 コラム トラッキングビーコン(Webビーコン)とは?仕組み・用途・確認と対策を徹底解説
  3. 2026.10.27 テックブログ Joshin(ジョーシン)不正アクセス:最大600万件の対象とサブスク初期パスワードの対処
  4. 2026.10.23 テックブログ Renta!はいつ再開?不正アクセスでメールアドレス等が流出したおそれ・再開時のパスワード再設定と運営側の対応
  5. 2026.07.09 テックブログ Muse Imageとは?Metaの画像生成AIの使い方・API料金(1枚0.01ドル)と日本での提供状況【2026年10月】

RELATED POSTS 関連記事

目次