OpenCL
OpenCL（オープンシーエル、）は、OpenCL C言語による、マルチコアCPUやGPU、Cellプロセッサ、DSPなどによる異種混在の計算資源（ヘテロジニアス環境、ヘテロジニアス・コンピューティング、）を利用した並列コンピューティングのためのクロスプラットフォームなフレームワークである。用途には高性能計算サーバやパーソナルコンピュータのシステムのほか、携帯機器などでの利用も想定されており、組み込みシステム向けに必要条件を下げたOpenCL Embedded Profileが存在する。
OpenCLの仕様はアップルによって提案されたのち、標準化団体クロノス・グループの作業部会（旧）によって策定されている。仕様はロイヤリティフリーなオープン標準として公開されており、仕様に基づいたフレームワークの実装はサードパーティーによって行われる。ただし、実装されたフレームワークに対して許諾される商標ライセンスに必要な仕様一致性テストには、（名目上の手数料）が必要である。
OpenCLには次のような特徴がある。OpenCL類似技術にNVIDIAのCUDA（後述）が存在するが、OpenCLにはCUDA同様に、3DグラフィックスAPIであるOpenGL（クロスプラットフォーム）およびDirect3D（Windowsプラットフォーム専用）との相互運用性（）がAPIレベルで確保されている。
なお、OpenCLの動作ターゲットとしての用件を満たしたGPU（主にDirectX 10世代以上の統合型シェーダーアーキテクチャを採用したGPU）で使用できるDirect3D API（Direct3D 10およびDirect3D 11）との相互運用機能は、クロノスが管理しているOpenCL API公式拡張でサポートされるが、旧来のDirect3D 9との相互運用機能は、OpenCL 2.0時点でもベンダーごとの拡張機能依存となっている（cl_d3d9_ext.h）。
OpenCLでのhalf/double型のサポート状況は、CUDAなどのほかのAPIとよく似ている。また、OpenGL/Direct3Dでは浮動小数点テクスチャすなわちデータストレージのフォーマットとしてFP32形式のほかにFP16形式を選択できるが、通例GPUが得意とする演算精度は単精度であるため、シェーダープログラム中で利用できる演算精度は一般的には単精度となり、倍精度や半精度はオプション扱いとなる。
OpenCL実行環境であるオペレーティングシステム上には、Installable Client Driver (ICD) Loaderという仕組みにより、複数のベンダーによるOpenCL実装を混在させることができる（cl_khr_icd）。各ベンダーのOpenCL実装は「プラットフォーム」として抽象化され、OpenCL APIを通じて列挙・選択することができる。
またOpenCLはカーネルコードの実行ハードウェアを「デバイス」として抽象化する。各OpenCLプラットフォームは複数のOpenCLデバイスを持つことができ、OpenCL APIを通じて列挙・選択できる。
2008年6月10日（日本時間）のWorldwide Developers Conferenceにおいて、Mac OS X Snow Leopard（v10.5 Leopardの次期メジャーバージョンとされる）に搭載される予定の技術の1つとして初めて発表された。
標準化団体クロノス・グループの2008年6月16日に発足した作業部会 において、アップルによってOpenCLの仕様草案が提案された。CWGはGPUとCPUのヘテロジニアス（異種混在）な計算技術のロイヤリティフリーな標準化を目的としており、発足時点では3Dlabs、AMD、アップル、ARM、Codeplay、エリクソン、フリースケール・セミコンダクタ、Graphic Remedy、IBM、、インテル、ノキア、NVIDIA、モトローラ、QNX、クアルコム、サムスン、Seaweed、テキサス・インスツルメンツ、スウェーデン・ウメオ大学が参加している。
2008年8月のSIGGRAPH 2008および同年11月のにおいて、仕様策定の進捗状況が発表され、同時期には名称をと改められ、新たにアクティビジョン・ブリザード、バルコ、ブロードコム、エレクトロニック・アーツ、エイチアイ、ケストレル研究所、Movidia、、TAKUMIが参加している。11月10日にはRapidMindが自社の並列コンピューティング開発環境においてOpenCLを採用すると発表した。
2008年12月9日のSIGGRAPH Asia 2008において、正式版となるOpenCL 1.0の仕様が発表された。またほぼ同時期に、AMDとNVIDIAはそれぞれ自社のGPGPU技術であるATI StreamおよびCUDAにおいてOpenCL 1.0を採用すると発表した。OpenCL 1.0対応の最初のプラットフォームとして、Mac OS X Snow Leopardが2009年8月28日にリリースされた。
2010年6月14日、OpenCL 1.1を正式発表。
float3型の追加、clSetKernelArg()関数以外のスレッドセーフ化など。
2011年11月15日、OpenCL 1.2を正式発表。
分割コンパイル＆リンク対応、SubDeviceの追加、SPIR 1.2拡張機能、3Dイメージの書き込み拡張機能など。
2013年7月22日、OpenCL 2.0を正式発表。
read_write修飾子、共有仮想メモリ (Shared Virtual Memory) や動的並列処理 (Dynamic Parallelism) 対応など。
2015年11月16日、OpenCL 2.1を正式発表。
SPIR-V中間言語によるVulkan API (OpenGL Next Generation, glNext) とのプログラミング基盤共通化など。2015年3月3日の暫定仕様の発表時点でカーネル記述言語へのC++14サブセット導入も予定されていたが、OpenCL 2.1正式仕様の発表とともに、OpenCL C++のリリースは早くて2016年半ばとアナウンスされた。
2017年5月16日、OpenCL 2.2を正式発表。2016年4月18日の暫定仕様の発表時点でアナウンスされていた、OpenCL C++言語、SYCL 2.2フレームワークに加えて、中間表現SPIR-V 1.2などが導入された。
OpenCLのように異種プロセッサをバックエンドとして活用するAPIは、GPGPU黎明期のものや、GPU専用のもの、特定のベンダー専用のもの、そして仕様が標準化されていないものまで含めると多数存在する。OpenCLを使用したクライアント プログラムを開発するための代表的なソフトウェア開発キット（SDK）として、主に各ハードウェア ベンダーから下記のSDKが提供されている。
各SDKには、標準OpenCL API用のC/C++言語用ヘッダーなどのほか、ベンダーごとに拡張された機能を使うためのライブラリなども含まれるため、ハードウェア ベンダーやOSに依存しないOpenCLプログラムを開発する場合は注意が必要となる。
OpenCLのプログラムは、GLSLを利用したOpenGLプログラムとほぼ同じ要領で開発することができ、CUDAプログラムのような専用オフライン コンパイラ（nvcc）を必要としないため、様々なプラットフォームへの展開が容易となることが利点である。ただし初回の実行時コンパイル（オンライン コンパイル）に時間がかかるなどのデメリットも存在する。この点に関しては、実運用時にはclCreateProgramWithSource()関数によるオンライン コンパイルは行なわず、clGetProgramInfo()関数とclCreateProgramWithBinary()関数を用いてコンパイル済みバイナリからプログラムオブジェクトを生成する方法もある （ただしベンダーごとのOpenCLバイナリ間における互換性は保証されない）。なお、OpenCL 1.2、2.0、2.1では、およびSPIR-Vと呼ばれる中間表現（中間言語、バイトコード）をサポートすることにより、ベンダーに依存しないカーネルコードをコンパイル・実行することができるようになる。ただし、SPIR 1.2およびSPIR 2.0はOpenCL 1.2およびOpenCL 2.0の拡張機能（cl_khr_spir）となっており、サポート必須の機能ではない。一方、SPIR-VはOpenCL 2.1のコア機能となる。
OpenCL対応のプロファイラーが各社からリリースされている。従来の非並列プログラムと比較するとOpenCLプログラムはデバッグやチューニングが難しく、プロファイラーは性能ボトルネックの特定やコード改善に有効なツールである。
Khronosが公開しているOpenCL APIはC/C++言語向けのヘッダーおよびC++言語用ラッパークラスのヘッダー（cl.hpp）のみだが、各種言語用にラッパーライブラリがオープンソースコミュニティなどによって開発されている。
画像処理/映像処理においては、OpenCLもしくはCUDAによるGPGPU対応が進んでいる。また、3DCGの物理演算およびレンダリングも同様である。。