クロノス・グループ、並列プログラム向けにOpenCL C++カーネル言語を用いた OpenCL 2.2暫定仕様を発表

OpenCL C++の補完・対応となるSYCL 2.2およびSPIR-V 1.1の暫定仕様を同時発表

業界を代表するハードウェア/ソフトウェア企業から構成される、オープン・コンソーシアムのクロノス・グループ(以下: クロノス)は、OpenCL™ 2.2, SYCL™ 2.2およびSPIR-V™ 1.1の暫定仕様を直ちに利用できるように公開したと発表しました。並列プログラミングの生産性の飛躍的な向上のため、OpenCL 2.2にはOpenCL C++言語によるカーネルが組み込まれています。SYCL 2.2は、OpenCL C++の有用性の最大限の活用と、ホストおよびデバイスのプログラムコードの単一ソースファイル収容を両立させています。また、SPIR-V 1.1はクロノスの定義による中間表現を拡張し、OpenCL C++カーネル言語の完全対応のためにシェーダ機能および演算処理カーネル機能をネイティブでサポートします。これらの最新仕様は、Khronos Forum(https://forums.khronos.org/)経由をはじめ、仕様の正式確定前にデベロッパ会員およびインプリメンター会員がフィードバックを投稿できるよう、http://www.khronos.orgにて暫定形式でリリースしています。

クロノスの代表で、OpenCLワーキング・グループのチェアを務めるニール・トレべットは、次のようにコメントしています。「並列プログラミングの生産性を高めるため、クロノスは本日OpenCL C++カーネル言語をクロノス定義の中間言語に対応させるSPIR-V 1.1とOpenCL 2.2の同時発表に加えて、OpenCL 2.2を活用しシングルソースC++プログラミングを実現するSYCL 2.2を発表しました。OpenCL 2.2は、デベロッパからの要望が最も高かったOpenCL C++カーネル言語をコアに取り入れています。」

OpenCL 2.2について
OpenCL 2.2では、OpenCL C++カーネル言語をC++14標準規格の静的サブセットとして定義しています。OpenCL C++には、クラス、テンプレート、ラムダ式表現、関数多重定義等、数々のコンストラクタが含まれており、ジェネリックプログラミングおよびメタプログラミングを使った並列プログラミングの生産性を高めています。

OpenCLライブラリー関数もC++言語の利点を活用することができるようになり、アトミック、イテレータ、画像、サンプラー、パイプ、デバイスキューの組込み型とアドレス空間等の機能が使えるほか、安全性の向上と未定義動作の削減も同時に実現しています。パイプストレージは、OpenCL 2.2で採用されたデバイスサイドの型で、コンパイル時に接続のサイズと型を既知とすることでカーネル間の効率的なデバイススコープ通信が可能となり、FPGAの実装に有用となります。

また、OpenCL 2.2には生成コードの最適化を向上させる機能も含まれています。特化定数の値をSPIR-Vコンパイル時にアプリケーション側から指定、 新規のクエリーによってプログラムスコープグローバルオブジェクトの非自明なコンストラクタおよびデストラクタを検知、ユーザーコールバックのプログラムリリース時での設定等が可能です。

SYCL 2.2について
SYCL 2.2は、OpenCL 2.2の機能の活用と、ホストおよびデバイスのプログラムコードの単一ソースファイル収容を両立させました。SYCLは、最小のOpenCL 1.2対応組込みデバイスから、最先端のOpenCL 2.2アクセラレータに至る、あらゆる演算デバイスの可能性を広げるC++テンプレートライブラリを、デベロッパが独自あるいは非標準のコードに頼らずに組めるよう、OpenCLのハードウェア機能をC++標準規格の方向性にマッチさせたものです。クロノスが主催するオープンソース型SYCL向けC++ 17並列STL(C++ 17 Parallel STL for SYCL)により、次のC++標準規格を共有仮想メモリ、ジェネリックポインタ、デバイスサイドキュー等のOpenCL 2.2機能に対応させることができます。

OpenCL C++およびSYCLが利用可能となることで、デベロッパは2種類のC++から選択を行えることになります。デバイスサイド・カーネルのソースコードとホストコードを分離したい場合には、C++カーネル言語が最適な選択となります。これが現在OpenCL Cで用いられている手法であり、グラフィックスソフトウェアのシェーダに幅広く採用されている手法です。SYCL、OpenMP、 C++ 17 Parallel STLで採用されているもうひとつの手法が、一般的に「シングルソース」C++と呼ばれている手法です。これは、SYCLとC++カーネル言語双方の仕様を定めることで、クロノスはデベロッパに対して最大限の選択肢を提供すると同時に、プログラムコードがこれらふたつの補完的手法で簡単に共有できるよう、2種類の仕様を整理しました。

Codeplay社のCEOであり、クロノスでSYCLワーキング・グループのチェアを務めるアンドリュー・リチャーズ氏は、次のようにコメントしています。「Codeplayは、高度なヘテロジニアス・プロセッサ・ソリューションを実現するこれらの新しいオープン規格を、引き続き支持・推進していきます。モバイル、クラウド、IoT、先進運転支援システム(ADAS)等に組込まれるコンピュータビジョン高速化処理アプリケーションには、並列ソフトウェア開発プロセス全般を簡素化するクロノスの改良オープン規格が有用です。」

SPIR-V 1.1について
SPIR-V(Standard Portable Intermediate Representation)は、並列演算とグラフィックスのネイティブ表現用クロスAPI中間言語としては、はじめてのオープン規格です。SPIR-V 1.1では、コンストラクタおよびデストラクタ対応の初期化子および終了化子関数実行モード等、OpenCL 2.2で使われるOpenCL C++カーネル言語の全機能をサポートしています。また、名前付きのバリア、サブグループ実行、プログラムスコープパイプへの対応により、カーネルプログラムの表現力も向上しています。

SPIR-V 1.0においてVulkan™グラフィックス・シェーダ用に使用可能であった特化定数は、SPIR-V 1.1によってOpenCLでも使えるようになりました。この機能により、ランタイム時に特化可能なコンパイル時間設定が組込みまれ、一連のパラメータ化OpenCLカーネルプログラムを単一SPIR-Vモジュールで表現できます。その結果、デバイスプログラムの複数変数の出力や、コンパイル設定の異なるオンザフライソースからそれらの変数を再コンパイルする必要が省け、出力プログラムのサイズやアプリケーション起動時間を大幅に縮減できます。

YetiWare社の創設者でもあり、CTOでもあるAJ ・ギヨン氏は次のようにコメントしています。「OpenCL C++は、業界全体にとっても文字通りプラス・プラスな存在です。デベロッパからの有意義なフィードバックをもとに、OpenCLワーキング・グループは OpenCL C++におけるC++ のイディオムとスタイルの維持にコミットしています。このことは、性能の最大化と高品位なコーディングの両立を望むデベロッパにとって非常に重要なことであり、当社YetiWareのOpenCLトレーニングプログラムにも即刻取り入れようと考えています。」

Khronos Groupについて
The Khronos Groupは、さまざまなプラットフォームやデバイス上で並列コンピューティング、グラフィックス、ビジョン、センサー・プロセッシング、ダイナミック・メディアのオーサリング及び高速化を可能とする、オープンな業界標準の仕様策定を行うコンソーシアムです。クロノスが仕様策定する業界標準にはVulkan™, OpenGL®, OpenGL® ES, WebGL™, OpenCL™, SPIR™, SPIR-V™, SYCL™, WebCL™, OpenVX™, EGL™, COLLADA™, glTF™があります。クロノスの会員は各仕様の策定作業に参画し、一般公開前のさまざまな過程で仕様策定に関する投票を行うことができるほか、仕様のドラフトへのアーリーアクセスならびにコンフォーマンス・テストを通して、自身のプラットフォームやアプリケーション開発の期間短縮や機能強化に役立てることができます。詳細情報はWebサイトで公開されています(www.khronos.org)。

###

Khronos, Vulkan, DevU, SPIR, SPIR-V, SYCL, WebGL, WebCL, COLLADA, OpenKODE, OpenVG, OpenVX, EGL, glTF, OpenKCAM, StreamInput, OpenWF, 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.