OpenCL 3.0では、Less is more(少ないほど良い)です。2.x仕様の実装は難しかったため、1.2以降はすべてオプションになりました。

Table of Contents

OpenCL 3.0では、Less is more(少ないほど良い)です。2.x仕様の実装は難しかったため、1.2以降はすべてオプションになりました。

Khronos グループは、GPU と CPU の並行プログラミング機能を使用してソフトウェア パフォーマンスを高速化するために使用されるクロスプラットフォーム API のメジャー アップデートである Open CL 3.0 暫定仕様を発表しました。

OpenCL は、Vulkan (クロスプラットフォーム GPU グラフィックス API) と OpenCL ドライバーの両方を対象とする中間表現である SPIR-V や、SYCL (OpenCL コーディングを簡素化する C++ テンプレート ライブラリ) も含まれるプロジェクト ファミリの一部です。

並列処理に最適化されたGPUで汎用コンピューティングを実行できるだけでなく、CPUのマルチスレッド処理も容易に利用できることは、スーパーコンピュータのハイエンドだけでなく、PCやモバイルでもパフォーマンスに大きな違いをもたらす可能性があります。とはいえ、2011年にリリースされたOpenCL 1.2でさえ、多くの開発者にとって十分な性能を備えているようです。

「OpenCL 1.2は、あらゆるベンダーと市場に必要なベースラインとしてその実力を発揮しました」と、クロノス・グループのプレジデントであるニール・トレベット氏は述べています。そのため、OpenCL 3.0 [PDF] では「バージョン1.2以降のすべての機能がオプションになります」。これは後退のように思えるかもしれませんが、幅広いデバイスがOpenCL 3.0準拠のドライバを搭載できるようになり、開発者はOpenCL 2.xで導入された機能など、追加機能をクエリし、利用可能な場合にのみ使用するという考え方に基づいています。これはまた、実装者が不足しているOpenCL 2.xクエリを追加するだけで、ドライバを簡単に「アップグレード」できることも意味します。

この変更は、「モノリシック」なOpenCL 2.x仕様の問題への対応です。この仕様は、すべてを実装するのが困難であったため、導入の妨げとなっていました。Khronosはプレゼンテーションの中で、実装者は「ターゲット市場に関連しない場合は、コスト削減と品質向上のためにOpenCL 2.xの機能を削除することを選択する可能性がある」と示唆しています。

リスクは、OpenCL 1.2 がベース API として定着し、開発者がそれを超えることに乗り気でない可能性があることです。

並列プログラミングをサポートするCプログラミング言語拡張仕様であるOpenCL Cが、OpenCL C 3.0にアップデートされました。ただし、OpenCL C++言語は廃止され、ClangプロジェクトであるC++ for OpenCLが採用されました。C++ for OpenCLはOpenCL Cと互換性があり、SPIR-Vを出力します。

OpenCL 3.0 の新機能には、DMA を実装する組み込みプロセッサのサポートを改善することを目的とした非同期 DMA (ダイレクト メモリ アクセス) 拡張機能が含まれています。

本日発表されたOpenCLロードマップ

本日発表されたOpenCLロードマップ

Khronosによると、OpenCLの利用は増加傾向にあるという。同社のプレゼンテーションによると、AdobeのPremiere Rushビデオ編集アプリケーションには20万行のOpenCLコードが含まれており、人気のFolding@homeプロジェクトもOpenCLを使用している。オープンソースのGitHubリポジトリを分析したところ、約9,500のOpenCLプロジェクトがあり、3年前と比べて倍増している(ただし、GitHubリポジトリの総数も同じ時期に2倍以上に増加していることを考えると、この統計は必ずしも良いとは言えない)。同グループはさらに、DirectX 12でOpenCLを有効にするためにMicrosoftおよびCollaboraと共同で取り組んでいることを強調し、iOSおよびmacOSでのグラフィックスプログラミングのためにAppleのMetal APIでOpenCLを有効にする新しいプロジェクトの可能性について支援を求めた。

OpenCL 3.0では、「Less is more(少ないほど豊か)」が重要です。重要な特徴は、仕様をモジュール化することで、将来の機能強化を段階的に導入し、対象デバイスに適したドライバのサブセットで実装できるようにすることです。つまり、実際の機能はほとんど変更されないとしても、OpenCL 1.2ドライバからの移行が容易なため、理論上はOpenCL 3.0の導入は迅速に進むはずです。®

Discover More