ここでは従来のCPUベースのプログラミングとの比較ではなく、類似のGPGPU関連技術とCUDAとの比較を行なう。 CUDAはNVIDIAが独自に開発を進めているGPGPU技術であり、NVIDIA製のハードウェア性能を最大限引き出せるように設計されている[33]。CUDAを利用することで、NVIDIA製GPUに新しく実装されたハードウェア機能をいち早く活用することができる。例えばKepler世代以降のGPUで使用可能なWarpシャッフル命令を使用することで、共有メモリを介するよりもさらに高速な並列リダクションを実行することができる[34] [35]。CUDA同様の類似GPGPU技術として代表的なものはOpenCLやDirectComputeが挙げられるが、いずれもハードウェアアーキテクチャを標準化しベンダーの違いを吸収するAPI層であるため、CUDAと比較すると抽象化の度合いは低いローレベルAPIではあるものの、ハードウェア特有の先進的機能を使った細やかなチューニングによりそのハードウェアの限界性能を引き出すのは難しい[36]。 また、OpenCLやDirectComputeでは、カーネルと呼ばれるデバイス用並列処理プログラムコード片(並列実行の最小単位)を専用のOpenCL-CやHLSLといった言語で記述した上で、OpenCL APIやDirect3D APIを使用してカーネルを発行する必要があるため、準備のための手間が必要となるが、CUDAの場合はより抽象化されており、カーネルコードの発行をC/C++における通常の関数呼び出しに近い形で記述できるなど、より本質的なアプリケーションコードやアルゴリズムの実装のみに注力できるようになっている。 ハードウェアベンダーに依存しないOpenCLやDirectComputeと比較すると、CUDAはNVIDIA製のGPUでしか使えないという制約がある。このため、CUDAの機能に過度に依存したプログラムを書くと、アプリケーションのポーティング・移植が困難になる可能性がある(ベンダーロックイン)[37]。AMDはCUDAアプリケーションをAMDおよび他のGPUプラットフォーム向けにソースコードレベルで移植しやすくするためのC++用APIとして、HIP (Heterogeneous-Compute Interface for Portability) の提供を開始した[38][39]が、CUDAと完全な互換性を持っているわけではない。 また、最初からグラフィックス連携用途を想定して設計されたDirectComputeと比較すると、(相互運用APIが用意されているとはいえ)GPU演算結果をグラフィックス用途に直接利用する場合はオーバーヘッドが大きくなる[40]。 DirectX 10世代(G80世代)以降の統合型シェーダーアーキテクチャを採用したNVIDIA製GPUがCUDAに対応している[注釈 1]。 実行には専用のデバイスドライバーを必要とする。詳細は、CUDA GPUs 。NVIDIA Developer Zone CUDAは実行環境デバイスの世代(Compute Capability)に応じた専用バイナリコードを生成できるほかに、PTX (Parallel Thread Execution) と呼ばれるNVIDIA独自のGPU中間命令(中間言語)を生成することができる。PTXを利用することで、実行時にCUDAドライバーによって実行環境に合わせた最適なコードを生成することができるようになる[41]。 CUDA Toolkit 6.5の対応OSは、Windows XP (32bit版のみ)、Windows 7、Windows 8.1、Windows Server 2008 R2、Windows Server 2012 R2、Fedora 20、OpenSUSE 13.1、RHEL (Red Hat Enterprise Linux) 5/6、CentOS 5/6、SLES (SUSE Linux Enterprise Server) 11-SP3、Ubuntu 12.04/14.04、Mac OS X 10.8/10.9/10.10である[42]。 CUDA Toolkit 7.0の対応OSは、Windows 7、Windows 8.1、Windows Server 2008 R2、Windows Server 2012 R2、Fedora 21、OpenSUSE 13.1/13.2、RHEL 6/7、CentOS 6/7、SLES 11/12、Ubuntu 12.04/14.04/14.10、OS X 10.9/10.10である[43]。 CUDA Toolkit 7.5の対応OSは、Windows 7、Windows 8.1、Windows 10、Windows Server 2008 R2、Windows Server 2012 R2、Fedora 21、OpenSUSE 13.2、RHEL 6/7、CentOS 6/7、SLES 11/12、SteamOS 1.0-beta、Ubuntu 14.04/15.04、OS X 10.9/10.10/10.11である[44]。 CUDA Toolkit 8.0 GA2の対応OSは、Windows 7、Windows 8.1、Windows 10、Windows Server 2008 R2、Windows Server 2012 R2、Windows Server 2016、Fedora 23、OpenSUSE 13.2、RHEL 6/7、CentOS 6/7、SLES 11/12、Ubuntu 14.04/16.04、OS X 10.11/10.12である[45]。 CUDA Toolkit 9.2の対応OSは、Windows 7、Windows 8.1、Windows 10、Windows Server 2012 R2、Windows Server 2016、Fedora 27、OpenSUSE Leap 42.3、RHEL 6/7、CentOS 6/7、SLES 12、Ubuntu 16.04/17.10、OS X 10.13である[46]。 CUDA Toolkit 10.2の対応OSは、Windows 7、Windows 8.1、Windows 10、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019、Fedora 29、OpenSUSE 15、RHEL 6/7/8、CentOS 6/7/8、SLES 1512 SP4、Ubuntu 16.04/18.04、OS X 10.13である[47]。 CUDA Toolkit 11.8の対応OSは、Windows 10、Windows 11、Windows Server 2016、Windows Server 2019、Windows Server 2022、Fedora 35、OpenSUSE 15、RHEL 7/8/9、CentOS 7、SLES 15、Ubuntu 18.04/20.04/22.04、Debian 11、KylinOS
メリット
デメリット
対応環境
ハードウェア
NVIDIA GeForce 8シリーズ以降(一般/ゲーミング向け)
NVIDIA Quadro G80ベース以降(ワークステーション向け)
NVIDIA Tesla(ハイパフォーマンスコンピューティング/データセンター向け)
NVIDIA Jetson(組み込み用)
NVIDIA Tegra K1[注釈 2]以降(モバイル向けの統合型プロセッサ)
NVIDIA ION(ネットブック/ネットトップデバイス用、サポート終了)
PTX (Parallel Thread Execution)
OS