この項目では、並列コンピューティングのフレームワークについて説明しています。旧称OpenCLの暗号化ライブラリについては「Botan」をご覧ください。
OpenCL
作者Apple
開発元Khronos Group
最新版3.0.14[1][2] / 2023年4月17日 (12か月前) (2023-04-17)
対応OSクロスプラットフォーム
種別API
ライセンスロイヤリティフリー
公式サイトwww.khronos.org/opencl
OpenCL(オープンシーエル、英: Open Computing Language)は、マルチコアCPUやGPU、Cellプロセッサ、DSPなどによる異種混在の計算資源(ヘテロジニアス環境、ヘテロジニアス・コンピューティング、英: Heterogeneous)を利用した並列コンピューティングのためのクロスプラットフォームなAPIである。主な用途は科学技術計算や画像処理に代表される高性能計算のためのアプリケーションソフトウェアの高速化(ハードウェアアクセラレーション)であり、シミュレーション可視化に用いるリアルタイム3次元コンピュータグラフィックスAPIとの連携も拡張機能として標準化されている。スーパーコンピュータやサーバ、ワークステーションやパーソナルコンピュータのほか、携帯機器などでの利用も想定されており、組み込みシステム向けに必要条件を下げたOpenCL Embedded Profileが存在する。 OpenCLの仕様はAppleによって提案されたのち[3]、標準化団体クロノス・グループの作業部会OpenCL Working Group(旧Compute Working Group)によって策定されている。仕様はロイヤリティフリーなオープン標準として公開されており、仕様に基づいたフレームワークの実装はサードパーティーによって行われる。ただし、実装されたフレームワークに対して許諾される商標ライセンスに必要な仕様一致性テストには、'nominal fee'(名目上の手数料)が必要である[4]。 OpenCLには次のような特徴がある。
仕様
特徴
CPU(CL_DEVICE_TYPE_CPU)、GPU(CL_DEVICE_TYPE_GPU)、およびCell/FPGA/Xeon Phi[5]など(CL_DEVICE_TYPE_ACCELERATOR)の各種計算資源のサポート
C言語(ISO C99規格)をベースにしたOpenCL C、あるいはC++言語(ISO C++14規格)をベースにしたOpenCL C++プログラミング言語によるカーネル記述
組み込みのベクトル型およびベクトル演算のサポート(float2型、float4型などや、Swizzle演算など)
オンラインのOpenCL Cコンパイラ
SPIR
データ並列およびタスク並列のプログラミングモデルのサポート
同期ポイント以外での内容の一貫性 (consistency) を保証しない、緩和型一貫性共有メモリモデル (relaxed-consistency shared memory model)
同期ポイントおよびOpenCLアトミック操作でのホスト・デバイス間のメモリ一貫性を保証する共有仮想メモリ (shared virtual memory: SVM, OpenCL 2.0)[6]
IEEE 754準拠の単精度浮動小数点数(float型)演算のサポート
ポインタ渡しおよびfloat型との相互変換関数経由でのアクセスに限定されるIEEE 754-2008準拠の半精度浮動小数点数(half型)
OpenCL 1.0においては、half型の直接演算は拡張 (cl_khr_fp16) による任意サポートに留まる
OpenCL 1.0においては、倍精度浮動小数点数(double型)は拡張 (cl_khr_fp64) による任意サポートに留まる
1次元/2次元/3次元のイメージオブジェクトのサポート(1次元イメージはOpenCL 1.2以降[7])
OpenGLおよびOpenGL ESのバッファ、テクスチャ、レンダーバッファとの連携(cl_gl.h、OpenCL 1.0以降の拡張[8])
EGL(英語版)のイメージ、ディスプレイ、同期オブジェクトとの連携(cl_egl.h、OpenCL 1.2以降の拡張)
Direct3D 10のバッファおよびテクスチャとの連携(cl_khr_d3d10_sharing; cl_d3d10.h、OpenCL 1.1以降の拡張)
Direct3D 11のバッファおよびテクスチャとの連携(cl_khr_d3d11_sharing; cl_d3d11.h、OpenCL 1.2以降の拡張)