OpenCL
Windows, Linux, macOS用が提供されている。"CUDA Toolkit 7.5"時点でOpenCL 1.2に対応している。
かつてNVIDIAのOpenCL SDKは"NVIDIA GPU Computing SDK"に含まれていて、CUDA SDKとは独立していたが、CUDA 5.0からはCUDA Toolkitにすべて含まれるようになった。以前のバージョンのGPU Computing SDKはアーカイブとして公開されている。
プロプライエタリ。
またXilinxの管理するtriSYCLも存在したが不完全なため非推奨となっており、代わりにIntelのLLVM実装に基づいたXilinxバックエンド実装が開発されている。その他、オープンソースの簡易実装のsycl-gtxもあった。
OpenCLのプログラム(アプリケーションソフトウェア)は、GLSLを利用したOpenGLプログラムとほぼ同じ要領で開発することができ、OpenCL C/C++を利用したデバイスコード(カーネルコード)と、OpenCL APIを利用したホストコードを別々に記述する。カーネルコードのコンパイルは、clCreateProgramWithSource()関数経由でデバイスドライバーが実行する。CUDAプログラムのような専用オフライン コンパイラ(nvcc)を必要としないため、様々なプラットフォームへの展開が容易となることが利点である。ただしカーネルコードの初回の実行時コンパイル(オンライン コンパイル)に時間がかかるなどのデメリットも存在する。この点に関しては、実運用時にはclCreateProgramWithSource()関数によるオンライン コンパイルは行なわず、clGetProgramInfo()関数とclCreateProgramWithBinary()関数を用いてコンパイル済みバイナリからプログラムオブジェクトを生成する方法もあるが、ベンダーごとのOpenCLバイナリ間における互換性は保証されない。
OpenCLには次のような特徴がある。
CPU(CL_DEVICE_TYPE_CPU)、GPU(CL_DEVICE_TYPE_GPU)、およびCell/FPGA/Xeon Phiなど(CL_DEVICE_TYPE_ACCELERATOR)の各種計算資源のサポート
C言語(ISO C99規格)をベースにしたOpenCL C、あるいはC++言語(ISO C++14規格)をベースにしたOpenCL C++プログラミング言語によるカーネル記述 組み込みのベクトル型およびベクトル演算のサポート(float2型、float4型などや、Swizzle演算など) オンラインのOpenCL Cコンパイラ
SPIR(英語版)およびSPIR-V中間表現のサポート (SPIR 1.2/2.0 for OpenCL 1.2/2.0, SPIR-V 1.0 for OpenCL 2.1)
データ並列およびタスク並列のプログラミングモデルのサポート
同期ポイント以外での内容の一貫性 (consistency) を保証しない、緩和型一貫性共有メモリモデル (relaxed-consistency shared memory model)
同期ポイントおよびOpenCLアトミック操作でのホスト・デバイス間のメモリ一貫性を保証する共有仮想メモリ (shared virtual memory: SVM, OpenCL 2.0)