(Translated by https://www.hiragana.jp/)
OpenCL - Wikipedia コンテンツにスキップ

OpenCL

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
OpenCL
作者さくしゃ Apple
開発元かいはつもと Khronos Group
最新さいしんばん
3.0.16[1][2] / 2024ねん4がつ4にち (5かげつまえ) (2024-04-04)
対応たいおう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によって提案ていあんされたのち[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がた演算えんざんのサポート
  • 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類似るいじ技術ぎじゅつ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とよくており、サポートされるかどうかはハードウェアデバイス次第しだいである[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 Leopardv10.5 Leopard次期じきメジャーバージョンとされる)に搭載とうさいされる予定よてい技術ぎじゅつの1つとしてはじめて発表はっぴょうされた[26]

標準ひょうじゅん団体だんたいクロノス・グループの2008ねん6がつ16にち発足ほっそくした作業さぎょう部会ぶかいCompute Working Group (CWG) において、AppleによってOpenCLの仕様しよう草案そうあん提案ていあんされた[3]。CWGはGPUとCPUのヘテロジニアス(異種いしゅ混在こんざい)な計算けいさん技術ぎじゅつロイヤリティフリー標準ひょうじゅん目的もくてきとしており、発足ほっそく時点じてんでは3DlabsAMD、Apple、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は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
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 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])のみだが、各種かくしゅ言語げんごよう下位かいレベルの言語げんごバインディングや上位じょういレベルのラッパーライブラリがオープンソースコミュニティなどによって開発かいはつされている。

ベンチマーク

[編集へんしゅう]
  • 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はあまり使つかわれていない[よう出典しゅってん]

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. ^ a b Khronos Launches Heterogeneous Computing Initiative、2008ねん6がつ16にち
  4. ^ OpenCL Overview December 2008 (PDF) 、2008ねん12月
  5. ^ The OpenCL* Platform on Intel(R) Processors
  6. ^ The OpenCL Specification Version: 2.0; Document Revision: 29
  7. ^ Other Built-in Data Types
  8. ^ Khronos OpenCL Registry
  9. ^ Accelerating GPU computation through mixed-precision methods
  10. ^ 科学かがく技術ぎじゅつ計算けいさんなどの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. ^ 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. ^ 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. ^ a b Trying 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日とおか

外部がいぶリンク

[編集へんしゅう]