Khronos Group News Archives

クロノス・グループ、SPIR 2.0の暫定仕様を公開

2014年8月12日(北米時間2014年8月11日) ニュースリリース クロノス・グループ、SPIR 2.0の暫定仕様を公開 ヘテロジニアス・コンピューティング向けオープンでクロス・プラットフォーム対応インターメディエイト規格が、OpenCL 2.0デバイス・プログラムのコード化方式に対応 業界を代表するハードウェア・ソフトウェア企業各社から構成されたオープンなコンソーシアム「The Khronos™ Group」(代表:二ール・トレベット、以下:クロノス)は、SPIR™ 2.0の暫定仕様を承認し、公開したと発表しました。OpenCL™ 2.0デバイス・プログラムは「非ソース」コード化方式に対応し、バイナリ・レベルの可搬性も保ちます。SPIR (Standard Portable Intermediate Representation) は、クロス・プラットフォームに対応した業界初のオープンなインターメディエイト規格で、可搬性の高いヘテロジニアス並列コンピューティングを対象とし、LLVMのIR を基盤としています。SPIRには開発者にとっていくつか恩恵があり、機密にしたいカーネル・ソースを開示せずに済むほか、OpenCL C以外にも、Open CLのプラットフォームやデバイス向けに、さまざまな言語のフロント・エンドを容易に実装可能です。SPIRの仕様やレジストリは、ウェブ・ページ (https://www.khronos.org/registry/spir)で公開しています。 SPIRが開発されるまで、ヘテロジニアス・システム上の並列処理アクセラレーション機構にアクセスするツールや言語を開発するためには、各ベンダー独自のハードウェア・アーキテクチャーに応じて、コンパイラのバック・エンドを実装しなければならず、個別的で詳細な知識が必要でした。SPIR規格の公開により、各ベンダーはそれぞれのハードウェア上で、SPIR形式のバイナリが高速に動作するようにします。その結果、単体のアクセラレータ・ボード、チップ上のシステム、グラフィックス・プロセッサ、FPGAなど、さまざまなプラットフォーム上で動作するプログラムが、高レベル言語で記述できるようになりました。たとえばOpenACC、C++ AMP、Pythonの開発者は、SPIR形式のバイナリを生成するように実装するだけで、各ベンダーが最適化したバック・エンドを使って動作させることが可能です。 SPIRを採用すれば、可搬性の高い並列プログラムを開発するための、コンパイラ用ミドルウェアの豊富なエコシステムも、LLVMやOpenCLなどの強力な基盤上に構築できます。SPIR 2.0はLLVM 3.4 IRを特殊化したものですが、OpenCL特有のセマンティックも組み込んでいます。cl_khr_spirはOpenCL 1.2および2.0に対する標準のエクステンションで、SPIRのインスタンスからOpenCLのプログラム・オブジェクトを生成し、ランタイムにロードする方法を定義しています。SPIRの開発後、その有効性は複数のベンダーによるOpenCLの実装により検証されました。また、KhronosとLLVMやClangのコミュニティーとの間で交わされた協議プロセスも有意義なものでした。 SPIR 2.0の暫定仕様公開は、OpenCL開発者のコミュニティーに最終仕様の確定前にフィードバックをするために行いました。Khronosのフォーラム(https://www.khronos.org/opencl/spir2_0_feedback_forum)への投稿をお待ちしています。 OpenCL 2.0では、ホストとデバイスのカーネルが直接、ポインターで連結された複雑なデータ構造(木、リンク・リストなど)を共有できるので、非常に適応性の高いプログラミングが可能であり、ホストとデバイス間のコストがかかるデータ転送を削減できます。SPIR 2.0は、OpenCL C 2.0に組み込まれた、次のような新機能にも対応しています。 汎

    用アドレス空間:引数に対して名前つきアドレス空間を指定せずに、関数を記述できます。ある型を指すポインターとして宣言された引数の場合に、特に有用です。アプリケーションで用いる名前つきアドレス空間それぞれに対応して、いくつもの関数を記述する必要がありません。 デバイス側カーネルによるエンキュー:デバイス側のカーネルは、ホストの介入なしに、当該デバイス上のキューに作業を入れてスケジューリングできます。適応性の高い作業スケジューリング・パラダイムが実現され、デバイスとホスト間で実行制御や実行データをやり取りする必要がなくなるので、ホスト・プロセッサ側のボトルネックの軽減に貢献します。 C++11のアトミック:C11のアトミックや同期演算のサブセット。ある作業アイテムを可視状態にして、別の作業アイテムに代入できます。これは、ある作業グループ内あるいは異なる作業グループ上で実行でき、さらにこの機構により、OpenCLデバイスとホスト間でデータ共有することも可能です。 パイプ:データを格納するメモリー・オブジェクトで、FIFOで動作します。OpenCL 2.0には、パイプの読み書きをおこなう、カーネル用の組み込み関数があり
ます。OpenCLの実装者がパイプというデータ構造を高度に最適化して実装し、これを簡単にプログラムに組み込めるようにするのが目的です。 AMDでヘテロジニアス・アプリケーションおよび開発者ソリューション担当バイス・プレジデントを務めるManju Hegde氏はこうコメントしています。「私たちは、ヘテロジニアス・コンピューティングの可能性を充分に引き出すためには、OpenCL、SPIRが正しい取り組みであると考えており、AMDはこれからもOpenCL、SPIRなどといった業界標準への支援を継続します。SPIRが今後もOpenCL 2.0に対応して発展し、プラットフォームを改善し、ヘテロジニアス・システム用言語にさらなる革新をもたらすものと期待しています。SPIR 2.0は、業界が広く求める、非常に柔軟性の高い標準バイナリ形式の仕様です。コンパイラや言語のベンダーは、共通のクロス・プラットフォームを対象として、コードを生成するようになるでしょう。」 KhronosはSPIR以外にも、次に挙げるオープン・ソース・ソフトウェア・コンポーネントを開発し、LLVMやClangと同じライセンス方式で、Github経由で公開しています。 Op
    enCL Cによるカーネル言語デバイス・プログラムからSPIRを生成するよう改変したClang。 SPIRモジュール検証プログラム(LLVMパスの形式で記述)。 SPIR組み込み名のマングラー:スタンドアローンのライブラリーおよび実行形式ファイルとして記述:。 SPI
Rの仕様に現れるすべての列挙値の定義を記述したヘッダー・ファイル。 SPIR 1.2は、Clang/LLVM 3.2、SPIR 2.0はClang/LLVM 3.4をそれぞれ使っています。リソースの詳細は、ウェブ・サイト(https://github.com/KhronosGroup)から入手可能です。 Khronos Groupについて The Khronos Groupは、さまざまなプラットフォームやデバイス上で並列コンピューティング、グラフィックス、ビジョン、センサー・プロセッシング、ダイナミック・メディアのオーサリング及び高速化を可能とする、オープンな業界標準の仕様策定を行うコンソーシアムです。クロノスが仕様策定する業界標準にはOpenGL®, OpenGL® ES, WebGL™, OpenCL™, SPIR™, SYCL™, WebCL™, OpenVX™, OpenMAX™, OpenVG™, OpenSL ES™, StreamInput™, COLLADA™, glTF™があります。クロノスの会員は各仕様の策定作業に参画し、一般公開前のさまざまな過程で仕様策定に関する投票を行うことができるほか、仕様のドラフトへのアーリーアクセスならびにコンフォーマンス・テストを通して、自身のプラットフォームやアプリケーション開発の期間短縮や機能強化に役立てることができます。詳細情報はWebサイトで公開されています(www.khronos.org)。 ### Khronos, DevU, StreamInput, SPIR, SYCL, WebGL, WebCL, COLLADA, OpenKODE, OpenVG, OpenVX, glTF, OpenSL ES and OpenMAX are trademarks of the Khronos Group Inc. ASTC is a trademark of ARM Holdings PLC, OpenCL is a trademark of Apple Inc. and OpenGL is a registered trademark and the OpenGL ES and OpenGL SC logos are trademarks of Silicon Graphics International used under license by Khronos. All other product names, trademarks, and/or company names are used solely for identification and belong to their respective owners. end 詳しく