NVIDIA CUDA 13.3 がリリース:C++でのタイルプログラミング、コンパイラ自動調整、Python機能の強化など

CGソフト

2026年5月26日(現地時間)、NVIDIA は CUDA エコシステムを利用する開発者向けに、新機能とパフォーマンス最適化を含む「CUDA 13.3」を公開しました。

今回のアップデートには、3DCG のレンダリングエンジンや物理シミュレーションだけでなく、LLM(大規模言語モデル)の推論やディープラーニングなどの AI 開発において、GPU の処理能力をより効率的に活用するための機能強化が含まれています。

ここでは、記事では、C++ における「CUDA Tile プログラミング」サポートの追加、安定版として提供される「CUDA Python 1.0」、自動最適化フレームワーク「CompileIQ」、さらに C++23 対応を含むコンパイラの更新や、cuBLAS・cuSPARSE・cuSOLVER など数学ライブラリの多数のアップデートについて紹介します。

CUDA Tile C++のリリース

CUDA 13.3 では、CUDA Tile プログラミングモデルのサポートが C++ に拡張されました。

「CUDA Tile C++」は CUDA Tile IR(中間表現)仕様を基盤としており、開発者は従来の SIMT(Single Instruction, Multiple Threads)モデルに加えて、タイルベースのモデルを用いて GPU カーネルを記述できるようになります。

このモデルは、並列処理や非同期処理、メモリ転送といった GPU 固有の低レベル制御を自動的に処理するため、開発者は低レベルの詳細に煩わされることなく、より高い抽象度でコードを記述できます。

また、このモデルは NVIDIA Hopper(Compute Capability 9.0)を含む複数の NVIDIA GPU アーキテクチャ間で移植性を維持しており、コードを書き直すことなく最新のハードウェア機能を利用できます。

詳細はこちらで解説されています。

CUDA Python 1.0のリリース

Python から CUDA の機能へアクセスするためのライブラリ群である「CUDA Python」が、バージョン 1.0 として安定版に到達しました。今後はセマンティックバージョニングが採用され、破壊的な API 変更はメジャーバージョンの更新時に限定されます。

マイナーリリースでは新機能の追加、パッチリリースではバグ修正が行われるため、変更内容を予測しやすく、安定した運用が可能になります。

ライブラリ説明次のメジャーバージョン
cuda.bindingCUDA C APIへの低レベルなPythonバインディング13.3.0
cuda.coreCUDAランタイムやコア機能へのPythonicなアクセス1.0.0
cccl-cuda高度にカスタマイズ可能なCCCL並列アルゴリズムへのPythonicなアクセス1.0.0
cuda-pathfinderユーザーのPython環境にインストールされたCUDAコンポーネントを特定するためのユーティリティ1.6

cuda.core の安定化と新機能

デバイス、ストリーム、プログラム、リンカー、メモリリソース、グラフなど、CUDAランタイムへのインターフェースを提供する cuda.core が安定版となりました。これまでのリリースサイクルで調整されてきたAPIが統合されたほか、以下のような重要な新機能が追加されています。

  • グリーンコンテキスト (Green contexts): GPUのStreaming Multiprocessor (SM) を独立したパーティションに分割し、それぞれに独自のコンテキストとストリームを持たせることができます。これにより、遅延に敏感な処理(レイテンシセンシティブなカーネル)が、長時間を要する高スループットな処理の影響を受けるのを防ぎます。
  • プロセスチェックポイント (Process checkpointing): 実行中のプロセスの完全なCUDA状態(デバイスの割り当て、ストリーム、コンテキストなど)のスナップショットを取得し、後で復元することができます。これにより、時間のかかるジョブのフォールトトレランス(耐障害性)確保や、クラスタ上でのマイグレーション、推論ワーカーの高速なウォームスタートが可能になります(Linuxのみ対応)。
  • プロセス間共有 (IPC): ホスト(CPU)を経由したコピーを行わずに、複数のPythonプロセス間でGPUメモリを共有できます。あるプロセスが割り当てた物理VRAMを、別のプロセスが自身のアドレス空間にマッピングすることで、マルチプロセスの機械学習サービングやゼロコピーのパイプライン構築に役立ちます。
cuda.core APIの使用例を表示
from cuda.core import Device, Stream, Program, ProgramOptions, LaunchConfig, launch

# GPUの選択とアクティベート
dev = Device()
dev.set_current()

# CUDAストリームの作成
stream = dev.create_stream()

# NVRTCのコンパイルと検索
prog = Program(src, code_type="c++", options = ProgramOptions(arch=f"sm_{dev.arch}"))
kernel = prog.compile("cubin").get_kernel("my_kernel")

# カーネルの起動
launch(stream, LaunchConfig(grid=64, block=256), kernel, *args)

# JIT-LTO リンク
from cuda.core import Linker, LinkerOptions
module = Linker(
    [obj1, obj2],           
    options=LinkerOptions(arch=f"sm_{dev.arch}")
).link("cubin")

# プロセス間通信 (IPC): Pythonプロセス間でのGPUメモリ共有
from cuda.core import DeviceMemoryResource, DeviceMemoryResourceOptions
mr = DeviceMemoryResource(dev,
        options=DeviceMemoryResourceOptions(max_size=1 << 20, ipc_enabled=True))
buffer = mr.allocate(nbytes) # bufferはpickle可能でmp.Queue等で送信可能

# プロセスチェックポイントと復元 (Linux)
from cuda.core import checkpoint
import os

proc = checkpoint.Process(os.getpid())
proc.lock(timeout_ms=5000)
proc.checkpoint()
proc.restore()
proc.unlock()
# デバイスの割り当てとコンテキストが復元されます

CCCL Python Release 1.0.0: cuda.compute

cuda.compute は、ソート、スキャン、リダクション、変換など、CCCL(CUDA Core Compute Libraries)の高度に調整された並列アルゴリズムを、ホスト(CPU)から呼び出せる構成要素としてPythonに提供します。前回のリリースからの変更点は以下の通りです。

  • Pythonのラムダ式をアルゴリズムのオペレータとして使用可能になり、単純な処理の記述が簡潔になりました。
  • 副作用(状態)を持つオペレータがサポートされ、継続的なアキュムレータや条件付き変換などのユースケースに対応しました。
  • CUBの並列バイナリサーチをPythonに公開する新しいAPI(cuda.compute.upper_boundcuda.compute.lower_bound)が追加されました。
  • すべてのアルゴリズムにわたってキャッシュが統合され、繰り返し呼び出す際のパフォーマンスが向上しました。
cuda.compute および cuda.coop の使用例を表示
import cuda.compute
from cuda.compute import OpKind
import cupy as cp
import numpy as np

d_input = cp.arange(1, 1_000_001, dtype=cp.int32)
d_output = cp.empty(1, dtype=cp.int32)
h_init = np.array([0], dtype=np.int32)

cuda.compute.reduce_into(
    d_input, d_output, OpKind.PLUS, d_input.size, h_init
)

# Numbaカーネル内での協調プリミティブ(cuda.coop)の利用
from numba import cuda
from cuda.coop._experimental import block, warp
import numba

THREADS = 128
block_sum = block.make_sum(numba.int32, THREADS)

@cuda.jit(link=block_sum.files)
def reduce_kernel(data, out):
    # 各スレッドがブロック全体のReductionに寄与する
    total = block_sum(data[cuda.threadIdx.x])
    if cuda.threadIdx.x == 0:
        out[0] = total

新しい Numba CUDA MLIR バックエンド

Python用のNumba互換カーネルジェネレータとして、MLIRと最新のNVVMツールチェーンをベースにゼロから構築された「Numba CUDA MLIR」が導入されました。従来の @cuda.jit のプログラミングモデルを維持しながら、コンパイル時間の短縮、診断機能の向上を実現しています。

実際のカーネル(ベクトル加算、ソフトマックス、アテンション、FFT、行列積など)のスイートにおいて、ウォームJITコンパイル時間はNumba-CUDAと比較して幾何平均で約1.4倍、個別カーネルでは最大約2倍高速化されています。また、ホスト側のカーネルディスパッチのオーバーヘッド(起動レイテンシ)も大幅に削減されました。

CUDA Python を今すぐ試す

CUDA Pythonスタックは、以下のコマンドを用いてPyPIから直接インストールできます。これにより、cuda.bindingscuda.corecuda.compute、および cuda-pathfinder が導入されます。

pip install cuda-python cuda-cccl numba-cuda-mlir[cu13]

CompileIQのローンチ

CUDA 13.3では、GPUカーネルのパフォーマンスを最大限に引き出すための新しいコンパイラ自動調整フレームワーク「CompileIQ」が提供されます。

従来のGPUコンパイラは、汎用的な最適化ヒューリスティクスを適用していましたが、特定のカーネルにとって必ずしも最適とは限らない場合がありました。CompileIQは、進化論的アルゴリズムや遺伝的アルゴリズムを使用することで、各カーネルに合わせた専用のコンパイラ構成を生成します。

これにより、LLM(大規模言語モデル)の推論計算の大部分を占めるGEMM(行列積)やAttentionといった重要なカーネルにおいて、すでに最適化されている実装に対しても最大15%の速度向上を実現しています。

数学ライブラリのアップデート

CUDAの中核となる数学ライブラリ(cuSPARSE、cuBLAS、cuSOLVER)においても、多数の機能追加とパフォーマンス向上が行われています。

  • cuSPARSE:
    • SpSVおよびSpSMでのCSCフォーマットをサポート。
    • SpMVOpでの混合精度をサポート。
    • SpMvOp計算において、混合インデックス型(64ビットオフセット、32ビットインデックス)のCSR行列をサポート。
    • cusparseSpMVOp_createDescr() のパフォーマンスが2.5倍に向上。
    • 新しいAPI SPMVOP_ALG1 を導入。同じスパースパターンを維持したままの行列値の更新、最適化されたバッファサイズ、および前処理オーバーヘッドの削減をサポートします。
  • cuBLAS:
    • CUDAグリーンコンテキストをサポート。
    • NVIDIA Blackwell UltraにおけるFP4行列積のパフォーマンス向上。
    • NVIDIA Blackwell および Blackwell UltraにおけるTF32行列積のパフォーマンス向上。
    • NVIDIA Hopper、Blackwell、Blackwell Ultra向けにSYMVのパフォーマンスを改善。
    • FP64エミュレーション行列積のユーザーエクスペリエンスを改善。問題空間全体で一定となる固定ワークスペースサイズを強制するようになりました。
  • cuSOLVER:
    • 極分解のためのQDWHアルゴリズムを公開する64ビットインターフェース cusolverDnXpolar を追加。
    • 分割統治法を用いて対称三重対角行列の固有値(およびオプションで固有ベクトル)を計算する64ビットインターフェース cusolverDnXstedc を追加。
    • cusolverDnXgeev における固有ベクトルの後処理をホストからデバイスへ移動し、パフォーマンスを向上。
    • cusolverDn[D,Z]syevj において低精度プレコンディショニングを採用。B200環境の中~大規模行列において、解を導出するまでの時間が通常20%改善されます。

CCCL 3.3 の新機能

CUDA 13.3には「CCCL 3.3 (CUDA Core Compute Libraries)」が含まれており、テンソルの相互運用性向上や、乱数生成、各種アルゴリズムの大幅な強化が行われています。

テンソルの相互運用性 (DLPack / mdspan)

PyTorchやCuPyなどのディープラーニングフレームワークで使用されるテンソル構造と、CUDA C++カーネル(生ポインタや手動インデックス計算)との境界を橋渡しするため、DLPackの相互運用性が強化されました。フレームワーク側のテンソルをC++カーネル内で cuda::std::mdspan ビューに変換したり、その逆の変換を行うことが容易になっています。

乱数分布とPCG64エンジン

<cuda/std/random> に、一様分布、正規分布、ポアソン分布、ベルヌーイ分布など、C++標準ライブラリに近い17種類のデバイス互換乱数分布が追加されました。また、品質とパフォーマンスのバランスに優れた cuda::pcg64 エンジン(NumpyのデフォルトPRNG)も追加されています。

検索・スキャン・変換アルゴリズムの拡充

  • 高速な検索: 条件を満たす最初の要素を検索するデバイス全体の新しいアルゴリズム cub::DeviceFind::FindIf が追加され、従来のCCCL 3.2と比較して最大7倍の高速化を実現しています。
  • セグメント化スキャン: cub::DeviceSegmentedScan により、複数の独立したセグメントにわたるスキャン操作を効率的に計算できるようになりました。
  • バイナリサーチ(二分探索): cub::DeviceFind::LowerBound / UpperBound が追加され、順序付けられたシーケンス内の複数の値に対する並列検索が可能になりました。
  • 変換: cub::DeviceTransform が拡張され、N個の入力シーケンスからM個の出力シーケンスへの変換をサポートするようになりました。
CCCL 3.3 の使用例(C++コード)を表示
// 乱数生成の例
#include <cuda/random>
#include <cuda/std/random>

__global__ void sample_kernel() {
    cuda::pcg64 rng(threadIdx.x);
    cuda::std::normal_distribution<float> dist(0.0f, 1.0f);
    float sample = dist(rng);
}

// 高速な条件検索の例
cub::DeviceFind::FindIf(
  d_temp, temp_bytes, input, output, 
  [] __device__ (int value) {
    return value > 42;
  }, num_items);

コンパイラ (NVCC) の強化

nvcc および nvrtc において、C++23がフルサポートされました。これにより、開発者は最新の言語標準を利用できるようになり、コードベースの近代化とクロスプラットフォームでのポータビリティ向上が期待できます。

また、NVRTCでは標準のCUDA C++ヘッダーがバンドルされるようになり事前のセットアップの手間が軽減されたほか、nvcc コンパイラ内にプルーニング(不要部分の削除)機能である nvprune が統合され、より効率的な成果物の管理が可能になりました。

その他の強化点

  • MPSのパーシャルエラー分離: マルチプロセスサービス(MPS)利用時、エラーが発生した際に、原因となったクライアント(パーティション)の作業のみを終了させ、他の正常なクライアントを巻き込まないようにする機能がサポートされました。
  • 既存グラフへの再キャプチャ: cudaStreamBeginRecaptureToGraph() という新しいAPIにより、ストリームのキャプチャを既存のCUDAソースグラフに対して開始・更新できるようになりました。
  • グリーンコンテキストの改善: CUDA Driver APIで使用されるグリーンコンテキストにおいて、デフォルト(NULL)ストリームの作成が必須ではなくなり、任意で設定可能になりました。
  • NVMLのレポート機能追加: 新しいAPI nvmlDeviceGetRemappedRows_v2 が追加され、非アクティブな再マッピング行の数を取得できるようになりました。
  • mmap() サポートの追加: GDRCopyカーネルドライバをインストールできない環境向けに、ディスクリートGPUメモリへの低レイテンシなCPUマッピングを提供する mmap() のサポートが拡張されました。

まとめ

NVIDIA CUDA 13.3 は、C++ によるタイルプログラミングの導入、Python 環境の拡充、コンパイラの自動最適化などを含むアップデートとなっています。これらの機能強化は、レンダリングエンジンの調整や複雑なシミュレーションを扱う 3DCG エンジニアに加えて、AI や LLM の開発に携わるエンジニアにとっても役立つ内容となっています。

CUDA Toolkit 13.3は、NVIDIAの公式サイトからダウンロードしてすぐに試すことがでます。


NVIDIA CUDA 13.3 Enhances GPU Development with Tile Programming in C++, Compiler Autotuning, and Python Updates

コメント

Translate »
タイトルとURLをコピーしました