数ヶ月前に共有しました ここのブログでのニュース によるOpenCL3.0の開発のリリース クロノスの懸念 (OpenGL、Vulkan、およびOpenCLファミリの仕様の開発を担当します)。
そしてそれは最近まででした OpenCL3.0の最終仕様のリリースが発表されました、APIとC言語の拡張機能を定義して、マルチコアCPU、GPU、FPGA、DSP、およびスーパーコンピューターやクラウドサーバーで使用されるものからモバイルデバイスや統合テクノロジーで使用されるチップまで、その他の特殊なチップを使用してマルチプラットフォーム並列コンピューティングを編成します。
同時に、オープンソースのOpenCLSDKがリリースされました ツール、例、ドキュメント、ヘッダーファイル、OpenCL3.0準拠のアプリケーションを開発するためのC ++およびCライブラリへのリンク。
Clangコンパイラに基づくOpenCL3.0の初期実装も示されています。 これは、メインのLLVMパッケージに含めるためのピアレビュー段階にあります。 IBM、NVIDIA、Intel、AMD、Apple、ARM、Electronic Arts、Qualcomm、Texas Instruments、Toshibaなどの企業がこの規格に貢献しています。
本日、Khronos®OpenCL™ワーキンググループは、新しい統合OpenCL C3.0言語仕様を含む最終的なOpenCL3.0仕様のリリースと、開発者が迅速に立ち上がることを可能にするKhronos OpenCLSDKの早期初期リリースを発表できることを嬉しく思います。 OpenCLでスピードアップ。
OpenCL3.0の主な機能
OpenCL 3.0APIを今すぐ OpenCLのすべてのバージョンをカバーしています (1.2、2.x)、 個別の仕様を提供せずに バージョンごとに。
OpenCL 3.0は、OpenCL 1.2 / 2.Xのモノリシックな性質を妨げることなく、オプションの形で重複する追加の仕様を統合することにより、コア機能を拡張する機能を提供します。
に準拠する機能のみ OpenCL1.2は必須と宣言されています、およびで提案されているすべての機能 OpenCL2.x仕様はオプションと呼ばれます.
このアプローチにより、OpenCL 3.0と互換性のある特殊な実装の作成が簡素化され、OpenCL3.0を使用できるデバイスの範囲が広がります。
例えば メーカーは、特定のOpenCL 3.0.x機能を実装しなくても、OpenCL2のサポートを実装できます。 オプションの言語関数にアクセスするために、テストリクエストシステムがOpenCL 3.0に追加され、個々のAPI要素と特別なマクロのサポートを評価します。
以前にリリースされた仕様と統合することで、アプリケーションをOpenCL3.0に簡単に変換できます。 OpenCL 1.2アプリケーションは、変更なしでOpenCL3.0をサポートするデバイスで実行できます。
アプリケーション OpenCL2.xもコードの変更を必要としません。 ただし、OpenCL 3.0環境が必要な機能を提供する場合(将来の移植性のために、OpenCL 2.xアプリケーションは、使用されているOpenCL 2.x機能との互換性を評価するためのテストクエリを追加することをお勧めします)。
OpenCLを実装しているドライバー開発者は、特定のAPI呼び出しのリクエスト処理のみを追加し、時間の経過とともに機能を徐々に増やすことで、製品をOpenCL3.0に簡単にアップグレードできます。
OpenCL 3.0仕様は、環境、拡張機能、および仕様に合わせて調整されています。 一般的な中間体SのPIR-V、VulkanAPIでも使用されます。 SPIR-V 1.3仕様のサポートは、オプション機能としてメインのOpenCL3.0に含まれています。 計算コアにSPIR-V中間表現を使用することにより、サブグループを使用した操作のサポートが追加されました。
それに加えて DMA操作を実行するための拡張機能のサポートが追加されました DSPのようなDMAチップで非同期がサポートされています。
非同期DMAを使用すると、DMAトランザクションを使用して、進行中の計算やその他のデータ転送と並行して、グローバルメモリとローカルメモリ間でデータを非同期に転送できます。
並列プログラミング拡張機能の仕様 言語のために Cがバージョン3.0に更新されました また、C ++用のOpenCL言語拡張機能の開発は中止され、「C ++ forOpenCL」プロジェクトが採用されました。
Vulkan APIを介してOpenCLを変換するために、clspvコンパイラが提案されています。 これは、OpenCLカーネルをVulkan SPIR-V表現に変換し、clvkレイヤーを使用してOpenCLAPIがVulkan上で機能するようにします。