oneAPI プログラミング・モデル

ヘテロジニアス・コンピューティングでは、ホスト プロセッサーはアクセラレーター デバイス の利点を活用して、コードをより効率良く実行します。

oneAPI プログラミング・モデルは、ヘテロジニアス・コンピューティングの 2 つの重要な移植可能な手法をサポートしています: SYCL* を使用したデータ並列 C++ と OpenMP* (C、C++、Fortran 向け)。

SYCL*

SYCL* は、単一ソースファイルに含まれるアプリケーションのホストコードとカーネルコードで標準の ISO C++ を使用して、異種プロセッサーのコードを記述することを可能にするクロスプラット・フォームの抽象化レイヤーです。DPC++ オープンソース・プロジェクトは、LLVM C++ コンパイラーに SYCL* のサポートを追加しています。インテル® oneAPI DPC++/C++ コンパイラーは、インテル® oneAPI ベース・ツールキットに含まれています。

SYCL* カーネルの互換性

SYCL* 2020 仕様に従って、DPC++ は SYCL* カーネル内でオプションのカーネル機能の使用を検出します。カーネルは、デバイスがカーネルが要求するすべての側面で device::has() が true を返す場合にのみ、そのデバイスと互換性があるとみなされます。実際には、特定のデバイスで作成された kernel_bundle には、デバイスがサポートしない要件を持つカーネルが含まれず、互換性のないデバイスでカーネルを起動すると、sycl::exception がスローされることを意味します。

カーネル内の要件の起源を特定するのは難しい場合があるため、ユーザーはカーネルに sycl::device_has 属性を追加できます。コンパイラーは、カーネルの sycl::device_has 属性に明示されないカーネルに対して推測されたアスペクト要件をユーザーに警告します。この動作は SYCL* 2020 仕様で必須であることに注意してください。

OpenMP*

OpenMP* は 20 年以上に渡り標準化されてきたプログラミング言語であり、インテルは OpenMP* 標準のバージョン 5.0 を実装しています。OpenMP* のオフロード機能をサポートするインテル® oneAPI DPC++/C++ コンパイラーは、インテル® oneAPI ベース・ツールキットとインテル® HPC ツールキットに含まれます。OpenMP* オフロードをサポートするインテル® Fortran コンパイラー・クラッシックとインテル® Fortran コンパイラーは、インテル® HPC ツールキットで提供されます。

OpenMP* は、FPGA デバイスではサポートされません。

次のセクションでは、それぞれの言語について簡単に説明し詳細情報の参照先を示します。