OpenCL
[Wikipedia|▼Menu]
□記事を途中から表示しています
[最初から表示]

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 Leopardv10.5 Leopardの次期メジャーバージョンとされる)に搭載される予定の技術の1つとして初めて発表された[26]

標準化団体クロノス・グループの2008年6月16日に発足した作業部会Compute Working Group (CWG) において、AppleによってOpenCLの仕様草案が提案された[3]。CWGはGPUとCPUのヘテロジニアス(異種混在)な計算技術のロイヤリティフリーな標準化を目的としており、発足時点では3DlabsAMD、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 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]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:95 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef