OpenCL

OpenCL（オープンシーエル、）は、マルチコアCPUやGPU、Cellプロセッサ、DSPなどによる異種混在の計算資源（ヘテロジニアス環境、ヘテロジニアス・コンピューティング、）を利用した並列コンピューティングのためのクロスプラットフォームなAPIである。主な用途は科学技術計算や画像処理に代表される高性能計算のためのアプリケーションソフトウェアの高速化（ハードウェアアクセラレーション）であり、シミュレーション可視化に用いるリアルタイム3次元コンピュータグラフィックスAPIとの連携も拡張機能として標準化されている。スーパーコンピュータやサーバ、ワークステーションやパーソナルコンピュータのほか、携帯機器などでの利用も想定されており、組み込みシステム向けに必要条件を下げたOpenCL Embedded Profileが存在する。

 仕様 
OpenCLの仕様はAppleによって提案されたのち、標準化団体クロノス・グループの作業部会（旧）によって策定されている。仕様はロイヤリティフリーなオープン標準として公開されており、仕様に基づいたフレームワークの実装はサードパーティーによって行われる。ただし、実装されたフレームワークに対して許諾される商標ライセンスに必要な仕様一致性テストには、（名目上の手数料）が必要である、2008年12月。

 特徴 
OpenCLには次のような特徴がある。

 CPU（CL_DEVICE_TYPE_CPU）、GPU（CL_DEVICE_TYPE_GPU）、およびCell/FPGA/Xeon PhiThe OpenCL* Platform on Intel(R) Processorsなど（CL_DEVICE_TYPE_ACCELERATOR）の各種計算資源のサポート
 C言語（ISO C99規格）をベースにしたOpenCL C、あるいはC++言語（ISO C++14規格）をベースにしたOpenCL C++プログラミング言語によるカーネル記述
 組み込みのベクトル型およびベクトル演算のサポート（float2型、float4型などや、Swizzle演算など）
 オンラインのOpenCL Cコンパイラ
 およびSPIR-V中間表現のサポート (SPIR 1.2/2.0 for OpenCL 1.2/2.0, SPIR-V 1.0 for OpenCL 2.1)
 データ並列およびタスク並列のプログラミングモデルのサポート
 同期ポイント以外での内容の一貫性 (consistency) を保証しない、緩和型一貫性共有メモリモデル ()
 同期ポイントおよびOpenCLアトミック操作でのホスト・デバイス間のメモリ一貫性を保証する共有仮想メモリ (shared virtual memory: SVM, OpenCL 2.0)The OpenCL Specification Version: 2.0; Document Revision: 29
 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以降Other Built-in Data Types）
 OpenGLおよびOpenGL ESのバッファ、テクスチャ、レンダーバッファとの連携（cl_gl.h、OpenCL 1.0以降の拡張Khronos OpenCL Registry）
 のイメージ、ディスプレイ、同期オブジェクトとの連携（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以降の拡張）
 DirectX 9のメディアサーフェイス連携（cl_khr_dx9_media_sharing; cl_dx9_media_sharing.h、OpenCL 1.2以降の拡張）

 グラフィックスAPIとの関連性および相互運用性 
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とよく似ており、サポートされるかどうかはハードウェアデバイス次第であるAccelerating GPU computation through mixed-precision methods。また、OpenGL/Direct3Dでは浮動小数点テクスチャすなわちデータストレージのフォーマットとしてFP32形式のほかにFP16形式を選択できるが、通例GPUが得意とする演算精度は単精度であるため、シェーダープログラム中で利用できる演算精度は一般的には単精度となり、倍精度や半精度はオプション扱いとなる科学技術計算などのGPGPU用途を重視したGPUでは、ハーフレートの倍精度をサポートするものもある。モバイル用GPUや、機械学習向け機能を強化したGPUでは半精度をサポートするものもある。。

OpenCLのイメージオブジェクトをサポートするデバイス (CL_DEVICE_IMAGE_SUPPORT) では、バイリニアフィルタリングなどの高速なハードウェア機能を利用することもできるsampler_t | OpenCL 1.0 Reference Pages。

以下にOpenGL関連の拡張を列挙する。

 cl_apple_gl_sharing, cl_khr_gl_sharing: OpenCL 1.0の拡張gl_sharing | OpenCL 1.0 Reference Pages。
 cl_khr_gl_event: OpenCL 1.2の拡張cl_khr_gl_event | OpenCL 1.2 Reference Pages。
 cl_khr_egl_image, cl_khr_gl_msaa_sharing: OpenCL 2.0の拡張cl_khr_egl_image | OpenCL 2.0 Reference Pagescl_khr_gl_msaa_sharing | OpenCL 2.0 Reference Pages。

 プラットフォームとデバイス 
OpenCL実行環境であるオペレーティングシステム上には、Installable Client Driver (ICD) Loaderという仕組みにより、複数のベンダーによるOpenCL実装を混在させることができる（cl_khr_icd）OpenCL Installable Client Driver (ICD) Loader - khronos.org news。各ベンダーのOpenCL実装は「プラットフォーム」として抽象化され、OpenCL APIを通じて列挙・選択することができる。

またOpenCLはカーネルコードの実行ハードウェアを「デバイス」として抽象化する。各OpenCLプラットフォームは複数のOpenCLデバイスを持つことができ、OpenCL APIを通じて列挙・選択できる。

 プログラミングモデル 
OpenCLのプログラム（アプリケーションソフトウェア）は、GLSLを利用したOpenGLプログラムとほぼ同じ要領で開発することができ、OpenCL C/C++を利用したデバイスコード（カーネルコード）と、OpenCL APIを利用したホストコードを別々に記述するOpenCL Overview - The Khronos Group Inc。カーネルコードのコンパイルは、clCreateProgramWithSource()関数経由でデバイスドライバーが実行する。CUDAプログラムのような専用オフライン コンパイラ（nvcc）を必要としないため、様々なプラットフォームへの展開が容易となることが利点である。ただしカーネルコードの初回の実行時コンパイル（オンライン コンパイル）に時間がかかるなどのデメリットも存在する。この点に関しては、実運用時にはclCreateProgramWithSource()関数によるオンライン コンパイルは行なわず、clGetProgramInfo()関数とclCreateProgramWithBinary()関数を用いてコンパイル済みバイナリからプログラムオブジェクトを生成する方法もあるclGetProgramInfoclCreateProgramWithBinaryOpenCL meets FPGA #1 入門編 - QiitaKnowledge Base - AMDが、ベンダーごとのOpenCLバイナリ間における互換性は保証されない。デバイスドライバーにカーネル記述言語のオンラインコンパイラの役割を持たせることで、ベンダー独自の拡張を実装しやすくなるが、コンパイラ品質はデバイスドライバーの品質に左右される。

なお、OpenCL 1.2、2.0、2.1、2.2では、およびSPIR-Vと呼ばれる中間表現をサポートすることにより、事前コンパイルしたベンダーに依存しないカーネルコードを実行することができるようになるクロノス・グループ、SPIR 2.0の暫定仕様を公開 - 日刊工業新聞 Business Line - 企業発表。ただし、SPIR 1.2およびSPIR 2.0はOpenCL 1.2およびOpenCL 2.0の拡張機能（cl_khr_spircl_khr_spir）となっており、サポート必須の機能ではない。一方、SPIR-VはOpenCL 2.1/2.2のコア機能となるSPIR - The first open standard intermediate language for parallel compute and graphics。OpenCL 2.1ではSPIR-V 1.0を、OpenCL 2.2ではSPIR-V 1.0/1.1/1.2をサポートするが、OpenCL 3.0ではSPIR-Vはコア機能から外れ、サポート状況に関しては実行時の問い合わせが必要となったThe OpenCL™ SPIR-V Environment Specification。

 歴史 
2008年6月10日（日本時間）のWorldwide Developers Conference (WWDC 2008) において、Mac OS X Snow Leopard（v10.5 Leopardの次期メジャーバージョンとされる）に搭載される予定の技術の1つとして初めて発表されたアップル、Mac OS X Snow Leopardをデベロッパにプレビュー、2008年6月10日。

標準化団体クロノス・グループの2008年6月16日に発足した作業部会 において、AppleによってOpenCLの仕様草案が提案されたKhronos Launches Heterogeneous Computing Initiative、2008年6月16日。CWGはGPUとCPUのヘテロジニアス（異種混在）な計算技術のロイヤリティフリーな標準化を目的としており、発足時点では3Dlabs、AMD、Apple、ARM、Codeplay、エリクソン、フリースケール・セミコンダクタ、Graphic Remedy、IBM、、インテル、ノキア、NVIDIA、モトローラ、QNX、クアルコム、サムスン、Seaweed、テキサス・インスツルメンツ、スウェーデン・ウメオ大学が参加している。

2008年8月のSIGGRAPH 2008および同年11月の (SC08) において、仕様策定の進捗状況が発表され、同時期には名称をと改められ、新たにアクティビジョン・ブリザード、バルコ、ブロードコム、エレクトロニック・アーツ、エイチアイ、ケストレル研究所、Movidia、、TAKUMIが参加している。11月10日にはRapidMindが自社の並列コンピューティング開発環境においてOpenCLを採用すると発表したRapidMind Embraces Open Source and Standards Projects to Increase Focus on Simplifying Parallel Programming for Application Developers、2008年11月10日。

2008年12月9日のSIGGRAPH Asia 2008において、正式版となるOpenCL 1.0の仕様が発表されたThe Khronos Group Releases OpenCL 1.0 Specification。またほぼ同時期に、AMDとNVIDIAはそれぞれ自社のGPGPU技術であるATI StreamおよびCUDAにおいてOpenCL 1.0をサポートすると発表したAMD Adopts OpenCL™ 1.0 Specification Ratified Today by The Khronos™ Group, Reaffirms Commitment to Open Standards for CPU+GPU Compute、2008年12月8日NVIDIA Adds OpenCL To Its Industry Leading GPU Computing Toolkit、2008年12月9日。OpenCL 1.0対応の最初のプラットフォームとして、Mac OS X Snow Leopardが2009年8月28日にリリースされた。

2010年6月14日、OpenCL 1.1を正式発表Khronos Drives Momentum of Parallel Computing Standard with Release of OpenCL 1.1 Specification - Khronos Group Press Release。float3型の追加、clSetKernelArg()関数以外のスレッドセーフ化clSetKernelArgなど。

2011年11月15日、OpenCL 1.2を正式発表Khronos Releases OpenCL 1.2 Specification - Khronos Group Press Release。分割コンパイル＆リンク対応、SubDeviceの追加、SPIR 1.2拡張機能、3Dイメージの書き込み拡張機能write_image (3D)など。

2013年7月22日、OpenCL 2.0を正式発表Khronos Releases OpenCL 2.0 - Khronos Group Press Release。read_write修飾子Access Qualifiers: read_writeはCUDA SurfaceやDirectCompute RWTextureといったDirectX 11世代の機能に相当する。、共有仮想メモリ (Shared Virtual Memory) や動的並列処理 (Dynamic Parallelism) 対応など。

2015年11月16日、OpenCL 2.1を正式発表Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming - Khronos Group Press Release。SPIR-V中間言語によるVulkan API (OpenGL Next Generation, glNext) とのプログラミング基盤共通化など。2015年3月3日の暫定仕様の発表時点でカーネル記述言語へのC++14サブセット導入も予定されていたKhronos Releases OpenCL 2.1 Provisional Specification for Public Review - Khronos Group Press Releaseが、OpenCL 2.1正式仕様の発表とともに、OpenCL C++のリリースは早くて2016年半ばとアナウンスされた。

2017年5月16日、OpenCL 2.2を正式発表Khronos Releases OpenCL 2.2 With SPIR-V 1.2 - Khronos Group Press Release。2016年4月18日の暫定仕様の発表時点でアナウンスされていた、OpenCL C++言語、SYCL 2.2フレームワークKhronos Releases OpenCL 2.2 Provisional Specification with OpenCL C++ Kernel Language - Khronos Group Press Releaseに加えて、中間表現SPIR-V 1.2などが導入された。

2018年6月、AppleはWWDCで、macOS Mojave以降ではOpenCLを非推奨とすることを発表し、代替としてMetalを使うことを推奨している。

2020年4月27日、OpenCL 3.0暫定仕様が公開されたKhronos Group Releases OpenCL 3.0。OpenCLロードマップの再調整に伴い、バージョン1.2より後発の機能がオプションに引き下げられる。オプションの言語機能を照会するためのマクロが提供される予定。

2020年9月30日、OpenCL 3.0最終仕様が公開されたOpenCL 3.0 Specification Finalized and Initial Khronos Open Source OpenCL SDK Released。

 SYCL 

SYCLはKhronos Groupが策定している、標準C++を使って「単一ソース」でヘテロジニアスプロセッサ向けのコードを記述することを可能にする抽象化レイヤーであるSYCL Overview - The Khronos Group IncThe Khronos Group Releases Finalized SYCL 1.2.1 - The Khronos Group Inc。従来はOpenCL C/C++により記述したカーネル（デバイスコード）のコンパイルやロードを、OpenCL APIを使って実行するための処理をホストコード側に逐一記述する必要があったが、SYCLを利用することで、単一の言語を使って同一ソース内に記述できるようになる。コンセプトとしては、CUDA C++やC++ AMPに似ている。SYCLの拡張としてIntelのData Parallel C++ (DPC++) も存在する。

SYCL 2020より前はOpenCL仕様の上に構築されており、GPUバックエンドもOpenCLのみを前提としていたSYCL Overview - SYCL 2020 is Here! Khronos Group 2020年。SYCL 2020以降はOpenCLを介さないバックエンドも考慮されるようになったKhronos Steps Towards Widespread Deployment of SYCL with Release of SYCL 2020 Provisional Specification Khronos Group 2020年6月30日。

SYCLの実装には以下が存在する:
 Intel oneAPI DPC++ CompilerIntel、新プログラミング言語「Data Parallel C++」β版公開 マイナビ 2019年11月21日 Data Parallel C++: Programming Accelerated Systems Using C++ and SYCL, Springer, OpenAccess (2023年)
 オープンソース。LLVMの派生でありIntel's Initial Open-Source, LLVM-Based SYCL Compiler Is Now Available Phoronix 2019年1月28日上流にマージ予定となっているIntel Continues Working On Their SYCL Compiler For Upstreaming To LLVM Phoronix 2019年4月29日。
 バックエンドはCPUおよびOpenCL+SPIR-V。またCodeplayによりCUDA+PTXバックエンドも追加されたCodeplay Brings SYCL, Intel DPC++ To NVIDIA GPUs Phoronix 2020年2月3日。
 hipSYCLhipSYCL Gets New Compilation Toolchain For Taking SYCL Directly To CUDA & ROCm Phoronix 2019年5月14日
 オープンソース。バックエンドにはOpenMP (CPU向け)、HIP/ROCm (AMD GPU向け)、CUDA (NVIDIA GPU向け) がある。またIntel GPUに向けてSYCLバックエンドも追加予定となっているhipSYCL Sees Work-In-Progress Support For Intel oneAPI Level Zero Backend Phoronix 2021年3月5日。
 ComputeCpp ()Codeplay Outs SYCL-Based ComputeCpp 1.0, Running Parallel C++ Code On Multiple Platforms Phoronix 2018年8月23日
 プロプライエタリ。

またXilinxの管理するtriSYCLも存在したKhronos Group SYCL standard - triSYCL Open Source Implementation P.17 Xilinx 2016年が不完全なため非推奨となっておりUpdate project status in README triSYCL project 2020年7月3日、代わりにIntelのLLVM実装に基づいたXilinxバックエンド実装triSYCL/sycl: Experimental fusion of triSYCL with Intel SYCL upstreaming effort into Clang/LLVMが開発されている。その他、オープンソースの簡易実装のsycl-gtxもあった。

 関連技術 

 SASS
 NVIDIAのGPUで使われるハードウェア依存の低級アセンブリ言語PTX and SASS Assembly Debugging NVIDIA。NVIDIA Nsight開発環境がSASSレベルでのデバッグに対応している。SASSのアセンブラは、asfermiKernelet: High-Throughput GPU Kernel Executions with Dynamic Slicing and Scheduling ( arXiv:1303.5164v1 [cs.DC] ) Jianlong Zhong, Bingsheng HeやMaxAsmaxas - Getting Started Nervana Systemsなどがある。SASS言語で書かれた例としては、NervanaGPUがあるMaxAs Nervana Systemsnervanagpu/nervanagpu/kernels/sass at master · NervanaSystems/nervanagpu · GitHub Nervana Systems。
 PTX (Parallel Thread Execution)
 NVIDIAのGPU向けのハードウェア非依存な擬似アセンブリ言語NVIDIA Compute - PTX: Parallel Thread Execution NVIDIA。PTXのアセンブラは、ptxasがある。asm文によって、CUDAやOpenCLのコードにPTXのコードを埋め込むことも可能Inline PTX Assembly in CUDA NVIDIANVIDIA OpenCL SDK Code Samples NVIDIA。
 LLVM/ClangにはOpenCLのフロントエンドClang 3.0 Release Notes LLVM ProjectおよびPTXのバックエンドUser Guide for NVPTX Back-end LLVM Projectが含まれており、OpenCLからLLVM IRを通してPTXへと変換し、CUDA Driver APIで実行したり、ptxasでSASSへと変換することが可能User Guide for NVPTX Back-end - Running the Kernel LLVM Project。
 AMD Intermediate Language (AMD IL)
 AMDのGPU向けのハードウェア非依存な擬似アセンブリ言語。コンパイルは、CAL (Compute Abstraction Layer) APIのcalclCompile関数で行なうAMD CAL Programming Guide。。なおAMD ILのサブセットはローレベルグラフィックスAPIであるMantleでも利用されていたMantle Programming Guide and API Reference; Revision 1.0; March 6, 2015 p.93 AMD 2015年。
 AMD Instruction Set Architecture (AMD ISA)
 AMDのGPUで使われるハードウェア依存の低級アセンブリ言語。LLVMが(VLIW4/5) およびGCNアーキテクチャに対応するR600バックエンドを持っておりLLVM 3.3 Release Notes LLVM ProjectA Detailed Look at the R600 Backend AMD、LLVM/ClangでOpenCLからAMD ISAアセンブリへと変換したり、AMD ISAアセンブリからllvm-asでバイナリ化したりすることが可能。アセンブルしたバイナリはOpenCL APIのclCreateProgramWithBinary関数で実行する。
 Intel GEN Assembly 
 Intelの内蔵GPU用のアセンブリであり、OpenCLコードのデバッグに使われているIntroduction to GEN Assembly Intel 2019年9月18日。Intel-gpu-tools 1.4以降にはIntelの第四世代GPU以降に向けたオープンソースのアセンブラー「intel-gen4asm」が含まれているIntel-gpu-tools 1.4 available LWN 2013年9月16日。また、SYCLの実装系の一つIntel oneAPI DPC++ Compilerは低レベルラッパーのExplicit SIMD Programming Extensionを備えているIntel oneAPI DPC++ Compiler 2020-08 Released With Explicit SIMD Extension Phoronix 2020年8月21日。
 TGSI (Tungsten Graphics Shader Infrastructure)
 オープンソースなハードウェア非依存の中間言語TGSI — Gallium 0.4 documentation。オープンソースGPUドライバーであるMesa 3D/Gallium3Dの中間表現形式として使われている。2013年現在、Gallium3D OpenCL実装のために、LLVMのTGSIバックエンドが開発中となっている。GPGPUだけでなく、グラフィックスにも対応している。
  (Standard Portable Intermediate Representation)
 クロノス・グループによって、OpenCLのために開発された中間言語。OpenCL 1.2とともにSPIR 1.2が、そしてOpenCL 2.0とともにSPIR 2.0が策定された。OpenCL 2.1およびVulkanとともに策定されるSPIR-Vでは、GPGPUだけでなく、グラフィックスにも対応しているThe first open standard intermediate language for parallel compute and graphics Khronos Group。
 HSAIL
 HSA Foundationで標準化された(HSA) 向けのハードウェア非依存な中間言語。AMDやLLVMのOpenCL実装がHSAIL中間表現形式の出力に対応している。異種コア間のスケジューリングを前提としており、グラフィックスには非対応【後藤弘茂のWeekly海外ニュース】 AMD GPUとモバイルGPUで同じプログラムを走らせるHSA構想。

 OpenCL開発環境 

OpenCLを使用したクライアント プログラムを開発するための代表的なソフトウェア開発キット（SDK）として、主に各ハードウェア ベンダーから下記のSDKが提供されている。

 NVIDIA CUDA Toolkit
 Windows, Linux, macOS用が提供されている。"CUDA Toolkit 7.5"時点でOpenCL 1.2に対応しているCUDA Toolkit 7.0以前のバージョンに含まれるのはOpenCL 1.1対応のヘッダーとライブラリのみである。また、Fermi世代以前のハードウェアではOpenCL 1.1どまりとなる。Release 349 Graphics Drivers for Windows, Version 350.12; RN-W35012-01v01 | April 13, 2015; Windows Vista / Windows 7 / Windows 8 / Windows 8.1 KeplerおよびMaxwell世代以降のGeForceはWindows用350.12ドライバーでOpenCL 1.2に正式対応している。Release 352 Quadro, NVS, Tesla, GRID, & Notebook Drivers - Version 353.06; RN-WQ35306-01_v01 | June 1, 2015; Windows 7, Windows 8, & Windows 8.1; Release Notes KeplerおよびMaxwell世代以降のQuadroおよびTeslaはWindows用353.06ドライバーでOpenCL 1.2に正式対応している。。
 かつてNVIDIAのOpenCL SDKは"NVIDIA GPU Computing SDK"に含まれていて、CUDA SDKとは独立していたが、CUDA 5.0からはCUDA Toolkitにすべて含まれるようになった。以前のバージョンのGPU Computing SDKはアーカイブとして公開されているCUDA Toolkit 4.1 - archiveCUDA Toolkit 4.2 - archive。
 AMD APP SDK
 AMD Stream SDKの後継。Windows, Linux用が提供されていた。AMD APP SDK 3.0の時点でOpenCL 2.0、 1.2に対応していたAMD's APP SDK 3.0 Beta with OpenCL 2.0 supportAMD APP SDK v3.0 Beta Developer Release NotesAMD OpenCL™ 2.0 Driver AMD OpenCL 2.0ドライバーはGCN第1世代以降のAMDグラフィックス製品と互換性がある。。のGitHubサイトにて必要最低限の軽量なOCL-SDK (OCL_SDK_Light) が公開されているGPUOpen-LibrariesAndSDKs/OCL-SDKOpenCL SDK | Communityが、2017年を最後に更新されていない。
 Intel SDK for OpenCL Applications
 Windows および Linux 用が提供されている。開発ツールの OpenCL Tools もある。OpenCL 2.0、 1.2をサポートしているIntel® OpenCL™ Code Builder | Intel® Developer ZoneOpenCL* 2.0 の不均等なワークグループ | iSUS Broadwell世代以降のIntel CoreシリーズはOpenCL 2.0に対応している。。IntelのICDと対応ハードウェアを搭載するAndroid環境でもOpenCLを利用することができるInstallable Client Driver on Android* OSインテル® SDK for OpenCL* Applications よくある問い合わせ | iSUSGet Started with Intel® SDK for OpenCL™ Applications 2019 on Linux*...Training & Code Samples for Intel® SDK for OpenCL™ ApplicationsTutorial: Getting Started with OpenCL™ on Android* OS。
 Intelの現行のOpenCL実装 (Neo) はマルチプラットフォームでオープンソースとなっているcompute-runtime Intel。以前はクローズドソースの古い実装 (Classic) とLLVMベースのオープンソース実装 (Beignet) の二つが存在した。また、以前は統合ツールとして Intel Integrated Native Developer Experience (Intel INDE) も提供されていたが、2018年に提供終了となったIntel® Integrated Native Developer Experience - Discontinued Intel。
 Qualcomm Adreno SDK
 Snapdragon 向け
 ARM Mali OpenCL SDK
 ARM を採用したSoC向けだった。SDK v1.1時点でOpenCL 1.1に対応していた。ARM Compute Libraryに置き換えられた。
 Imagination PowerVR SDK
 iPhone 7 以前などで使われている PowerVR 向け
 IBM OpenCL SDK
 PowerPC 上の Linux に向けたもの。Cell Broadband Engine (Cell/B.E.) にも対応していたOpenCL Development Kit for Linux on Power IBM 2009年10月30日『Languages and Compilers for Parallel Computing - 23rd International Workshop, LCPC 2010, Houston, TX, USA, October 7-9, 2010. Revised Selected Papers』 P.220 Keith Cooper, John Mellor-Crummey, Vivek Sarkar ISBN 978-3642195952。
 OpenCL for macOS
 macOSの標準機能としてOpenCLをサポートしているインテル® SDK for OpenCL Applications 2013 よくある問い合わせ | iSUS。OpenCL 1.2までをサポートするが、対応バージョンはハードウェアにもよるOpenGL および OpenCL グラフィックスを扱う Mac コンピュータ - Apple サポート。macOS Mojave以降では非推奨である。
 Intel FPGA SDK for OpenCL
 旧Altera SDK for OpenCL。FPGA上で動作するOpenCLプログラムを開発することができる。x86プロセッサ対応のエミュレータも提供されている。
 Xilinx Vitis
 FPGA上で動作するOpenCLプログラムを開発することができる。
 なお古い開発環境としてXilinx SDAccelも存在したが2019.2を最後にVitisへと統合されたレガシ ツール XilinxSDAccel 開発環境 Xilinx。
 LLVM/Clang
 OpenCL C 2.0までのカーネルソースコードのコンパイルに対応しているOpenCL Features The Clang Team。Clang 14以降はSPIR-Vの生成にも対応している。
 以前はSPIR-V出力に対応しておらず、"LLVM/SPIR-V Bi-Directional Translator"KhronosGroup/SPIRV-LLVM-Translator: A tool and a library for bi-directional translation between SPIR-V and LLVM IRや"LLVM-SPIRV-Backend"KhronosGroup/LLVM-SPIRV-Backend: An LLVM backend generating SPIR-V binary.が必要だった。
 clspv (Google)
 OpenCL CのサブセットをVulkanのコンピュートシェーダーとして実行できるようにするためのコンパイラ。
 OpenCLを正式サポートしていないAndroidにおいてOpenCLアプリケーションの移植を促進するために開発が始まった［GTC 2018］Khronosが語る「Vulkan 1.1」。VR＆AR向けAPI「OpenXR」の最新動向も。clspvはいくつかのAndroidアプリケーションにて利用されている2021 Japan Open House - The Khronos Group IncOpenCL-Overview-Jan21-JP.pdf。
 ANGLE (Google)
 各種バックエンドによるOpenGL ES互換実装を提供するでは、Vulkanバックエンドとclspvを利用したOpenCLの実装も進行中であるGitHub - google/angle: A conformant OpenGL ES implementation for Windows, Mac, Linux, iOS and Android.。
 OpenCLOn12 (Microsoft)
 Direct3D 12上に実装されたOpenCL 1.2 APIの互換レイヤー。
 Mesa
 Mesa 3Dライブラリは、OpenCLのオープンソース実装を含んでいるHome — The Mesa 3D Graphics Library。ただしクロノスによる適合試験を通過して正式な認証を受けているわけではない。

各SDKには、標準OpenCL API用のC/C++言語用ヘッダーなどのほか、ベンダーごとに拡張された機能を使うためのライブラリなども含まれるため、ハードウェア ベンダーやOSに依存しないOpenCLプログラムを開発する場合は注意が必要となる。

 OpenCLプロファイラー 
OpenCL対応のプロファイラーが各社からリリースされている。従来の非並列プログラムと比較するとOpenCLプログラムはデバッグやチューニングが難しく、プロファイラーは性能ボトルネックの特定やコード改善に有効なツールである。

 Intel VTune Amplifier（有償）
 マルチコアCPU対応のプロファイラーだが、OpenCLIntel® VTune™ Amplifier XE: Getting started with OpenCL* performance analysis on Intel® HD Graphics | Intel® Developer Zoneのほか、DirectXにも対応しているインテル® VTune™ Amplifier XE | iSUS。
 AMD CodeXL（無償）
 CPU/GPUのデバッギング／プロファイリング用ツール。OpenCLのほか、OpenGLやDirect3D (DirectCompute) 開発にも使用できるCodeXL for game developers: How to analyze your HLSL for GCN - AMD。GPUOpenに移管されたが、開発終了GPUOpen-Archive/CodeXL: CodeXL is a comprehensive tool suite that enables developers to harness the benefits of CPUs, GPUs and APUs.。
 Radeon GPU Profiler（無償）
 AMD Radeon GPU用のプロファイラーRadeon™ GPU Profiler - AMD GPUOpen。DirectX 12/Vulkan/OpenCL/HIPに対応している。
 NVIDIA Nsight（無償）
 OpenCLのほか、CUDA、Direct3D (DirectCompute)、およびOpenGLに対応しているNVIDIA Nsight Visual Studio Edition。

 OpenCLシミュレータ／エミュレータ 
 GPGPU-Sim（無償）
 GPUのサイクルレベルシミュレータ。CUDAおよびOpenCLに対応している。Linux専用であり、また実行にはNVIDIAドライバーが必要となるgpgpu-sim/gpgpu-sim_distribution · GitHub。
 AMD OpenCL Emulator-Debugger (ocl-emu)（無償）
 AMDによるOpenCLソフトウェアエミュレータのオープンソース実装OpenCL™ Emulator-Debugger - AMD, Internet Archive。2012年10月12日版において、OpenCL 1.2に対応しているocl-emu | Google Code Archive - Long-term storage for Google Code Project Hosting.。対応OSはMicrosoft Windows XP以降で、ビルドにMicrosoft Visual Studio 2008/2010を必要とし、また実行プラットフォームとしてAMD Accelerated Parallel Processing (AMD APP) SDKを必要とするOpenCL Emu Documentation。開発終了。

 ラッパー 

Khronos自身が正式に公開しているOpenCL APIはC/C++言語向けのヘッダーおよびC++言語用ラッパークラスのヘッダー（cl.hppおよびcl2.hppKhronosGroup/OpenCL-CLHPP: Khronos OpenCL-CLHPPOpenCL C++ Bindings: Main Page）のみだが、各種言語用に下位レベルの言語バインディングや上位レベルのラッパーライブラリがオープンソースコミュニティなどによって開発されている。

 C++
 Bolt C++ Template Library
 Boost.Compute
 VexCL
 C++ AMP - 並列計算向けのC++言語拡張。マイクロソフトによるDirectComputeをバックエンドとした実装がある。AMDによるOpenCLをバックエンドとした実装もあったが開発を終了している。
C#

  (The Open Toolkit library)opentk/opentk: The Open Toolkit library is a fast, low-level C# wrapper for OpenGL, OpenAL & OpenCL. It also includes windowing, mouse, keyboard and joystick input and a robust and fast math library, giving you everything you need to write your own renderer or game engine. OpenTK can be used standalone or inside a GUI on Windows, Linux, Mac.
D言語
 cl4d 
 ECMAScript (JavaScript)
 WebCL
 node-webcl
 Nokia (Firefox) - http://webcl.nokiaresearch.com/ 
 Samsung (WebKit) - https://github.com/SRA-SiliconValley/webkit-webcl 
 River Trail (2016年以降、開発終了)
 Java
 Aparapi
 JogAmp - OpenCL, OpenGL, OpenAL, OpenMAX の Java ラッパー
 LWJGL - OpenCL, OpenGL, OpenAL などの Java ラッパー
 LISP系
 Harlan
 Python
 PyOpenCL

 Ruby
 Ruby-OpenCL

 ベンチマーク 

 LuxMark - 定番のレンダリングベンチマーク。
 x264 OpenCL - Phoronix Test Suiteに含まれるベンチマークの一つ。
 CompuBench CL
 Rodinia Benchmark Suite - 多種のベンチマークがある。
 OpenDwarfs
 Parboil Benchmarks
 PolyBench/GPU
 SHOC benchmark suite

 採用事例 

画像処理/映像処理においては、OpenCLもしくはCUDAによるGPGPU対応が進んでいる。また、3DCGの物理演算およびレンダリングも同様である。。
 Adobe Premiere Pro CS6 CUDA/OpenCL/Mercury Playback Engine について（Adobe Premiere Pro）
 Adobe Photoshop CC Photoshop CC および CC 2014 GPU FAQ
 Blender Dev:2.6/Source/Render/Cycles/OpenCL - BlenderWiki
 LuxRender
 V-Ray V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.V-Ray RT and GPU renderingGPUレイトレーシング | NVIDIA
 OpenCV - OpenCV 2.4.3OpenCV 2.2 Released - ROS robotics newsでOpenCLを使ったアクセラレータoclモジュールが追加された。
 アルテラ オプティカルフロー - 車載FPGAを利用した物体検知システムアルテラ、国際カーエレクトロクス技術展（カーエレJAPAN）に出展オートモーティブワールド2015 開催直前情報：アルテラが披露するFPGAを活用した“今すぐ使える”車載向けソリューション - MONOist（モノイスト）。
 OpenSubdiv PixarAnimationStudios/OpenSubdiv · GitHub
 ImageMagick
 FFmpeg FFmpeg 2.0 Released With OpenCL, Many Changes Phoronix 2013年7月10日 - 一部のフィルタのみ。
 x264 Trying Intel OpenCL On Linux For Video Encoding Phoronix 2014年9月2日 - lookahead処理にOpenCLを使うことができる。
 Bullet 3.x


 macOSでの非推奨化 
2018年6月5日、AppleはWWDC 2018でOpenGL/OpenCLの非推奨化を発表し、macOS Mojaveにおいて（サポートはまだ打ち切られないものの）OpenGL/OpenCLは非推奨APIとなった。macOSがネイティブにサポートするOpenCLのバージョンは1.2が最後となっている。

OpenCLの代替として推奨されているAPIはMetalであり、コンピュートシェーダーをカーネルの記述に用いる。iOSではOpenCLはサポートされていないが、Metalを用いることでmacOS同様にGPGPUを実行することが可能となっている。

 関連項目 
 OpenCLアプリケーションの一覧
 ストリーム・プロセッシング
 並列コンピューティング
 高性能計算
 GPGPU
 WebCL
 類似API
 CUDA
 DirectCompute
 C++ AMP
 OpenGL
 Vulkan (API)
 Metal (API)

 OpenMP
 OpenACC
 ヘテロジニアス・コンピューティング#プログラミング環境の例
 Cell Broadband Engine
 Xeon Phi
 OsiriX - Appleの支援のもと、技術公開とほぼ同時にOpenCLへ対応したDICOMビューア。

 脚注 

 外部リンク 
 Khronos Group
 OpenCL - The open standard for parallel programming of heterogeneous systems
 Khronos OpenCL Registry
 Khronos SPIR Registry
 Khronos SPIR-V Registry

Category:OpenCL計算デバイス
Category:並列コンピューティング
Category:ライブラリ (プログラミング)
Category:API
Category:macOSのソフトウェア
Category:クロスプラットフォームのソフトウェア
Category:GPGPU
Category:GPGPUライブラリー