検索に移動この項目では、並列コンピューティングのフレームワークについて説明しています。旧称OpenCLの暗号化ライブラリについては「Botan」をご覧ください。Heterogeneous)を利用した並列コンピューティングのためのクロスプラットフォームなAPIである。主な用途は科学技術計算や画像処理に代表される高性能計算のためのアプリケーションソフトウェアの高速化(ハードウェアアクセラレーション)であり、シミュレーション可視化に用いるリアルタイム3次元コンピュータグラフィックスAPIとの連携も拡張機能として標準化されている。Profileが存在する。Group)によって策定されている。仕様はロイヤリティフリーなオープン標準として公開されており、仕様に基づいたフレームワークの実装はサードパーティーによって行われる。fee'(名目上の手数料)が必要である[3]。特徴[編集]OpenCLには次のような特徴がある。1.2以降の拡張)グラフィックスAPIとの関連性および相互運用性[編集]OpenCL類似技術にNVIDIAのCUDA(後述)が存在するが、OpenCLにはCUDA同様に、3DグラフィックスAPIであるOpenGL(クロスプラットフォーム)およびDirect3D(Windowsプラットフォーム専用)との相互運用性(Interoperability)がAPIレベルで確保されている。2.0時点でもベンダーごとの拡張機能依存となっている(cl_d3d9_ext.h)。OpenCLでのhalf/double型のサポート状況は、CUDAなどのほかのAPIとよく似ている[8]。OpenGL/Direct3Dでは浮動小数点テクスチャすなわちデータストレージのフォーマットとしてFP32形式のほかにFP16形式を選択できるが、通例GPUが得意とする演算精度は単精度であるため、シェーダープログラム中で利用できる演算精度は一般的には単精度となり、倍精度や半精度はオプション扱いとなる。Loaderという仕組みにより、複数のベンダーによるOpenCL実装を混在させることができる(cl_khr_icd)[9]。APIを通じて列挙・選択することができる。OpenCLはカーネルコードの実行ハードウェアを「デバイス」として抽象化する。APIを通じて列挙・選択できる。Leopardの次期メジャーバージョンとされる)に搭載される予定の技術の1つとして初めて発表された[10]。おいて、アップルによってOpenCLの仕様草案が提案された[11]。Remedy、IBM、イマジネーション・テクノロジーズ(英語版)、インテル、ノキア、NVIDIA、モトローラ、QNX、クアルコム、サムスン、Seaweed、テキサス・インスツルメンツ、スウェーデン・ウメオ大学が参加している。Groupと改められ、新たにアクティビジョン・ブリザード、バルコ、ブロードコム、エレクトロニック・アーツ、エイチアイ、ケストレル研究所、Movidia、RapidMind(英語版)、TAKUMIが参加している。11月10日にはRapidMindが自社の並列コンピューティング開発環境においてOpenCLを採用すると発表した[12]。1.0の仕様が発表された[13]。1.0をサポートすると発表した[14][15]。Leopardが2009年8月28日にリリースされた。1.1を正式発表[16]。float3型の追加、clSetKernelArg()関数以外のスレッドセーフ化[17]など。1.2を正式発表[18]。1.2拡張機能、3Dイメージの書き込み拡張機能[19]など。2.0を正式発表[20]。2.1を正式発表[22]。プログラミング基盤共通化など。C++のリリースは早くて2016年半ばとアナウンスされた。2.2を正式発表[24]。1.2などが導入された。類似技術[編集]この節に雑多な内容が羅列されています。事項を箇条書きで列挙しただけの節は、本文として組み入れるか、または整理・除去する必要があります。(2015年6月)OpenCLのように異種プロセッサをバックエンドとして活用するAPIは、GPGPU黎明期のものや、GPU専用のもの、特定のベンダー専用のもの、そして仕様が標準化されていないものまで含めると多数存在する。TegraシリーズGPU用のGPGPU開発・実行環境。C++による開発も可能となっている)。Compilerが提供されている[28]。Metal)AMD社によるATI系GPUのストリームプロセッサインターフェイス。ハードウェアに近いローレベル制御を可能とする[29]。Stream)AMDによるATI系GPU用のGPGPU開発・実行環境。Layer(CAL)[30]によって抽象化し、Brook言語をCAL用に拡張したBrook+言語による開発を可能にする。その後、同社はHSA推進とともに、独自規格ではなくOpenCLをヘテロジニアス戦略の中核とする方向に舵を切り直した。SDKに変更・統一されている。(libsh)ウォータールー大学コンピュータグラフィックス研究室の成果に基づいた、RapidMindによるシェーダープログラミングおよびGPGPUのためのメタプログラミング技術。C++言語による開発を可能にする。LGPLライセンスで公開されている。RapidMindRapidMind(英語版)による商用並列コンピューティング開発環境。GPU/マルチコアCPU/Cellプロセッサをバックエンドに利用できる。C++言語による開発を可能にする。GPU)スタンフォード大学コンピュータグラフィックス研究室によるストリーム・コンピューティング開発環境。GPUおよびOpenMPによるマルチコアCPU演算をバックエンドに利用できる。拡張したBrook言語による開発を可能にする。BSDライセンスおよびGPLライセンスで公開されている。PeakStreamPeakStreamによる商用ストリーム・コンピューティング開発環境。Cellプロセッサをバックエンドに利用できる。PeakStreamは2007年6月頃までにGoogleによって買収されている。12セットに含まれるGPGPU向けのAPI。Shaderを利用する。HLSLをカーネル記述言語とする。グラフィックス連携用途を重視している[33]。AMPハードウェアアクセラレートされた並列処理をC++言語で記述できるようにする高レベルのライブラリ・言語拡張。Shader同様、OpenGLでもバージョン4.3でGPGPU向けのシェーダーステージが標準化された。GLSLをカーネル記述言語とする。GFXへオフロードするためのOpenMP拡張。実装されている[36]。4.0以降offloadに対応している。OpenMP®/Clangはoffloadに未対応[37]。5.0はMICへのオフロードに対応する予定[38]。OpenACCOpenMPのようにコード中にディレクティブを挿入することで、並列処理のハードウェアアクセラレートを行なえるようにする規格[39]。PGIが開発した技術で、同社のPGIコンパイラに初めて搭載された[40]。5.0に搭載される[41]。コンパイル可能[42]。ISPCはオープンソースであり、バックエンドにLLVMを使用している[42]。GPUにも対応している[43]。ISPCを導入している例としては、オープンソースのレイトレーシングエンジンであるEmbreeがある[44]。関連技術[編集]この節に雑多な内容が羅列されています。事項を箇条書きで列挙しただけの節は、本文として組み入れるか、または整理・除去する必要があります。(2015年6月)SASSNVIDIAのGPUで使われるハードウェア依存の低級アセンブリ言語[45]。Nsight開発環境がSASSレベルでのデバッグに対応している[45]。SASSのアセンブラは、asfermi[46]やMaxAs[47]などがある。SASS言語で書かれた例としては、NervanaGPUがある[48][49]。Execution)NVIDIAのGPU向けのハードウェア非依存な擬似アセンブリ言語[50]。PTXのアセンブラは、ptxasがある[50]。asm文によって、CUDAやOpenCLのコードにPTXのコードを埋め込むことも可能[51][52]。APIで実行したり[55]、ptxasでSASSへと変換することが可能[55]。IL)AMDのGPU向けのハードウェア非依存な擬似アセンブリ言語[56]。APIのcalclCompile関数で行なう[57]。ILのコードを埋め込むことも可能[要出典]。ILのサブセットはローレベルグラフィックスAPIであるMantleでも利用されている[58]。ISA)AMDのGPUで使われるハードウェア依存の低級アセンブリ言語。ISAアセンブリからllvm-asでバイナリ化したりすることが可能。APIのclCreateProgramWithBinary関数で実行する。GPU向けのアセンブラ[61]。Infrastructure)オープンソースなハードウェア非依存の中間言語[62]。3D/Gallium3Dの中間表現形式として使われている。OpenCL実装のために、LLVMのTGSIバックエンドが開発中となっている[63]。GPGPUだけでなく、グラフィックスにも対応している。Representation)クロノス・グループによって、OpenCLのために開発された中間言語。2.1およびVulkanとともに策定されるSPIR-Vでは、GPGPUだけでなく、グラフィックスにも対応している[64]。向けのハードウェア非依存な中間言語。AMDやLLVMのOpenCL実装がHSAIL中間表現形式の出力に対応している[65]。異種コア間のスケジューリングを前提としており、グラフィックスには非対応[66]。ベンダーから下記のSDKが提供されている。macOS用が提供されている。Toolkitにすべて含まれるようになった。