OpenCL

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
OpenCL
作者 Apple Inc.
開発元 Khronos Group
最新版 2.0 / 2013年11月18日(15か月前) (2013-11-18
対応OS クロスプラットフォーム
種別 API
ライセンス ロイヤリティーフリー
公式サイト www.khronos.org/opencl
www.khronos.org/webcl
テンプレートを表示

OpenCL(オープンシーエル、: Open Computing Language)は、OpenCL C言語による、マルチコアCPUGPUCellプロセッサ、DSPなどによる異種混在の計算資源(ヘテロジニアス環境、ヘテロジニアス・コンピューティング英語版: Heterogeneous)を利用した並列コンピューティングのためのクロスプラットフォームフレームワークである。用途には高性能計算サーバパーソナルコンピュータのシステムのほか、携帯機器などでの利用も想定されており、組み込みシステム向けに必要条件を下げたOpenCL Embedded Profileが存在する。

仕様[編集]

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

特徴[編集]

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

  • CPU(CL_DEVICE_TYPE_CPU)、GPU(CL_DEVICE_TYPE_GPU)、およびCellやXeon Phi[2]など(CL_DEVICE_TYPE_ACCELERATOR)の各種計算資源のサポート
  • C言語(ISO C99規格)をベースにしたOpenCL Cプログラミング言語によるカーネル記述
    • 組み込みのベクトル型およびベクトル演算のサポート(float2型、float4型などや、Swizzle演算など)
    • オンラインのOpenCL Cコンパイラ
  • データ並列およびタスク並列のプログラミングモデルのサポート
  • 同期ポイント以外での内容の一貫性(Consistency)を保証しない、緩和型一貫性共有メモリモデル(relaxed-consistency common memory model
  • 同期ポイントおよびOpenCLアトミック操作でのホスト・デバイス間のメモリ一貫性を保証する共有仮想メモリ(shared virtual memory: SVM, OpenCL 2.0)[1]
  • IEEE 754準拠の単精度浮動小数点数(float型)演算のサポート
    • ポインタ渡しおよびfloat型との相互変換関数経由でのアクセスに限定されるIEEE 754-2008準拠の半精度浮動小数点数(half型)
      • OpenCL 1.0においては、half型の直接演算は拡張による任意サポートに留まる
    • OpenCL 1.0においては、倍精度浮動小数点数(double型)は拡張による任意サポートに留まる
  • 2次元/3次元のイメージオブジェクトのサポート
  • OpenGLおよびOpenGL ESバッファテクスチャ、レンダーバッファとの連携(cl_gl.h、OpenCL 1.0以降の拡張[3]
  • OpenGL ESのイメージ、ディスプレイ、同期オブジェクトとの連携(cl_egl.h、OpenCL 1.2以降の拡張)
  • Direct3D 10のバッファおよびテクスチャとの連携(cl_d3d10.h、OpenCL 1.0以降の拡張)
  • Direct3D 11のバッファおよびテクスチャとの連携(cl_d3d11.h、OpenCL 1.2以降の拡張)
  • DirectX 9のメディアサーフェイス連携(cl_dx9_media_sharing.h、OpenCL 1.2以降の拡張)

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型のサポート状況は、CUDAとよく似ている[4]。また、OpenGL/Direct3Dでは浮動小数点テクスチャ(データストレージ)のフォーマットとしてFP32のほかにFP16を選択できるが、シェーダープログラム中で利用できる演算精度は一般的には単精度となる(GPUが得意とする演算精度は単精度であるため)。

歴史[編集]

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

標準化団体クロノス・グループの2008年6月16日に発足した作業部会Compute Working Group (CWG)において、アップル社によってOpenCLの仕様草案が提案された[6]。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を採用すると発表した[7]

2008年12月9日のSIGGRAPH Asia 2008において、正式版となるOpenCL 1.0の仕様が発表された[8]。またほぼ同時期に、AMD社とNVIDIA社はそれぞれ自社のGPGPU技術であるATI Stream SDKおよびCUDAにおいてOpenCL 1.0を採用すると発表した[9][10]

2010年6月14日、OpenCL 1.1 を発表[11]。float3型の追加など。

2011年11月15日、OpenCL 1.2 を発表[12]。分割コンパイル&リンク対応、SubDeviceの追加、3Dイメージの書き込み拡張機能[13]など。

2013年7月22日、OpenCL 2.0 を発表[14]。read_write修飾子[15]、共有仮想メモリや動的並列処理対応など。

類似技術[編集]

CUDACompute Unified Device Architecture
NVIDIA社によるGeForceQuadroTeslaTegraシリーズGPU用のGPGPU開発・実行環境。C言語を拡張したCUDA Cによる開発を可能にする(Ver.2.2以降はC++言語を拡張したCUDA C++による開発も可能となっている)。また、PGI社からはCUDA Fortran Compilerが提供されている[16]
Close to Metal英語版CTM, Close To the Metal
AMD社によるATI系GPUのストリームプロセッサインターフェイス。ハードウェアに近いローレベル制御を可能とする[17]
AMD Stream(旧ATI Stream
AMD社によるATI系GPU用のGPGPU開発・実行環境。CTMをCompute Abstraction Layer(CAL)によって抽象化し、Brook言語をCAL用に拡張したBrook+言語による開発を可能にする。なおAMDは「GPGPUでDirectX 11およびOpenCLをフルサポートする」と発表し[18] [19]CCC 11.2でRadeon HDシリーズ以上のGPU向けにOpenCLドライバーが標準搭載された[疑問点 ][要出典]
2015年現在、同社によるOpenCLを中核とするCPU/GPU/APU対応の総合基盤テクノロジーは「AMD Accelerated Parallel Processing」(AMD APP)と呼ばれており、SDKの名称もATI Stream SDKからAMD APP SDKに統一されている。
Sh英語版(libsh)
ウォータールー大学コンピュータグラフィックス研究室の成果に基づいた、RapidMind社によるシェーダプログラミングおよびGPGPUのためのメタプログラミング技術。C++言語による開発を可能にする。LGPLライセンスで公開されている。
RapidMind
RapidMind英語版社による商用並列コンピューティング開発環境。GPU/マルチコアCPU/Cellプロセッサをバックエンドに利用できる。C++言語による開発を可能にする。
BrookGPU英語版(Brook for GPU)
スタンフォード大学コンピュータグラフィックス研究室によるストリーム・コンピューティング開発環境。GPUおよびOpenMPによるマルチコアCPU演算をバックエンドに利用できる。C言語(ANSI C)を拡張したBrook言語による開発を可能にする。BSDライセンスおよびGPLライセンスで公開されている。
PeakStream
PeakStream社による商用ストリーム・コンピューティング開発環境。GPU/マルチコアCPU/Cellプロセッサをバックエンドに利用できる。PeakStream社は2007年6月頃までにGoogle社によって買収されている。
DirectCompute
マイクロソフトが開発・配布しているDirectXテクノロジーのひとつであり、DirectX 11セットに含まれるGPGPU向けのAPI。HLSLを開発言語とする(Compute Shader)。動作環境はWindows Vista以降のWindows OSおよびXbox One
C++ AMP
DirectComputeをバックエンドとし、ハードウェアアクセラレートされた並列処理をC++言語で記述できるようにするライブラリ・言語拡張。OpenCLなどをバックエンドとするLinux向けのC++ AMPオープン実装もある[20]
OpenGL Compute Shader
DirectXに搭載されている前述のCompute Shader同様、OpenGLでもバージョン4.3でGPGPU向けのシェーダーステージが標準化された。GLSLを開発言語とする。
OpenMP LEO (Language Extensions for Offload)
IntelによるIntel MIC (Many Integrated Core) およびGFXへオフロードするためのOpenMP拡張。ICC (Intel C++ Compiler) に実装されている[21]
OpenMP 4.0以降
offloadに対応している。OpenMP®/Clangはoffloadに未対応[22]GCC 5.0はMICへのオフロードに対応する予定[23]
OpenACC
OpenMPのようにコード中にディレクティブを挿入することで、並列処理のハードウェアアクセラレートを行なえるようにする規格[24]。PGI社が開発した技術で、同社のPGIコンパイラに初めて搭載された[25]。そのほかには、GCC 5.0に搭載される[26]

OpenCL開発環境[編集]

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

NVIDIA CUDA Toolkit
Windows, Linux, OS X (Mac) 用が提供されている。かつてNVIDIAのOpenCL SDKは"NVIDIA GPU Computing SDK"に含まれていて、CUDA SDKとは独立していたが、CUDA 5.0からはCUDA Toolkitにすべて含まれるようになった。以前のバージョンのGPU Computing SDKはアーカイブとして公開されているが、CUDA Toolkitのページから直接たどることはできない[27] [28]。Windows版は"CUDA Toolkit 6.5"時点でOpenCL 1.1に対応している[29]
AMD Accelerated Parallel Processing SDK
Windows, Linux用が提供されている。"AMD APP SDK 3.0 Beta"時点でOpenCL 2.0に対応している[30]
Intel OpenCL SDK
Windows, Linux, Android用が提供されている。"Intel® SDK for OpenCL™ Applications 2014"時点でOpenCL 2.0に対応している[31]
Qualcomm Adreno SDK
Snapdragon 向け
ARM Mali OpenCL SDK
ARM Mali を採用した SoC 向け
Imagination PowerVR SDK
Apple の SoC 等で使われている PowerVR 向け
IBM OpenCL SDK
Linux (x86, PowerPC) 用が提供されている。
Beignet (Intel)
Linux用。オープンソース。LLVMベース。
OpenCL for OS X (Apple)
OS Xの標準機能としてOpenCLをサポートしている[32]
Altera SDK for OpenCL
FPGA上で動作するOpenCLプログラムを開発することができる。x86プロセッサ対応のエミュレータも提供されている。
Xilinx SDAccel
FPGA上で動作するOpenCLプログラムを開発することができる。

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

OpenCLのプログラムは、GLSLを利用したOpenGLプログラムとほぼ同じ要領で開発することができ、CUDAプログラムのような専用オフライン コンパイラ(nvcc)を必要としないため、様々なプラットフォームへの展開が容易となることが利点である。ただし初回の実行時コンパイル(オンライン コンパイル)に時間がかかるなどのデメリットも存在する。この点に関しては、実運用時にはclCreateProgramWithSource()によるオンライン コンパイルは行なわず、clCreateProgramWithBinary()を用いてコンパイル済みバイナリからプログラムオブジェクトを生成する方法もある[33] [34] [35](ただしベンダーごとのOpenCLバイナリ間における互換性は保証されない)。

OpenCLプロファイラー[編集]

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

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

ラッパー[編集]

Khronosが公開しているOpenCL APIはC/C++言語向けのヘッダーおよびC++言語用ラッパークラスのヘッダー(cl.hpp)のみだが、各種言語用にラッパーライブラリがオープンソースコミュニティなどによって開発されている。

採用事例[編集]

関連項目[編集]

脚注[編集]

[ヘルプ]
  1. ^ OpenCL Overview December 2008 (PDF) 、2008年12月
  2. ^ The OpenCL* Platform on Intel(R) Processors
  3. ^ Khronos OpenCL Registry
  4. ^ Accelerating GPU computation through mixed-precision methods
  5. ^ アップル、Mac OS X Snow Leopardをデベロッパにプレビュー、2008年6月10日
  6. ^ Khronos Launches Heterogeneous Computing Initiative、2008年6月16日
  7. ^ RapidMind Embraces Open Source and Standards Projects to Increase Focus on Simplifying Parallel Programming for Application Developers、2008年11月10日
  8. ^ The Khronos Group Releases OpenCL 1.0 Specification、2008年12月9日
  9. ^ AMD Adopts OpenCL™ 1.0 Specification Ratified Today by The Khronos™ Group, Reaffirms Commitment to Open Standards for CPU+GPU Compute、2008年12月8日
  10. ^ NVIDIA Adds OpenCL To Its Industry Leading GPU Computing Toolkit、2008年12月9日
  11. ^ Khronos Drives Momentum of Parallel Computing Standard with Release of OpenCL 1.1 Specification - Khronos Group Press Release
  12. ^ Khronos Releases OpenCL 1.2 Specification - Khronos Group Press Release
  13. ^ write_image (3D)
  14. ^ Khronos Releases OpenCL 2.0 - Khronos Group Press Release
  15. ^ Access Qualifiers: read_writeはCUDA SurfaceやDirectCompute RWTextureといったDirectX 11世代の機能に相当する。
  16. ^ NVIDIAのCUDAアーキテクチャGPUにおけるFortranサポート
  17. ^ AMDのGPGPU戦略は新章へ - ATI Streamの展望、DirectX Compute Shaderの衝撃 (2) ATI Streamとは? | マイナビニュース
  18. ^ AMD、DirectX 11/OpenCLのGPGPUをフルサポートへ
  19. ^ AMD Drives Adoption of Industry Standards in GPGPU Software Development
  20. ^ AMDとMS,GPU演算用途向けのコンパイラ「C++ AMP v1.2」を発表 - 4Gamer.net
  21. ^ Initiating an Offload on Intel® Graphics Technology Intel
  22. ^ OpenMP®/Clang
  23. ^ OpenMP 4.0 Offloading For Intel MIC Lands In GCC 5 Phoronix 2014年11月13日
  24. ^ OpenACC ディレクティブによるプログラミング by PGI Compilers
  25. ^ OpenACC ディレクティブによるプログラミング by PGI Compilers
  26. ^ OpenACC Changes Merged Today For GCC 5 Phoronix 2015年1月15日
  27. ^ CUDA Toolkit 4.1 - archive
  28. ^ CUDA Toolkit 4.2 - archive
  29. ^ Kepler世代のGPU (GeForce GTX 770) とNVIDIA公式ドライバー (バージョン347.25) を用いてCL_PLATFORM_VERSIONを調べた結果。OpenCL対応バージョンやロードマップに関するNVIDIAからの公式の言及はWeb上に存在しない模様。
  30. ^ AMD's APP SDK 3.0 Beta with OpenCL 2.0 support
  31. ^ Details about Intel® SDK for OpenCL™ Applications | Intel® Developer Zone
  32. ^ インテル® SDK for OpenCL Applications 2013 よくある問い合わせ | iSUS
  33. ^ clGetProgramInfo
  34. ^ OpenCL meets FPGA #1 入門編 - Qiita
  35. ^ Knowledge Base - AMD
  36. ^ インテル® VTune™ Amplifier XE | iSUS
  37. ^ CodeXL for game developers: How to analyze your HLSL for GCN - AMD
  38. ^ NVIDIA Nsight Visual Studio Edition
  39. ^ CUDA/OpenCL/Mercury Playback Engine について(Adobe Premiere Pro)
  40. ^ Photoshop CC および CC 2014 GPU FAQ
  41. ^ Dev:2.6/Source/Render/Cycles/OpenCL - BlenderWiki
  42. ^ V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.
  43. ^ V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.
  44. ^ V-Ray RT and GPU rendering
  45. ^ GPUレイトレーシング | NVIDIA
  46. ^ OpenCV 2.2 Released - ROS robotics news
  47. ^ アルテラ、国際カーエレクトロクス技術展(カーエレJAPAN)に出展
  48. ^ オートモーティブワールド2015 開催直前情報:アルテラが披露するFPGAを活用した“今すぐ使える”車載向けソリューション - MONOist(モノイスト)

外部リンク[編集]

  • OpenCL(英語) - クロノス・グループ