クロノス・グループ、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には、パイプの読み書きをおこなう、カーネル用の組み込み関数があり
- enCL Cによるカーネル言語デバイス・プログラムからSPIRを生成するよう改変したClang。
SPIRモジュール検証プログラム(LLVMパスの形式で記述)。
SPIR組み込み名のマングラー:スタンドアローンのライブラリーおよび実行形式ファイルとして記述:。
SPI