NVIDIA CCCL 3.1がGPUコンピューティング向け浮動小数点決定性制御を追加
Caroline Bishop 2026/3/5 17:46
NVIDIAのCCCL 3.1は、並列リダクション向けに3つの決定性レベルを導入し、開発者がGPU演算において性能と再現性をトレードオフできるようにした。
NVIDIAは、CUDA Core Compute Libraries (CCCL) 3.1に決定性制御を導入し、並列GPUコンピューティングにおける長年の課題に対処した。それは、複数回の実行や異なるハードウェア間で浮動小数点演算から同一の結果を得ることである。
このアップデートでは、CUBの新しいシングルフェーズAPIを通じて3つの設定可能な決定性レベルが導入され、開発者は長年GPUアプリケーションを悩ませてきた再現性と性能のトレードオフを明示的に制御できるようになった。
浮動小数点決定性が重要な理由
問題はこうだ。浮動小数点の加算は厳密には結合的ではない。有限精度での丸めにより、(a + b) + c は常に a + (b + c) と等しいわけではない。並列スレッドが予測不可能な順序で値を結合すると、実行のたびにわずかに異なる結果が得られる。金融モデリング、科学シミュレーション、ブロックチェーン演算、機械学習トレーニングなど、多くのアプリケーションにとって、この不整合は実際の問題を引き起こす。
新しいAPIにより、開発者は3つのモードを通じて必要な再現性のレベルを正確に指定できる。
非保証決定性は、純粋な速度を優先する。スレッドが実行される順序でアトミック演算を実行し、単一のカーネル起動でリダクションを完了する。実行間で結果がわずかに異なる可能性があるが、近似的な答えで十分なアプリケーションにとって、性能向上は大きい。特に、カーネル起動のオーバーヘッドが支配的な小規模入力配列において顕著である。
実行間決定性(デフォルト)は、同じ入力、カーネル構成、GPUを使用する場合に同一の出力を保証する。NVIDIAは、アトミックに依存するのではなく、リダクションを固定階層ツリーとして構造化することでこれを実現している。要素はまずスレッド内で結合され、次にシャッフル命令を介してワープ間で、次に共有メモリを使用してブロック間で結合され、第2のカーネルが最終結果を集約する。
GPU間決定性は、最も厳格な再現性を提供し、異なるNVIDIA GPU間で同一の結果を保証する。実装では、入力値を固定指数範囲にグループ化する再現可能浮動小数点アキュムレータ(RFA)を使用する。デフォルトでは3つのビンが使用され、異なる大きさの数値を加算する際に生じる非結合性の問題に対処する。
性能トレードオフ
H200 GPU上でのNVIDIAのベンチマークは、再現性のコストを定量化している。GPU間決定性は、大規模な問題サイズに対して、緩和モードと比較して実行時間を20%から30%増加させる。実行間決定性は、2つの極端の中間に位置する。
3ビンRFA構成は、NVIDIAが「最適なデフォルト」と呼ぶもので、精度と速度のバランスをとっている。ビンを増やすと数値精度は向上するが、実行を遅くする中間合計が追加される。
実装の詳細
開発者はcuda::execution::require()を通じて新しい制御にアクセスする。これは、リダクション関数に渡される実行環境オブジェクトを構築する。構文は簡単で、要件に応じて決定性をnot_guaranteed、run_to_run、またはgpu_to_gpuに設定する。
この機能は、CUBのシングルフェーズAPIでのみ機能する。古い2フェーズAPIは実行環境を受け入れない。
より広い影響
クロスプラットフォームの浮動小数点再現性は、高性能コンピューティングとブロックチェーンアプリケーションにおける既知の課題であり、異なるコンパイラ、最適化フラグ、ハードウェアアーキテクチャが数学的に同一の演算から異なる結果を生成する可能性がある。NVIDIAのアプローチは、実装の詳細を隠すのではなく、決定性を設定可能なパラメータとして明示的に公開することであり、実用的な解決策を表している。
同社は、決定性制御をリダクションを超えて追加の並列プリミティブに拡張することを計画している。開発者は、NVIDIAのGitHubリポジトリを通じて進捗を追跡し、特定のアルゴリズムをリクエストできる。そこでは、拡張された決定性ロードマップを追跡するオープンイシューがある。
画像ソース: Shutterstock- nvidia
- gpuコンピューティング
- cccl
- 浮動小数点決定性
- cuda



