OpenCL

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
OpenCL
作者 Apple Inc.
開発元 Khronos Group
最新版 2.0 / 2013年11月18日(8か月前) (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 1.1は2010年6月11日に発表された。 OpenCL 1.2は2011年11月15日に発表された。 2014年1月現在の最新の正式版は2013年11月18日に発表されたOpenCL 2.0である[1]

特徴[編集]

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

  • CPU(CL_DEVICE_TYPE_CPU)、GPU(CL_DEVICE_TYPE_GPU)、およびCellなど(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)[2]
  • IEEE 754準拠の単精度浮動小数点数(float型)演算のサポート
    • ポインタ渡しおよびfloat型との相互変換関数経由でのアクセスに限定されるIEEE 754-2008準拠の半精度浮動小数点数(half型)
      • OpenCL 1.0においては、half型の直接演算は拡張による任意サポートに留まる
    • OpenCL 1.0においては、倍精度浮動小数点数(double型)は拡張による任意サポートに留まる
  • 2/3次元のイメージオブジェクトのサポート
  • OpenGLおよびOpenGL ESバッファテクスチャ、レンダーバッファとの連携(cl_gl.h)
  • Direct3D 10のバッファおよびテクスチャとの連携(cl_d3d10.h)
  • Direct3D 11のバッファおよびテクスチャとの連携(cl_d3d11.h、OpenCL 1.2以降)

OpenCL類似技術にNVIDIACUDA(後述)が存在するが、OpenCLにはCUDA同様に、3DグラフィックスAPIであるOpenGL(クロスプラットフォーム)およびDirect3D(Windowsプラットフォーム専用)との相互運用性(Interoperability)がAPIレベルで確保されている。

なお、OpenCLの動作ターゲットとしての用件を満たしたGPU(DirectX 10世代以上の統合型シェーダー アーキテクチャを採用したGPU)で使用できるDirect3D 10およびDirect3D 11との相互運用機能は、クロノスが管理している標準OpenCL APIでサポートされるが、Direct3D 9との相互運用機能は、OpenCL 1.2時点でもベンダーごとの拡張機能依存となっている(cl_d3d9_ext.h)。

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

歴史[編集]

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

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

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

類似技術[編集]

CUDACompute Unified Device Architecture) 
NVIDIA社によるGeForceQuadroTeslaシリーズGPU用のGPGPU開発環境。C言語による開発を可能にする(Ver.2.2以降はC++言語による開発も可能となっている)。
Close to MetalCTM, Close To the Metal) 
AMD社によるATI系GPUのストリームプロセッサインターフェイス。
AMD Accelerated Parallel Processing(APP, 旧ATI Stream SDK) 
AMD社によるATI系GPU用のGPGPU開発環境。CTMをCompute Abstraction Layer(CAL)によって抽象化し、Brook言語をCAL用に拡張したBrook+言語による開発を可能にする。AMDは「GPGPUでDirectX 11およびOpenCLをフルサポートする」と発表し[8]、CCC 11.2でRADEON HDシリーズ以上のGPUからOpenCLがStream 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。
OpenGL Compute Shader 
DirectXに搭載されている前述のCompute Shader同様、OpenGLでもバージョン4.3でGPGPU向けのシェーダーステージが標準化された。GLSLを開発言語とする。

OpenCL開発環境[編集]

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

NVIDIA GPU Computing SDK
Windows, Linux, Mac OS用が提供されている。
AMD Accelerated Parallel Processing SDK
Windows, Linux用が提供されている。
Intel OpenCL SDK
Windows, Linux用が提供されている。
IBM OpenCL SDK
Linux (x86, Power) 用が提供されている。

各SDKには、標準OpenCL API用のC/C++言語用ヘッダーなどのほか、ベンダーごとに拡張された機能を使うためのライブラリなども含まれるため、ハードウェア ベンダーに依存しないOpenCLプログラムを開発する場合は注意が必要となる。 OpenCLのプログラムは、GLSLを利用したOpenGLプログラムとほぼ同じ要領で開発することができ、CUDAプログラムのような専用オフライン コンパイラ(nvcc)を必要としないため、様々なプラットフォームへの展開が容易となることが利点である。

ラッパー[編集]

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

関連項目[編集]

脚注[編集]

[ヘルプ]

外部リンク[編集]

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