コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「OpenCL」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Cewbot (会話 | 投稿記録)
Cewbot (会話 | 投稿記録)
262行目: 262行目:
2018年6月5日、Appleは[[WWDC]] 2018でOpenGL/OpenCLの非推奨化を発表し、[[macOS Mojave]]において(サポートはまだ打ち切られないものの)OpenGL/OpenCLは非推奨APIとなった。macOSがネイティブにサポートするOpenCLのバージョンは1.2が最後となっている<ref name="mac_gl_cl"/>。
2018年6月5日、Appleは[[WWDC]] 2018でOpenGL/OpenCLの非推奨化を発表し、[[macOS Mojave]]において(サポートはまだ打ち切られないものの)OpenGL/OpenCLは非推奨APIとなった。macOSがネイティブにサポートするOpenCLのバージョンは1.2が最後となっている<ref name="mac_gl_cl"/>。


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


== 関連項目 ==
== 関連項目 ==

2021年5月21日 (金) 02:43時点における版

OpenCL
作者 Apple
開発元 Khronos Group
最新版
3.0.6[1][2] / 2020年12月18日 (4年前) (2020-12-18)
対応OS クロスプラットフォーム
種別 API
ライセンス ロイヤリティフリー
公式サイト www.khronos.org/opencl
www.khronos.org/webcl
テンプレートを表示

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

仕様

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

特徴

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

  • CPU(CL_DEVICE_TYPE_CPU)、GPU(CL_DEVICE_TYPE_GPU)、およびCell/FPGA/Xeon Phi[4]など(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)[5]
  • 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以降[6]
  • OpenGLおよびOpenGL ESバッファテクスチャ、レンダーバッファとの連携(cl_gl.h、OpenCL 1.0以降の拡張[7]
  • 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類似技術にNVIDIACUDA(後述)が存在するが、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とよく似ており、サポートされるかどうかはハードウェアデバイス次第である[8]。また、OpenGL/Direct3Dでは浮動小数点テクスチャすなわちデータストレージのフォーマットとしてFP32形式のほかにFP16形式を選択できるが、通例GPUが得意とする演算精度は単精度であるため、シェーダープログラム中で利用できる演算精度は一般的には単精度となり、倍精度や半精度はオプション扱いとなる[9]

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

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

  • cl_apple_gl_sharing, cl_khr_gl_sharing: OpenCL 1.0の拡張[11]
  • cl_khr_gl_event: OpenCL 1.2の拡張[12]
  • cl_khr_egl_image, cl_khr_gl_msaa_sharing: OpenCL 2.0の拡張[13][14]

プラットフォームとデバイス

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

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

プログラミングモデル

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

なお、OpenCL 1.2、2.0、2.1、2.2では、SPIR英語版およびSPIR-Vと呼ばれる中間表現中間言語バイトコード)をサポートすることにより、事前コンパイルしたベンダーに依存しないカーネルコードを実行することができるようになる[21]。ただし、SPIR 1.2およびSPIR 2.0はOpenCL 1.2およびOpenCL 2.0の拡張機能(cl_khr_spir[22])となっており、サポート必須の機能ではない。一方、SPIR-VはOpenCL 2.1/2.2のコア機能となる[23]。OpenCL 2.1ではSPIR-V 1.0を、OpenCL 2.2ではSPIR-V 1.0/1.1/1.2をサポートするが、OpenCL 3.0ではSPIR-Vはコア機能から外れ、サポート状況に関しては実行時の問い合わせが必要となった[24]

歴史

2008年6月10日(日本時間)のWorldwide Developers Conference (WWDC 2008) において、Mac OS X Snow Leopardv10.5 Leopardの次期メジャーバージョンとされる)に搭載される予定の技術の1つとして初めて発表された[25]

標準化団体クロノス・グループの2008年6月16日に発足した作業部会Compute Working Group (CWG) において、AppleによってOpenCLの仕様草案が提案された[26]。CWGはGPUとCPUのヘテロジニアス(異種混在)な計算技術のロイヤリティフリーな標準化を目的としており、発足時点では3DlabsAMD、アップル、ARMCodeplayエリクソンフリースケール・セミコンダクタGraphic RemedyIBMイマジネーション・テクノロジーズ英語版インテルノキアNVIDIAモトローラQNXクアルコムサムスンSeaweedテキサス・インスツルメンツ、スウェーデン・ウメオ大学が参加している。

2008年8月のSIGGRAPH 2008および同年11月のSupercomputing 2008 (SC08) において、仕様策定の進捗状況が発表され、同時期にCompute Working Groupは名称をOpenCL Working Groupと改められ、新たにアクティビジョン・ブリザードバルコブロードコムエレクトロニック・アーツエイチアイケストレル研究所MovidiaRapidMind英語版、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 Leopard2009年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を介さないバックエンドも考慮されるようになった[48][47]

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
iPhone 7 以前などで使われている 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に対応している[108]
SPIR-Vでの出力にはまだ対応しておらず、"LLVM/SPIR-V Bi-Directional Translator"[1]や LLVM-SPIRV-Backend[2] (LLVMに合流予定[109]) が必要になる。
clspv (Google)
OpenCL CのサブセットをVulkanのコンピュートシェーダーとして実行できるようにするためのコンパイラ。
OpenCLを正式サポートしていないAndroidにおいてOpenCLアプリケーションの移植を促進するために開発が始まった[110]。clspvはいくつかのAndroidアプリケーションにて利用されている[111][112]
OpenCLOn12 (Microsoft)
Direct3D 12上に実装されたOpenCL 1.2 APIの互換レイヤー。

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

OpenCLプロファイラー

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

Intel VTune Amplifier(有償)
マルチコアCPU対応のプロファイラーだが、OpenCL[113]のほか、DirectXにも対応している[114]
AMD CodeXL(無償)
CPU/GPUのデバッギング/プロファイリング用ツール。OpenCLのほか、OpenGLやDirect3D (DirectCompute) 開発にも使用できる[115]。GPUOpenに移管されたが、開発終了[116]
NVIDIA Nsight(無償)
OpenCLのほか、CUDA、Direct3D (DirectCompute)、およびOpenGLに対応している[117]

OpenCLシミュレータ/エミュレータ

GPGPU-Sim(無償)
GPUのサイクルレベルシミュレータ。CUDAおよびOpenCLに対応している。Linux専用であり、また実行にはNVIDIAドライバーが必要となる[118]
AMD OpenCL Emulator-Debugger (ocl-emu)(無償)
AMDによるOpenCLソフトウェアエミュレータのオープンソース実装[119]。2012年10月12日版において、OpenCL 1.2に対応している[120]。対応OSはMicrosoft Windows XP以降で、ビルドにMicrosoft Visual Studio 2008/2010を必要とし、また実行プラットフォームとしてAMD Accelerated Parallel Processing (AMD APP) SDKを必要とする[121]。開発終了。

ラッパー

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

ベンチマーク

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

採用事例

画像処理/映像処理においては、OpenCLもしくはCUDAによるGPGPU対応が進んでいる。また、3DCGの物理演算およびレンダリングも同様である。音声処理においては、DSPによる固定小数点処理が主流のため、GPGPUはあまり使われていない[要出典]

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を実行することが可能となっている。

関連項目

脚注

  1. ^ The OpenCL™ Specification
  2. ^ The OpenCL™ Specification (PDF)
  3. ^ OpenCL Overview December 2008 (PDF) 、2008年12月
  4. ^ The OpenCL* Platform on Intel(R) Processors
  5. ^ The OpenCL Specification Version: 2.0; Document Revision: 29
  6. ^ Other Built-in Data Types
  7. ^ Khronos OpenCL Registry
  8. ^ Accelerating GPU computation through mixed-precision methods
  9. ^ 科学技術計算などのGPGPU用途を重視したGPUでは、ハーフレートの倍精度をサポートするものもある。モバイル用GPUや、機械学習向け機能を強化したGPUでは半精度をサポートするものもある。
  10. ^ sampler_t | OpenCL 1.0 Reference Pages
  11. ^ gl_sharing | OpenCL 1.0 Reference Pages
  12. ^ cl_khr_gl_event | OpenCL 1.2 Reference Pages
  13. ^ cl_khr_egl_image | OpenCL 2.0 Reference Pages
  14. ^ cl_khr_gl_msaa_sharing | OpenCL 2.0 Reference Pages
  15. ^ OpenCL Installable Client Driver (ICD) Loader - khronos.org news
  16. ^ OpenCL Overview - The Khronos Group Inc
  17. ^ clGetProgramInfo
  18. ^ clCreateProgramWithBinary
  19. ^ OpenCL meets FPGA #1 入門編 - Qiita
  20. ^ Knowledge Base - AMD
  21. ^ クロノス・グループ、SPIR 2.0の暫定仕様を公開 - 日刊工業新聞 Business Line - 企業発表
  22. ^ cl_khr_spir
  23. ^ SPIR - The first open standard intermediate language for parallel compute and graphics
  24. ^ The OpenCL™ SPIR-V Environment Specification
  25. ^ アップル、Mac OS X Snow Leopardをデベロッパにプレビュー、2008年6月10日
  26. ^ Khronos Launches Heterogeneous Computing Initiative、2008年6月16日
  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. ^ a b SYCL 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. ^ a b hipSYCL Sees Work-In-Progress Support For Intel oneAPI Level Zero Backend Phoronix 2021年3月5日
  55. ^ a b c Khronos 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. ^ a b PTX 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. ^ a b NVIDIA 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. ^ a b User 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. ^ a b compute-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. ^ a b OpenGL および OpenCL グラフィックスを扱う Mac コンピュータ - Apple サポート
  106. ^ レガシ ツール Xilinx
  107. ^ SDAccel 開発環境 Xilinx
  108. ^ OpenCL Features The Clang Team
  109. ^ Intel Looking To Upstream A Proper SPIR-V Compute Back-End For LLVM Phoronix 2021年3月2日
  110. ^ [GTC 2018]Khronosが語る「Vulkan 1.1」。VR&AR向けAPI「OpenXR」の最新動向も
  111. ^ 2021 Japan Open House - The Khronos Group Inc
  112. ^ OpenCL-Overview-Jan21-JP.pdf
  113. ^ Intel® VTune™ Amplifier XE: Getting started with OpenCL* performance analysis on Intel® HD Graphics | Intel® Developer Zone
  114. ^ インテル® VTune™ Amplifier XE | iSUS
  115. ^ CodeXL for game developers: How to analyze your HLSL for GCN - AMD
  116. ^ GPUOpen-Archive/CodeXL: CodeXL is a comprehensive tool suite that enables developers to harness the benefits of CPUs, GPUs and APUs.
  117. ^ NVIDIA Nsight Visual Studio Edition
  118. ^ gpgpu-sim/gpgpu-sim_distribution · GitHub
  119. ^ OpenCL™ Emulator-Debugger - AMD, Internet Archive
  120. ^ ocl-emu | Google Code Archive - Long-term storage for Google Code Project Hosting.
  121. ^ OpenCL Emu Documentation
  122. ^ KhronosGroup/OpenCL-CLHPP: Khronos OpenCL-CLHPP
  123. ^ OpenCL C++ Bindings: Main Page
  124. ^ 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.
  125. ^ a b Trying Intel OpenCL On Linux For Video Encoding Phoronix 2014年9月2日
  126. ^ CUDA/OpenCL/Mercury Playback Engine について(Adobe Premiere Pro)
  127. ^ Photoshop CC および CC 2014 GPU FAQ
  128. ^ Dev:2.6/Source/Render/Cycles/OpenCL - BlenderWiki
  129. ^ V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.
  130. ^ V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.
  131. ^ V-Ray RT and GPU rendering
  132. ^ GPUレイトレーシング | NVIDIA
  133. ^ OpenCV 2.2 Released - ROS robotics news
  134. ^ アルテラ、国際カーエレクトロクス技術展(カーエレJAPAN)に出展
  135. ^ オートモーティブワールド2015 開催直前情報:アルテラが披露するFPGAを活用した“今すぐ使える”車載向けソリューション - MONOist(モノイスト)
  136. ^ PixarAnimationStudios/OpenSubdiv · GitHub
  137. ^ FFmpeg 2.0 Released With OpenCL, Many Changes Phoronix 2013年7月10日

外部リンク