OpenCL
表示
![]() | |
作者 | Apple |
---|---|
開発元 | Khronos Group |
最新版 | |
対応OS | クロスプラットフォーム |
種別 | API |
ライセンス | ロイヤリティフリー |
公式サイト |
www www |
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および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)[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以降の拡張︶
●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プラットフォーム専用︶との相互運用性︵Interoperability︶が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とよく似ており、サポートされるかどうかはハードウェアデバイス次第である[9]。また、OpenGL/Direct3Dでは浮動小数点テクスチャすなわちデータストレージのフォーマットとしてFP32形式のほかにFP16形式を選択できるが、通例GPUが得意とする演算精度は単精度であるため、シェーダープログラム中で利用できる演算精度は一般的には単精度となり、倍精度や半精度はオプション扱いとなる[10]。
OpenCLのイメージオブジェクトをサポートするデバイス (CL_DEVICE_IMAGE_SUPPORT) では、バイリニアフィルタリングなどの高速なハードウェア機能を利用することもできる[11]。
以下にOpenGL関連の拡張を列挙する。
●cl_apple_gl_sharing, cl_khr_gl_sharing: OpenCL 1.0の拡張[12]。
●cl_khr_gl_event: OpenCL 1.2の拡張[13]。
●cl_khr_egl_image, cl_khr_gl_msaa_sharing: OpenCL 2.0の拡張[14][15]。
プラットフォームとデバイス
[編集]OpenCL実行環境であるオペレーティングシステム上には、Installable Client Driver (ICD) Loaderという仕組みにより、複数のベンダーによるOpenCL実装を混在させることができる(cl_khr_icd)[16]。各ベンダーのOpenCL実装は「プラットフォーム」として抽象化され、OpenCL APIを通じて列挙・選択することができる。
またOpenCLはカーネルコードの実行ハードウェアを「デバイス」として抽象化する。各OpenCLプラットフォームは複数のOpenCLデバイスを持つことができ、OpenCL APIを通じて列挙・選択できる。
プログラミングモデル
[編集]
OpenCLのプログラム︵アプリケーションソフトウェア︶は、GLSLを利用したOpenGLプログラムとほぼ同じ要領で開発することができ、OpenCL C/C++を利用したデバイスコード︵カーネルコード︶と、OpenCL APIを利用したホストコードを別々に記述する[17]。カーネルコードのコンパイルは、clCreateProgramWithSource()関数経由でデバイスドライバーが実行する。CUDAプログラムのような専用オフライン コンパイラ︵nvcc︶を必要としないため、様々なプラットフォームへの展開が容易となることが利点である。ただしカーネルコードの初回の実行時コンパイル︵オンライン コンパイル︶に時間がかかるなどのデメリットも存在する。この点に関しては、実運用時にはclCreateProgramWithSource()関数によるオンライン コンパイルは行なわず、clGetProgramInfo()関数とclCreateProgramWithBinary()関数を用いてコンパイル済みバイナリからプログラムオブジェクトを生成する方法もある[18][19][20][21]が、ベンダーごとのOpenCLバイナリ間における互換性は保証されない。デバイスドライバーにカーネル記述言語のオンラインコンパイラの役割を持たせることで、ベンダー独自の拡張を実装しやすくなるが、コンパイラ品質はデバイスドライバーの品質に左右される。
なお、OpenCL 1.2、2.0、2.1、2.2では、SPIRおよびSPIR-Vと呼ばれる中間表現︵中間言語、バイトコード︶をサポートすることにより、事前コンパイルしたベンダーに依存しないカーネルコードを実行することができるようになる[22]。ただし、SPIR 1.2およびSPIR 2.0はOpenCL 1.2およびOpenCL 2.0の拡張機能︵cl_khr_spir[23]︶となっており、サポート必須の機能ではない。一方、SPIR-VはOpenCL 2.1/2.2のコア機能となる[24]。OpenCL 2.1ではSPIR-V 1.0を、OpenCL 2.2ではSPIR-V 1.0/1.1/1.2をサポートするが、OpenCL 3.0ではSPIR-Vはコア機能から外れ、サポート状況に関しては実行時の問い合わせが必要となった[25]。
歴史
[編集]
2008年6月10日︵日本時間︶のWorldwide Developers Conference (WWDC 2008) において、Mac OS X Snow Leopard︵v10.5 Leopardの次期メジャーバージョンとされる︶に搭載される予定の技術の1つとして初めて発表された[26]。
標準化団体クロノス・グループの2008年6月16日に発足した作業部会Compute Working Group (CWG) において、AppleによってOpenCLの仕様草案が提案された[3]。CWGはGPUとCPUのヘテロジニアス︵異種混在︶な計算技術のロイヤリティフリーな標準化を目的としており、発足時点では3Dlabs、AMD、Apple、ARM、Codeplay、エリクソン、フリースケール・セミコンダクタ、Graphic Remedy、IBM、イマジネーション・テクノロジーズ、インテル、ノキア、NVIDIA、モトローラ、QNX、クアルコム、サムスン、Seaweed、テキサス・インスツルメンツ、スウェーデン・ウメオ大学が参加している。
2008年8月のSIGGRAPH 2008および同年11月のSupercomputing 2008 (SC08) において、仕様策定の進捗状況が発表され、同時期にCompute Working Groupは名称をOpenCL Working Groupと改められ、新たにアクティビジョン・ブリザード、バルコ、ブロードコム、エレクトロニック・アーツ、エイチアイ、ケストレル研究所、Movidia、RapidMind、TAKUMIが参加している。11月10日にはRapidMindが自社の並列コンピューティング開発環境においてOpenCLを採用すると発表した[27]。
2008年12月9日のSIGGRAPH Asia 2008において、正式版となるOpenCL 1.0の仕様が発表された[28]。またほぼ同時期に、AMDとNVIDIAはそれぞれ自社のGPGPU技術であるATI StreamおよびCUDAにおいてOpenCL 1.0をサポートすると発表した[29][30]。OpenCL 1.0対応の最初のプラットフォームとして、Mac OS X Snow Leopardが2009年8月28日にリリースされた。
2010年6月14日、OpenCL 1.1を正式発表[31]。float3型の追加、clSetKernelArg()関数以外のスレッドセーフ化[32]など。
2011年11月15日、OpenCL 1.2を正式発表[33]。分割コンパイル&リンク対応、SubDeviceの追加、SPIR 1.2拡張機能、3Dイメージの書き込み拡張機能[34]など。
2013年7月22日、OpenCL 2.0を正式発表[35]。read_write修飾子[36]、共有仮想メモリ (Shared Virtual Memory) や動的並列処理 (Dynamic Parallelism) 対応など。
2015年11月16日、OpenCL 2.1を正式発表[37]。SPIR-V中間言語によるVulkan API (OpenGL Next Generation, glNext) とのプログラミング基盤共通化など。2015年3月3日の暫定仕様の発表時点でカーネル記述言語へのC++14サブセット導入も予定されていた[38]が、OpenCL 2.1正式仕様の発表とともに、OpenCL C++のリリースは早くて2016年半ばとアナウンスされた。
2017年5月16日、OpenCL 2.2を正式発表[39]。2016年4月18日の暫定仕様の発表時点でアナウンスされていた、OpenCL C++言語、SYCL 2.2フレームワーク[40]に加えて、中間表現SPIR-V 1.2などが導入された。
2018年6月、AppleはWWDCで、macOS Mojave以降ではOpenCLを非推奨とすることを発表し、代替としてMetalを使うことを推奨している[41][42]。
2020年4月27日、OpenCL 3.0暫定仕様が公開された[43]。OpenCLロードマップの再調整に伴い、バージョン1.2より後発の機能がオプションに引き下げられる。オプションの言語機能を照会するためのマクロが提供される予定。
2020年9月30日、OpenCL 3.0最終仕様が公開された[44]。
SYCL
[編集]![]() | この節の加筆が望まれています。 |
SYCLはKhronos Groupが策定している、標準C++を使って﹁単一ソース﹂でヘテロジニアスプロセッサ向けのコードを記述することを可能にする抽象化レイヤーである[45][46]。従来はOpenCL C/C++により記述したカーネル︵デバイスコード︶のコンパイルやロードを、OpenCL APIを使って実行するための処理をホストコード側に逐一記述する必要があったが、SYCLを利用することで、単一の言語を使って同一ソース内に記述できるようになる。コンセプトとしては、CUDA C++やC++ AMPに似ている。SYCLの拡張としてIntelのData Parallel C++ (DPC++) も存在する。
SYCL 2020より前はOpenCL仕様の上に構築されており、GPUバックエンドもOpenCLのみを前提としていた[47]。SYCL 2020以降はOpenCLを介さないバックエンドも考慮されるようになった[47][48]。
SYCLの実装には以下が存在する:
Intel oneAPI DPC++ Compiler[49]
オープンソース。LLVMの派生であり[50]上流にマージ予定となっている[51]。
バックエンドはCPUおよびOpenCL+SPIR-V。またCodeplayによりCUDA+PTXバックエンドも追加された[52]。
hipSYCL[53]
オープンソース。バックエンドにはOpenMP (CPU向け)、HIP/ROCm (AMD GPU向け)、CUDA (NVIDIA GPU向け) がある[54]。またIntel GPUに向けてSYCLバックエンドも追加予定となっている[54]。
ComputeCpp (Codeplay)[55][56]
プロプライエタリ。
またXilinxの管理するtriSYCLも存在した[55]が不完全なため非推奨となっており[57]、代わりにIntelのLLVM実装に基づいたXilinxバックエンド実装[58]が開発されている。その他、オープンソースの簡易実装のsycl-gtxもあった[55]。
関連技術
[編集]![]() | この節に雑多な内容が羅列されています。 |
![]() | ウィキペディアはオンライン百科事典であって、情報を無差別に収集する場ではありません。 |
SASS
NVIDIAのGPUで使われるハードウェア依存の低級アセンブリ言語[59]。NVIDIA Nsight開発環境がSASSレベルでのデバッグに対応している[59]。SASSのアセンブラは、asfermi[60]やMaxAs[61]などがある。SASS言語で書かれた例としては、NervanaGPUがある[62][63]。
PTX (Parallel Thread Execution)
NVIDIAのGPU向けのハードウェア非依存な擬似アセンブリ言語[64]。PTXのアセンブラは、ptxasがある[64]。asm文によって、CUDAやOpenCLのコードにPTXのコードを埋め込むことも可能[65][66]。
LLVM/ClangにはOpenCLのフロントエンド[67]およびPTXのバックエンド[68]が含まれており、OpenCLからLLVM IRを通してPTXへと変換し、CUDA Driver APIで実行したり[69]、ptxasでSASSへと変換することが可能[69]。
AMD Intermediate Language (AMD IL)
AMDのGPU向けのハードウェア非依存な擬似アセンブリ言語[70]。コンパイルは、CAL (Compute Abstraction Layer) APIのcalclCompile関数で行なう[71]。asm文によって、OpenCLのコードにAMD ILのコードを埋め込むことも可能[要出典]。なおAMD ILのサブセットはローレベルグラフィックスAPIであるMantleでも利用されていた[72]。
AMD Instruction Set Architecture (AMD ISA)
AMDのGPUで使われるハードウェア依存の低級アセンブリ言語。LLVMがTeraScale(VLIW4/5) およびGCNアーキテクチャに対応するR600バックエンドを持っており[73][74]、LLVM/ClangでOpenCLからAMD ISAアセンブリへと変換したり、AMD ISAアセンブリからllvm-asでバイナリ化したりすることが可能。アセンブルしたバイナリはOpenCL APIのclCreateProgramWithBinary関数で実行する。
Intel GEN Assembly
Intelの内蔵GPU用のアセンブリであり、OpenCLコードのデバッグに使われている[75]。Intel-gpu-tools 1.4以降にはIntelの第四世代GPU以降に向けたオープンソースのアセンブラー﹁intel-gen4asm﹂が含まれている[76]。また、SYCLの実装系の一つIntel oneAPI DPC++ Compilerは低レベルラッパーのExplicit SIMD Programming Extensionを備えている[77]。
TGSI (Tungsten Graphics Shader Infrastructure)
オープンソースなハードウェア非依存の中間言語[78]。オープンソースGPUドライバーであるMesa 3D/Gallium3Dの中間表現形式として使われている。2013年現在、Gallium3D OpenCL実装のために、LLVMのTGSIバックエンドが開発中となっている[79]。GPGPUだけでなく、グラフィックスにも対応している。
SPIR (Standard Portable Intermediate Representation)
クロノス・グループによって、OpenCLのために開発された中間言語。OpenCL 1.2とともにSPIR 1.2が、そしてOpenCL 2.0とともにSPIR 2.0が策定された。OpenCL 2.1およびVulkanとともに策定されるSPIR-Vでは、GPGPUだけでなく、グラフィックスにも対応している[80]。
HSAIL
HSA Foundationで標準化されたヘテロジニアスシステムアーキテクチャ(HSA) 向けのハードウェア非依存な中間言語。AMDやLLVMのOpenCL実装がHSAIL中間表現形式の出力に対応している[81]。異種コア間のスケジューリングを前提としており、グラフィックスには非対応[82]。
OpenCL開発環境
[編集]![]() | この節に雑多な内容が羅列されています。 |
![]() | ウィキペディアはオンライン百科事典であって、情報を無差別に収集する場ではありません。 |
OpenCLを使用したクライアント プログラムを開発するための代表的なソフトウェア開発キット︵SDK︶として、主に各ハードウェア ベンダーから下記のSDKが提供されている。
NVIDIA CUDA Toolkit
Windows, Linux, macOS用が提供されている。"CUDA Toolkit 7.5"時点でOpenCL 1.2に対応している[83][84][85]。
かつてNVIDIAのOpenCL SDKは"NVIDIA GPU Computing SDK"に含まれていて、CUDA SDKとは独立していたが、CUDA 5.0からはCUDA Toolkitにすべて含まれるようになった。以前のバージョンのGPU Computing SDKはアーカイブとして公開されている[86][87]。
AMD APP SDK
AMD Stream SDKの後継。Windows, Linux用が提供されていた。AMD APP SDK 3.0の時点でOpenCL 2.0、SPIR 1.2に対応していた[88][89][90]。GPUOpenのGitHubサイトにて必要最低限の軽量なOCL-SDK (OCL_SDK_Light) が公開されている[91][92]が、2017年を最後に更新されていない。
Intel SDK for OpenCL Applications
Windows および Linux 用が提供されている。開発ツールの OpenCL Tools もある。OpenCL 2.0、SPIR 1.2をサポートしている[93][94]。IntelのICDと対応ハードウェアを搭載するAndroid環境でもOpenCLを利用することができる[95][96][97][98][99]。
Intelの現行のOpenCL実装 (Neo) はマルチプラットフォームでオープンソースとなっている[100]。以前はクローズドソースの古い実装 (Classic) とLLVMベースのオープンソース実装 (Beignet) の二つが存在した[100]。また、以前は統合ツールとして Intel Integrated Native Developer Experience (Intel INDE) も提供されていたが、2018年に提供終了となった[101]。
Qualcomm Adreno SDK
Snapdragon 向け
ARM Mali OpenCL SDK
ARM Maliを採用したSoC向けだった。SDK v1.1時点でOpenCL 1.1に対応していた。ARM Compute Libraryに置き換えられた。
Imagination PowerVR SDK
iPhone7以前などで使われている PowerVR 向け
IBM OpenCL SDK
PowerPC 上の Linux に向けたもの。Cell Broadband Engine (Cell/B.E.) にも対応していた[102][103]。
OpenCL for macOS
macOSの標準機能としてOpenCLをサポートしている[104]。OpenCL 1.2までをサポートするが、対応バージョンはハードウェアにもよる[105]。macOS Mojave以降では非推奨である。
Intel FPGA SDK for OpenCL
旧Altera SDK for OpenCL。FPGA上で動作するOpenCLプログラムを開発することができる。x86プロセッサ対応のエミュレータも提供されている。
Xilinx Vitis
FPGA上で動作するOpenCLプログラムを開発することができる。
なお古い開発環境としてXilinx SDAccelも存在したが2019.2を最後にVitisへと統合された[106][107]。
LLVM/Clang
OpenCL C 2.0までのカーネルソースコードのコンパイルに対応している[108]。Clang 14以降はSPIR-Vの生成にも対応している。
以前はSPIR-V出力に対応しておらず、"LLVM/SPIR-V Bi-Directional Translator"[109]や"LLVM-SPIRV-Backend"[110]が必要だった。
clspv (Google)
OpenCL CのサブセットをVulkanのコンピュートシェーダーとして実行できるようにするためのコンパイラ。
OpenCLを正式サポートしていないAndroidにおいてOpenCLアプリケーションの移植を促進するために開発が始まった[111]。clspvはいくつかのAndroidアプリケーションにて利用されている[112][113]。
ANGLE (Google)
各種バックエンドによるOpenGL ES互換実装を提供するANGLEでは、Vulkanバックエンドとclspvを利用したOpenCLの実装も進行中である[114]。
OpenCLOn12 (Microsoft)
Direct3D 12上に実装されたOpenCL 1.2 APIの互換レイヤー。
Mesa
Mesa 3Dライブラリは、OpenCLのオープンソース実装を含んでいる[115]。ただしクロノスによる適合試験を通過して正式な認証を受けているわけではない。
各SDKには、標準OpenCL API用のC/C++言語用ヘッダーなどのほか、ベンダーごとに拡張された機能を使うためのライブラリなども含まれるため、ハードウェア ベンダーやOSに依存しないOpenCLプログラムを開発する場合は注意が必要となる。
OpenCLプロファイラー
[編集]
OpenCL対応のプロファイラーが各社からリリースされている。従来の非並列プログラムと比較するとOpenCLプログラムはデバッグやチューニングが難しく、プロファイラーは性能ボトルネックの特定やコード改善に有効なツールである。
Intel VTune Amplifier︵有償︶
マルチコアCPU対応のプロファイラーだが、OpenCL[116]のほか、DirectXにも対応している[117]。
AMD CodeXL︵無償︶
CPU/GPUのデバッギング/プロファイリング用ツール。OpenCLのほか、OpenGLやDirect3D (DirectCompute) 開発にも使用できる[118]。GPUOpenに移管されたが、開発終了[119]。
Radeon GPU Profiler︵無償︶
AMD Radeon GPU用のプロファイラー[120]。DirectX 12/Vulkan/OpenCL/HIPに対応している。
NVIDIA Nsight︵無償︶
OpenCLのほか、CUDA、Direct3D (DirectCompute)、およびOpenGLに対応している[121]。
OpenCLシミュレータ/エミュレータ
[編集]
GPGPU-Sim︵無償︶
GPUのサイクルレベルシミュレータ。CUDAおよびOpenCLに対応している。Linux専用であり、また実行にはNVIDIAドライバーが必要となる[122]。
AMD OpenCL Emulator-Debugger (ocl-emu)︵無償︶
AMDによるOpenCLソフトウェアエミュレータのオープンソース実装[123]。2012年10月12日版において、OpenCL 1.2に対応している[124]。対応OSはMicrosoft Windows XP以降で、ビルドにMicrosoft Visual Studio 2008/2010を必要とし、また実行プラットフォームとしてAMD Accelerated Parallel Processing (AMD APP) SDKを必要とする[125]。開発終了。
ラッパー
[編集]![]() | この節に雑多な内容が羅列されています。 |
![]() | ウィキペディアはオンライン百科事典であって、情報を無差別に収集する場ではありません。 |
![]() |
Khronos自身が正式に公開しているOpenCL APIはC/C++言語向けのヘッダーおよびC++言語用ラッパークラスのヘッダー︵cl.hppおよびcl2.hpp[126][127]︶のみだが、各種言語用に下位レベルの言語バインディングや上位レベルのラッパーライブラリがオープンソースコミュニティなどによって開発されている。
●C++
●Bolt C++ Template Library
●Boost.Compute
●VexCL
●C++ AMP - 並列計算向けのC++言語拡張。マイクロソフトによるDirectComputeをバックエンドとした実装がある。AMDによるOpenCLをバックエンドとした実装もあったが開発を終了している。
●C#
●Cloo - SourceForge.net
●OpenTK (The Open Toolkit library)[128]
●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
●PyOpenCL - SourceForge.net
●Ruby
●Ruby-OpenCL
ベンチマーク
[編集]![]() |
●LuxMark - 定番のレンダリングベンチマーク。
●x264 OpenCL - Phoronix Test Suiteに含まれるベンチマークの一つ[129]。
●CompuBench CL
●Rodinia Benchmark Suite - 多種のベンチマークがある。
●OpenDwarfs
●Parboil Benchmarks
●PolyBench/GPU
●SHOC benchmark suite
採用事例
[編集]![]() |
画像処理/映像処理においては、OpenCLもしくはCUDAによるGPGPU対応が進んでいる。また、3DCGの物理演算およびレンダリングも同様である。音声処理においては、DSPによる固定小数点処理が主流のため、GPGPUはあまり使われていない[要出典]。
●Adobe Premiere Pro CS6 [130]
●Adobe PhotoshopCC[131]
●Blender [132]
●LuxRender
●V-Ray [133][134][135][136]
●OpenCV - OpenCV 2.4.3[137]でOpenCLを使ったアクセラレータoclモジュールが追加された。
●アルテラ オプティカルフロー - 車載FPGAを利用した物体検知システム[138][139]。
●OpenSubdiv [140]
●ImageMagick
●FFmpeg [141] - 一部のフィルタのみ。
●x264 [129] - lookahead処理にOpenCLを使うことができる。
●Bullet 3.x
●Tesseract
macOSでの非推奨化
[編集]
2018年6月5日、AppleはWWDC 2018でOpenGL/OpenCLの非推奨化を発表し、macOS Mojaveにおいて︵サポートはまだ打ち切られないものの︶OpenGL/OpenCLは非推奨APIとなった。macOSがネイティブにサポートするOpenCLのバージョンは1.2が最後となっている[105]。
OpenCLの代替として推奨されているAPIはMetalであり、コンピュートシェーダーをカーネルの記述に用いる。iOSではOpenCLはサポートされていないが、Metalを用いることでmacOS同様にGPGPUを実行することが可能となっている。
関連項目
[編集]- OpenCLアプリケーションの一覧
- ストリーム・プロセッシング
- 並列コンピューティング
- 高性能計算
- GPGPU
- WebCL
- 類似API
- Cell Broadband Engine
- Xeon Phi
- OsiriX - Appleの支援のもと、技術公開とほぼ同時にOpenCLへ対応したDICOMビューア。
脚注
[編集]
(一)^ The OpenCL™ Specification
(二)^ The OpenCL™ Specification (PDF)
(三)^ abKhronos Launches Heterogeneous Computing Initiative、2008年6月16日
(四)^ OpenCL Overview December 2008 (PDF) 、2008年12月
(五)^ The OpenCL* Platform on Intel(R) Processors
(六)^ The OpenCL Specification Version: 2.0; Document Revision: 29
(七)^ Other Built-in Data Types
(八)^ Khronos OpenCL Registry
(九)^ Accelerating GPU computation through mixed-precision methods
(十)^ 科学技術計算などのGPGPU用途を重視したGPUでは、ハーフレートの倍精度をサポートするものもある。モバイル用GPUや、機械学習向け機能を強化したGPUでは半精度をサポートするものもある。
(11)^ sampler_t | OpenCL 1.0 Reference Pages
(12)^ gl_sharing | OpenCL 1.0 Reference Pages
(13)^ cl_khr_gl_event | OpenCL 1.2 Reference Pages
(14)^ cl_khr_egl_image | OpenCL 2.0 Reference Pages
(15)^ cl_khr_gl_msaa_sharing | OpenCL 2.0 Reference Pages
(16)^ OpenCL Installable Client Driver (ICD) Loader - khronos.org news
(17)^ OpenCL Overview - The Khronos Group Inc
(18)^ clGetProgramInfo
(19)^ clCreateProgramWithBinary
(20)^ OpenCL meets FPGA #1 入門編 - Qiita
(21)^ Knowledge Base - AMD
(22)^ クロノス・グループ、SPIR 2.0の暫定仕様を公開 - 日刊工業新聞 Business Line - 企業発表
(23)^ cl_khr_spir
(24)^ SPIR - The first open standard intermediate language for parallel compute and graphics
(25)^ The OpenCL™ SPIR-V Environment Specification
(26)^ アップル、Mac OS X Snow Leopardをデベロッパにプレビュー、2008年6月10日
(27)^ RapidMind Embraces Open Source and Standards Projects to Increase Focus on Simplifying Parallel Programming for Application Developers、2008年11月10日
(28)^ The Khronos Group Releases OpenCL 1.0 Specification
(29)^ AMD Adopts OpenCL™ 1.0 Specification Ratified Today by The Khronos™ Group, Reaffirms Commitment to Open Standards for CPU+GPU Compute、2008年12月8日
(30)^ NVIDIA Adds OpenCL To Its Industry Leading GPU Computing Toolkit、2008年12月9日
(31)^ Khronos Drives Momentum of Parallel Computing Standard with Release of OpenCL 1.1 Specification - Khronos Group Press Release
(32)^ clSetKernelArg
(33)^ Khronos Releases OpenCL 1.2 Specification - Khronos Group Press Release
(34)^ write_image (3D)
(35)^ Khronos Releases OpenCL 2.0 - Khronos Group Press Release
(36)^ Access Qualifiers: read_writeはCUDA SurfaceやDirectCompute RWTextureといったDirectX 11世代の機能に相当する。
(37)^ Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming - Khronos Group Press Release
(38)^ Khronos Releases OpenCL 2.1 Provisional Specification for Public Review - Khronos Group Press Release
(39)^ Khronos Releases OpenCL 2.2 With SPIR-V 1.2 - Khronos Group Press Release
(40)^ Khronos Releases OpenCL 2.2 Provisional Specification with OpenCL C++ Kernel Language - Khronos Group Press Release
(41)^ “Metal for OpenGL Developers - WWDC 2018 - Videos” (英語). Apple Developer. 2020年3月18日閲覧。
(42)^ “About OpenCL for OS X”. developer.apple.com. 2020年3月18日閲覧。
(43)^ Khronos Group Releases OpenCL 3.0
(44)^ OpenCL 3.0 Specification Finalized and Initial Khronos Open Source OpenCL SDK Released
(45)^ SYCL Overview - The Khronos Group Inc
(46)^ The Khronos Group Releases Finalized SYCL 1.2.1 - The Khronos Group Inc
(47)^ abSYCL Overview - SYCL 2020 is Here! Khronos Group 2020年
(48)^ Khronos Steps Towards Widespread Deployment of SYCL with Release of SYCL 2020 Provisional Specification Khronos Group 2020年6月30日
(49)^ Intel、新プログラミング言語﹁Data Parallel C++﹂β版公開 マイナビ 2019年11月21日
(50)^ Intel's Initial Open-Source, LLVM-Based SYCL Compiler Is Now Available Phoronix 2019年1月28日
(51)^ Intel Continues Working On Their SYCL Compiler For Upstreaming To LLVM Phoronix 2019年4月29日
(52)^ Codeplay Brings SYCL, Intel DPC++ To NVIDIA GPUs Phoronix 2020年2月3日
(53)^ hipSYCL Gets New Compilation Toolchain For Taking SYCL Directly To CUDA & ROCm Phoronix 2019年5月14日
(54)^ abhipSYCL Sees Work-In-Progress Support For Intel oneAPI Level Zero Backend Phoronix 2021年3月5日
(55)^ abcKhronos Group SYCL standard - triSYCL Open Source Implementation P.17 Xilinx 2016年
(56)^ Codeplay Outs SYCL-Based ComputeCpp 1.0, Running Parallel C++ Code On Multiple Platforms Phoronix 2018年8月23日
(57)^ Update project status in README triSYCL project 2020年7月3日
(58)^ triSYCL/sycl: Experimental fusion of triSYCL with Intel SYCL upstreaming effort into Clang/LLVM
(59)^ abPTX and SASS Assembly Debugging NVIDIA
(60)^ Kernelet: High-Throughput GPU Kernel Executions with Dynamic Slicing and Scheduling ( arXiv:1303.5164v1 [cs.DC] ) Jianlong Zhong, Bingsheng He
(61)^ maxas - Getting Started Nervana Systems
(62)^ MaxAs Nervana Systems
(63)^ nervanagpu/nervanagpu/kernels/sass at master · NervanaSystems/nervanagpu · GitHub Nervana Systems
(64)^ abNVIDIA Compute - PTX: Parallel Thread Execution NVIDIA
(65)^ Inline PTX Assembly in CUDA NVIDIA
(66)^ NVIDIA OpenCL SDK Code Samples NVIDIA
(67)^ Clang 3.0 Release Notes LLVM Project
(68)^ User Guide for NVPTX Back-end LLVM Project
(69)^ abUser Guide for NVPTX Back-end - Running the Kernel LLVM Project
(70)^ “AMD Intermediate Language Reference Guide - October 2011 v.2.4”. AMD (2011年10月). 2015年11月15日閲覧。
(71)^ AMD CAL Programming Guide
(72)^ Mantle Programming Guide and API Reference; Revision 1.0; March 6, 2015 p.93 AMD 2015年
(73)^ LLVM 3.3 Release Notes LLVM Project
(74)^ A Detailed Look at the R600 Backend AMD
(75)^ Introduction to GEN Assembly Intel 2019年9月18日
(76)^ Intel-gpu-tools 1.4 available LWN 2013年9月16日
(77)^ Intel oneAPI DPC++ Compiler 2020-08 Released With Explicit SIMD Extension Phoronix 2020年8月21日
(78)^ TGSI — Gallium 0.4 documentation
(79)^ “A Very Early Gallium3D TGSI Back-End For LLVM”. Phoronix (2013年4月22日). 2015年11月15日閲覧。
(80)^ The first open standard intermediate language for parallel compute and graphics Khronos Group
(81)^ “AMD Accelerated Parallel Processing OpenCL™ User Guide - December 2014 rev1.0”. AMD. p. 3-14 (2014年12月). 2015年11月15日閲覧。
(82)^ ︻後藤弘茂のWeekly海外ニュース︼ AMD GPUとモバイルGPUで同じプログラムを走らせるHSA構想
(83)^ CUDA Toolkit 7.0以前のバージョンに含まれるのはOpenCL 1.1対応のヘッダーとライブラリのみである。また、Fermi世代以前のハードウェアではOpenCL 1.1どまりとなる。
(84)^ 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に正式対応している。
(85)^ 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に正式対応している。
(86)^ CUDA Toolkit 4.1 - archive
(87)^ CUDA Toolkit 4.2 - archive
(88)^ AMD's APP SDK 3.0 Beta with OpenCL 2.0 support
(89)^ AMD APP SDK v3.0 Beta Developer Release Notes
(90)^ AMD OpenCL™ 2.0 Driver AMD OpenCL 2.0ドライバーはGCN第1世代以降のAMDグラフィックス製品と互換性がある。
(91)^ GPUOpen-LibrariesAndSDKs/OCL-SDK
(92)^ OpenCL SDK | Community
(93)^ Intel® OpenCL™ Code Builder | Intel® Developer Zone
(94)^ OpenCL* 2.0 の不均等なワークグループ | iSUS Broadwell世代以降のIntel CoreシリーズはOpenCL 2.0に対応している。
(95)^ Installable Client Driver on Android* OS
(96)^ インテル® SDK for OpenCL* Applications よくある問い合わせ | iSUS
(97)^ Get Started with Intel® SDK for OpenCL™ Applications 2019 on Linux*...
(98)^ Training & Code Samples for Intel® SDK for OpenCL™ Applications
(99)^ Tutorial: Getting Started with OpenCL™ on Android* OS
(100)^ abcompute-runtime Intel
(101)^ Intel® Integrated Native Developer Experience - Discontinued Intel
(102)^ OpenCL Development Kit for Linux on Power IBM 2009年10月30日
(103)^ ﹃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
(104)^ インテル® SDK for OpenCL Applications 2013 よくある問い合わせ | iSUS
(105)^ abOpenGL および OpenCL グラフィックスを扱う Mac コンピュータ - Apple サポート
(106)^ レガシ ツール Xilinx
(107)^ SDAccel 開発環境 Xilinx
(108)^ OpenCL Features The Clang Team
(109)^ KhronosGroup/SPIRV-LLVM-Translator: A tool and a library for bi-directional translation between SPIR-V and LLVM IR
(110)^ KhronosGroup/LLVM-SPIRV-Backend: An LLVM backend generating SPIR-V binary.
(111)^ ﹇GTC 2018﹈Khronosが語る﹁Vulkan 1.1﹂。VR&AR向けAPI﹁OpenXR﹂の最新動向も
(112)^ 2021 Japan Open House - The Khronos Group Inc
(113)^ OpenCL-Overview-Jan21-JP.pdf
(114)^ GitHub - google/angle: A conformant OpenGL ES implementation for Windows, Mac, Linux, iOS and Android.
(115)^ Home — The Mesa 3D Graphics Library
(116)^ Intel® VTune™ Amplifier XE: Getting started with OpenCL* performance analysis on Intel® HD Graphics | Intel® Developer Zone
(117)^ インテル® VTune™ Amplifier XE | iSUS
(118)^ CodeXL for game developers: How to analyze your HLSL for GCN - AMD
(119)^ GPUOpen-Archive/CodeXL: CodeXL is a comprehensive tool suite that enables developers to harness the benefits of CPUs, GPUs and APUs.
(120)^ Radeon™ GPU Profiler - AMD GPUOpen
(121)^ NVIDIA Nsight Visual Studio Edition
(122)^ gpgpu-sim/gpgpu-sim_distribution · GitHub
(123)^ OpenCL™ Emulator-Debugger - AMD, Internet Archive
(124)^ ocl-emu | Google Code Archive - Long-term storage for Google Code Project Hosting.
(125)^ OpenCL Emu Documentation
(126)^ KhronosGroup/OpenCL-CLHPP: Khronos OpenCL-CLHPP
(127)^ OpenCL C++ Bindings: Main Page
(128)^ 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.
(129)^ abTrying Intel OpenCL On Linux For Video Encoding Phoronix 2014年9月2日
(130)^ CUDA/OpenCL/Mercury Playback Engine について︵Adobe Premiere Pro︶
(131)^ Photoshop CC および CC 2014 GPU FAQ
(132)^ Dev:2.6/Source/Render/Cycles/OpenCL - BlenderWiki
(133)^ V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.
(134)^ V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.
(135)^ V-Ray RT and GPU rendering
(136)^ GPUレイトレーシング | NVIDIA
(137)^ OpenCV 2.2 Released - ROS robotics news
(138)^ アルテラ、国際カーエレクトロクス技術展︵カーエレJAPAN︶に出展
(139)^ オートモーティブワールド2015 開催直前情報‥アルテラが披露するFPGAを活用した“今すぐ使える”車載向けソリューション - MONOist︵モノイスト︶
(140)^ PixarAnimationStudios/OpenSubdiv · GitHub
(141)^ FFmpeg 2.0 Released With OpenCL, Many Changes Phoronix 2013年7月10日