OpenCL

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
OpenCL
作者 アップル
開発元 Khronos Group
最新版 2.2 (revision v2.2-3)[1] / 2017年5月12日(5か月前) (2017-05-12
対応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'(名目上の手数料)が必要である[2]

特徴[編集]

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

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

グラフィックス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とよく似ている[7]。また、OpenGL/Direct3Dでは浮動小数点テクスチャすなわちデータストレージのフォーマットとしてFP32形式のほかにFP16形式を選択できるが、通例GPUが得意とする演算精度は単精度であるため、シェーダープログラム中で利用できる演算精度は一般的には単精度となり、倍精度や半精度はオプション扱いとなる。

プラットフォームとデバイス[編集]

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

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

歴史[編集]

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

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

2008年12月9日のSIGGRAPH Asia 2008において、正式版となるOpenCL 1.0の仕様が発表された[12]。またほぼ同時期に、AMDとNVIDIAはそれぞれ自社のGPGPU技術であるATI StreamおよびCUDAにおいてOpenCL 1.0を採用すると発表した[13][14]。OpenCL 1.0対応の最初のプラットフォームとして、Mac OS X Snow Leopard2009年8月28日にリリースされた。

2010年6月14日、OpenCL 1.1を正式発表[15]。 float3型の追加、clSetKernelArg()関数以外のスレッドセーフ化[16]など。

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

2013年7月22日、OpenCL 2.0を正式発表[19]。 read_write修飾子[20]、共有仮想メモリ (Shared Virtual Memory) や動的並列処理 (Dynamic Parallelism) 対応など。

2015年11月16日、OpenCL 2.1を正式発表[21]。 SPIR-V中間言語によるVulkan API (OpenGL Next Generation, glNext) とのプログラミング基盤共通化など。2015年3月3日の暫定仕様の発表時点でカーネル記述言語へのC++14サブセット導入も予定されていた[22]が、OpenCL 2.1正式仕様の発表とともに、OpenCL C++のリリースは早くて2016年半ばとアナウンスされた。

2017年5月16日、OpenCL 2.2を正式発表[23]。2016年4月18日の暫定仕様の発表時点でアナウンスされていた、OpenCL C++言語、SYCL 2.2フレームワーク[24]に加えて、中間表現SPIR-V 1.2などが導入された。

類似技術[編集]

OpenCLのように異種プロセッサをバックエンドとして活用するAPIは、GPGPU黎明期のものや、GPU専用のもの、特定のベンダー専用のもの、そして仕様が標準化されていないものまで含めると多数存在する。

CUDACompute Unified Device Architecture
NVIDIAによるGeForce / Quadro / Tesla / TegraシリーズGPU用のGPGPU開発・実行環境。C言語を拡張したCUDA Cによる開発を可能にする(Ver.2.2以降はC++言語を拡張したCUDA C++による開発も可能となっている)。NVIDIAによるコンパイラ実装nvccだけでなく、オープンソースコンパイラのLLVMでもCUDAコンパイラの実装が始まっている[25] [26]。また、PGI社からはCUDA Fortran Compilerが提供されている[27]
Close to Metal英語版CTM, Close To the Metal
AMD社によるATI系GPUのストリームプロセッサインターフェイス。ハードウェアに近いローレベル制御を可能とする[28]
AMD Stream(旧ATI Stream
AMDによるATI系GPU用のGPGPU開発・実行環境。CTMをCompute Abstraction Layer(CAL)[29]によって抽象化し、Brook言語をCAL用に拡張したBrook+言語による開発を可能にする。なおAMDは「GPGPUでDirectX 11およびOpenCLをフルサポートする」と発表し[30] [31]CCC 11.2でRadeon HDシリーズ以上のGPU向けにOpenCLドライバーが標準搭載された[疑問点 ][要出典]
その後、同社はHSA推進とともに、独自規格ではなくOpenCLをヘテロジニアス戦略の中核とする方向に舵を切り直した。AMDによる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/DirectX 12セットに含まれるGPGPU向けのAPI。GPGPU向けのシェーダーステージとして導入されたCompute Shaderを利用する。HLSLをカーネル記述言語とする。グラフィックス連携用途を重視している[32]。動作環境はWindows Vista以降のWindowsおよびXbox One
C++ AMP
ハードウェアアクセラレートされた並列処理をC++言語で記述できるようにする高レベルのライブラリ・言語拡張。DirectComputeをバックエンドとするMicrosoft Visual C++実装のほか、OpenCLなどをバックエンドとするLinux向けのC++ AMPオープン実装もある[33] [34]
OpenGL Compute Shader
DirectXに搭載されている前述のCompute Shader同様、OpenGLでもバージョン4.3でGPGPU向けのシェーダーステージが標準化された。GLSLをカーネル記述言語とする。
OpenMP LEO (Language Extensions for Offload)
インテルによるIntel MIC (Many Integrated Core) およびGFXへオフロードするためのOpenMP拡張。ICC (Intel C++ Compiler) に実装されている[35]
OpenMP 4.0以降
offloadに対応している。OpenMP®/Clangはoffloadに未対応[36]GCC 5.0はMICへのオフロードに対応する予定[37]
OpenACC英語版
OpenMPのようにコード中にディレクティブを挿入することで、並列処理のハードウェアアクセラレートを行なえるようにする規格[38]。PGIが開発した技術で、同社のPGIコンパイラに初めて搭載された[39]。そのほかには、GCC 5.0に搭載される[40]
SPMD Programming Language
インテルによって開発された、C言語を拡張したSPMD英語版対応言語であり、Intel SPMD Program Compiler (ISPC) でコンパイル可能[41]。ISPCはオープンソースであり、バックエンドにLLVMを使用している[41]。IntelのCPUやXeon Phiだけでなく、NVIDIA Kepler GPUにも対応している[42]。ISPCを導入している例としては、オープンソースのレイトレーシングエンジンであるEmbreeがある[43]

関連技術[編集]

SASS
NVIDIAのGPUで使われるハードウェア依存の低級アセンブリ言語[44]。NVIDIA Nsight開発環境がSASSレベルでのデバッグに対応している[44]。SASSのアセンブラは、asfermi[45]やMaxAs[46]などがある。SASS言語で書かれた例としては、NervanaGPUがある[47][48]
PTX (Parallel Thread Execution英語版)
NVIDIAのGPU向けのハードウェア非依存な擬似アセンブリ言語[49]。PTXのアセンブラは、ptxasがある[49]。asm文によって、CUDAやOpenCLのコードにPTXのコードを埋め込むことも可能[50][51]
LLVM/ClangにはOpenCLのフロントエンド[52]およびPTXのバックエンド[53]が含まれており、OpenCLからLLVM IRを通してPTXへと変換し、CUDA Driver APIで実行したり[54]、ptxasでSASSへと変換することが可能[54]
AMD Intermediate Language (AMD IL)
AMDのGPU向けのハードウェア非依存な擬似アセンブリ言語[55]。コンパイルは、CAL (Compute Abstraction Layer) APIのcalclCompile関数で行なう[56]asm文によって、OpenCLのコードにAMD ILのコードを埋め込むことも可能[要出典]。なおAMD ILのサブセットはローレベルグラフィックスAPIであるMantleでも利用されている[57]
AMD Instruction Set Architecture (AMD ISA)
AMDのGPUで使われるハードウェア依存の低級アセンブリ言語。LLVMがTeraScale英語版(VLIW4/5) およびGCNアーキテクチャに対応するR600バックエンドを持っており[58][59]、LLVM/ClangでOpenCLからAMD ISAアセンブリへと変換したり、AMD ISAアセンブリからllvm-asでバイナリ化したりすることが可能。アセンブルしたバイナリはOpenCL APIのclCreateProgramWithBinary関数で実行する。
intel-gen4asm
Intel GPU向けのアセンブラ[60]。オープンソース。
TGSI (Tungsten Graphics Shader Infrastructure)
オープンソースなハードウェア非依存の中間言語[61]。オープンソースGPUドライバであるMesa 3D/Gallium3Dの中間表現形式として使われている。2013年現在、Gallium3D OpenCL実装のために、LLVMのTGSIバックエンドが開発中となっている[62]。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だけでなく、グラフィックスにも対応している[63]
HSAIL
HSA Foundationで標準化されたヘテロジニアスシステムアーキテクチャ英語版(HSA) 向けのハードウェア非依存な中間言語。AMDやLLVMのOpenCL実装がHSAIL中間表現形式の出力に対応している[64]。異種コア間のスケジューリングを前提としており、グラフィックスには非対応[65]

OpenCL開発環境[編集]

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

NVIDIA CUDA Toolkit
Windows, Linux, macOS用が提供されている。かつてNVIDIAのOpenCL SDKは"NVIDIA GPU Computing SDK"に含まれていて、CUDA SDKとは独立していたが、CUDA 5.0からはCUDA Toolkitにすべて含まれるようになった。以前のバージョンのGPU Computing SDKはアーカイブとして公開されているが、CUDA Toolkitのページから直接たどることはできない[66] [67]。"CUDA Toolkit 7.5"時点でOpenCL 1.2に対応している[68] [69] [70]
AMD Accelerated Parallel Processing SDK
Windows, Linux用が提供されている。"AMD APP SDK 3.0"時点でOpenCL 2.0、SPIR英語版 1.2に対応している[71] [72] [73]
Intel® SDK for OpenCL™ Applications, Intel Integrated Native Developer Experience (Intel INDE)
Windows, Linux, Android 用が提供されている。単独の "Intel SDK for OpenCL" (Intel OpenCL SDK) のほか、2015年からは統合ツールとして Intel INDE も提供されている。OpenCL 2.0、SPIR英語版 1.2をサポートしている[74] [75]
Qualcomm Adreno SDK
Snapdragon 向け
ARM Mali OpenCL SDK
ARM Mali英語版を採用したSoC向け。SDK v1.1時点でOpenCL 1.1に対応している。
Imagination PowerVR SDK
Apple の SoC 等で使われている PowerVR 向け
IBM OpenCL SDK
Linux (x86, PowerPC) 用が提供されている。
Beignet (Intel)
Linux用。オープンソース。LLVMベース。
OpenCL for macOS
macOSの標準機能としてOpenCLをサポートしている[76]。2015年4月時点で、OpenCL 1.2までをサポートする(ただし対応バージョンはハードウェアにもよる[77])。
Altera SDK for OpenCL
FPGA上で動作するOpenCLプログラムを開発することができる。x86プロセッサ対応のエミュレータも提供されている。
Xilinx SDAccel
FPGA上で動作するOpenCLプログラムを開発することができる。

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

OpenCLのプログラムは、GLSLを利用したOpenGLプログラムとほぼ同じ要領で開発することができ、CUDAプログラムのような専用オフライン コンパイラ(nvcc)を必要としないため、様々なプラットフォームへの展開が容易となることが利点である。ただし初回の実行時コンパイル(オンライン コンパイル)に時間がかかるなどのデメリットも存在する。この点に関しては、実運用時にはclCreateProgramWithSource()関数によるオンライン コンパイルは行なわず、clGetProgramInfo()関数とclCreateProgramWithBinary()関数を用いてコンパイル済みバイナリからプログラムオブジェクトを生成する方法もある[78] [79] [80] [81](ただしベンダーごとのOpenCLバイナリ間における互換性は保証されない)。なお、OpenCL 1.2、2.0、2.1では、SPIR英語版およびSPIR-Vと呼ばれる中間表現(中間言語バイトコード)をサポートすることにより、ベンダーに依存しないカーネルコードをコンパイル・実行することができるようになる[82]。ただし、SPIR 1.2およびSPIR 2.0はOpenCL 1.2およびOpenCL 2.0の拡張機能(cl_khr_spir[83])となっており、サポート必須の機能ではない。一方、SPIR-VはOpenCL 2.1のコア機能となる[84]

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

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

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

OpenCLシミュレータ/エミュレータ[編集]

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

ラッパー[編集]

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

ベンチマーク[編集]

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

採用事例[編集]

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

関連項目[編集]

脚注[編集]

[ヘルプ]
  1. ^ The OpenCL Specification Version: 2.2
  2. ^ OpenCL Overview December 2008 (PDF) 、2008年12月
  3. ^ The OpenCL* Platform on Intel(R) Processors
  4. ^ The OpenCL Specification Version: 2.0; Document Revision: 29
  5. ^ Other Built-in Data Types
  6. ^ Khronos OpenCL Registry
  7. ^ Accelerating GPU computation through mixed-precision methods
  8. ^ OpenCL Installable Client Driver (ICD) Loader - khronos.org news
  9. ^ アップル、Mac OS X Snow Leopardをデベロッパにプレビュー、2008年6月10日
  10. ^ Khronos Launches Heterogeneous Computing Initiative、2008年6月16日
  11. ^ RapidMind Embraces Open Source and Standards Projects to Increase Focus on Simplifying Parallel Programming for Application Developers、2008年11月10日
  12. ^ The Khronos Group Releases OpenCL 1.0 Specification
  13. ^ AMD Adopts OpenCL™ 1.0 Specification Ratified Today by The Khronos™ Group, Reaffirms Commitment to Open Standards for CPU+GPU Compute、2008年12月8日
  14. ^ NVIDIA Adds OpenCL To Its Industry Leading GPU Computing Toolkit、2008年12月9日
  15. ^ Khronos Drives Momentum of Parallel Computing Standard with Release of OpenCL 1.1 Specification - Khronos Group Press Release
  16. ^ clSetKernelArg
  17. ^ Khronos Releases OpenCL 1.2 Specification - Khronos Group Press Release
  18. ^ write_image (3D)
  19. ^ Khronos Releases OpenCL 2.0 - Khronos Group Press Release
  20. ^ Access Qualifiers: read_writeはCUDA SurfaceやDirectCompute RWTextureといったDirectX 11世代の機能に相当する。
  21. ^ Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming - Khronos Group Press Release
  22. ^ Khronos Releases OpenCL 2.1 Provisional Specification for Public Review - Khronos Group Press Release
  23. ^ Khronos Releases OpenCL 2.2 With SPIR-V 1.2 - Khronos Group Press Release
  24. ^ Khronos Releases OpenCL 2.2 Provisional Specification with OpenCL C++ Kernel Language - Khronos Group Press Release
  25. ^ How To Compile CUDA Code With LLVM”. Phoronix (2015年11月11日). 2015年11月15日閲覧。
  26. ^ Compiling CUDA C/C++ with LLVM — LLVM 3.8 documentation”. LLVM Project (2015年11月13日). 2015年11月15日閲覧。
  27. ^ NVIDIAのCUDAアーキテクチャGPUにおけるFortranサポート
  28. ^ AMDのGPGPU戦略は新章へ - ATI Streamの展望、DirectX Compute Shaderの衝撃 (2) ATI Streamとは? | マイナビニュース
  29. ^ "Close to the Metal", Justin Hensley, AMD Graphics Product Group
  30. ^ AMD、DirectX 11/OpenCLのGPGPUをフルサポートへ
  31. ^ AMD Drives Adoption of Industry Standards in GPGPU Software Development
  32. ^ 後藤弘茂のWeekly海外ニュース
  33. ^ AMDとMS,GPU演算用途向けのコンパイラ「C++ AMP v1.2」を発表 - 4Gamer.net
  34. ^ multicoreware / cppamp-driver-ng / wiki / Home — Bitbucket
  35. ^ Initiating an Offload on Intel® Graphics Technology Intel
  36. ^ OpenMP®/Clang
  37. ^ OpenMP 4.0 Offloading For Intel MIC Lands In GCC 5 Phoronix 2014年11月13日
  38. ^ OpenACC ディレクティブによるプログラミング by PGI Compilers
  39. ^ OpenACC ディレクティブによるプログラミング by PGI Compilers
  40. ^ OpenACC Changes Merged Today For GCC 5 Phoronix 2015年1月15日
  41. ^ a b Intel SPMD Program Compiler - Overview Intel Corporation
  42. ^ Intel SPMD Program Compiler User's Guide - Compiling For The NVIDIA Kepler GPU Intel Corporation
  43. ^ Embree Overview Intel Corporation
  44. ^ a b PTX and SASS Assembly Debugging NVIDIA
  45. ^ Kernelet: High-Throughput GPU Kernel Executions with Dynamic Slicing and Scheduling ( arXiv:1303.5164v1 [cs.DC] ) Jianlong Zhong, Bingsheng He
  46. ^ maxas - Getting Started Nervana Systems
  47. ^ MaxAs Nervana Systems
  48. ^ nervanagpu/nervanagpu/kernels/sass at master · NervanaSystems/nervanagpu · GitHub Nervana Systems
  49. ^ a b NVIDIA Compute - PTX: Parallel Thread Execution NVIDIA
  50. ^ Inline PTX Assembly in CUDA NVIDIA
  51. ^ NVIDIA OpenCL SDK Code Samples NVIDIA
  52. ^ Clang 3.0 Release Notes LLVM Project
  53. ^ User Guide for NVPTX Back-end LLVM Project
  54. ^ a b User Guide for NVPTX Back-end - Running the Kernel LLVM Project
  55. ^ AMD Intermediate Language Reference Guide - October 2011 v.2.4”. AMD (2011年10月). 2015年11月15日閲覧。
  56. ^ AMD CAL Programming Guide
  57. ^ Mantle Programming Guide and API Reference; Revision 1.0; March 6, 2015
  58. ^ LLVM 3.3 Release Notes LLVM Project
  59. ^ A Detailed Look at the R600 Backend AMD
  60. ^ Fedora Package DB - intel-gen4asm Red Hat
  61. ^ TGSI — Gallium 0.4 documentation
  62. ^ A Very Early Gallium3D TGSI Back-End For LLVM”. Phoronix (2013年4月22日). 2015年11月15日閲覧。
  63. ^ The first open standard intermediate language for parallel compute and graphics Khronos Group
  64. ^ AMD Accelerated Parallel Processing OpenCL™ User Guide - December 2014 rev1.0”. AMD. p. 3-14 (2014年12月). 2015年11月15日閲覧。
  65. ^ 【後藤弘茂のWeekly海外ニュース】 AMD GPUとモバイルGPUで同じプログラムを走らせるHSA構想
  66. ^ CUDA Toolkit 4.1 - archive
  67. ^ CUDA Toolkit 4.2 - archive
  68. ^ CUDA Toolkit 7.0以前のバージョンに含まれるのはOpenCL 1.1対応のヘッダーとライブラリのみである。また、Fermi世代以前のハードウェアではOpenCL 1.1どまりとなる。
  69. ^ 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に正式対応している。
  70. ^ 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に正式対応している。
  71. ^ AMD's APP SDK 3.0 Beta with OpenCL 2.0 support
  72. ^ AMD APP SDK v3.0 Beta Developer Release Notes
  73. ^ AMD OpenCL™ 2.0 Driver AMD OpenCL 2.0ドライバーはGCN第1世代以降のAMDグラフィックス製品と互換性がある。
  74. ^ Intel® OpenCL™ Code Builder | Intel® Developer Zone
  75. ^ OpenCL* 2.0 の不均等なワークグループ | iSUS Broadwell世代以降のIntel CoreシリーズはOpenCL 2.0に対応している。
  76. ^ インテル® SDK for OpenCL Applications 2013 よくある問い合わせ | iSUS
  77. ^ Mac computers that use OpenCL and OpenGL graphics - Apple サポート
  78. ^ clGetProgramInfo
  79. ^ clCreateProgramWithBinary
  80. ^ OpenCL meets FPGA #1 入門編 - Qiita
  81. ^ Knowledge Base - AMD
  82. ^ クロノス・グループ、SPIR 2.0の暫定仕様を公開 - 日刊工業新聞 Business Line - 企業発表
  83. ^ cl_khr_spir
  84. ^ SPIR - The first open standard intermediate language for parallel compute and graphics
  85. ^ Intel® VTune™ Amplifier XE: Getting started with OpenCL* performance analysis on Intel® HD Graphics | Intel® Developer Zone
  86. ^ インテル® VTune™ Amplifier XE | iSUS
  87. ^ CodeXL for game developers: How to analyze your HLSL for GCN - AMD
  88. ^ NVIDIA Nsight Visual Studio Edition
  89. ^ gpgpu-sim/gpgpu-sim_distribution · GitHub
  90. ^ OpenCL Emu Documentation
  91. ^ a b Trying Intel OpenCL On Linux For Video Encoding Phoronix 2014年9月2日
  92. ^ CUDA/OpenCL/Mercury Playback Engine について(Adobe Premiere Pro)
  93. ^ Photoshop CC および CC 2014 GPU FAQ
  94. ^ Dev:2.6/Source/Render/Cycles/OpenCL - BlenderWiki
  95. ^ V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.
  96. ^ V-Ray Japanese official website - Chaos Group / Chaos Software / OakCorp.
  97. ^ V-Ray RT and GPU rendering
  98. ^ GPUレイトレーシング | NVIDIA
  99. ^ OpenCV 2.2 Released - ROS robotics news
  100. ^ アルテラ、国際カーエレクトロクス技術展(カーエレJAPAN)に出展
  101. ^ オートモーティブワールド2015 開催直前情報:アルテラが披露するFPGAを活用した“今すぐ使える”車載向けソリューション - MONOist(モノイスト)
  102. ^ PixarAnimationStudios/OpenSubdiv · GitHub
  103. ^ FFmpeg 2.0 Released With OpenCL, Many Changes Phoronix 2013年7月10日

外部リンク[編集]