Ahead-Of-Time (AOT) コンパイル

Ahead-Of-Time (AOT) コンパイルは、アプリケーションを実行するターゲットデバイスが事前に分かっている場合、開発ライフサイクルや展開時間の短縮に役立つ機能です。AOT 機能には、次のような利点があります。

特定のターゲットデバイス向けに AOT コンパイルされたプログラムは、それ以外のデバイスでは動作しません。実行時に適切なターゲットデバイスを検出して、ターゲットデバイスが存在しない場合はエラーを報告する必要があります。非同期例外ハンドラーによる例外処理の使用が推奨されます。

データ並列 C++ (DPC++) は、インテル® CPU、インテル® プロセッサー・グラフィックス (Gen9 以降)、およびインテル® FPGA で AOT コンパイルをサポートします。

必要条件

GPU ターゲット向けに AOT 機能を使用するには、OCLOC ツールがインストールされている必要があります。使用しているオペレーティング・システムにツールをインストールするには、『インテル® oneAPI ツールキット・インストール・ガイド』 (英語) の「OpenCL* オフライン・コンパイラー (OCLOC) のインストール」を参照してください。

インテル® CPU 向けに AOT を使用する方法

次のオプションがサポートされます。

例:

CPU ターゲット向けに複数のソースファイルを持つアプリケーションをビルド

方法 1: 最初に、通常のファイル (DPC++ カーネルなし) をコンパイルしてホスト・オブジェクトを作成します。次に、カーネルコードを含むファイルをコンパイルし、1 つのコマンドラインで残りのアプリケーションとリンクします。

方法 2: 最初に、カーネルコードを含むファイルをコンパイルして、FAT オブジェクトを作成します。次に、残りのファイルをコンパイルして、1 つのコマンドラインでリンクして FAT 実行ファイルを作成します。

現在、方法 2 は HOST セレクターでのみ動作します。

インテル® インテグレーテッド・グラフィックス (Gen9 以降) 向けに AOT を使用する方法

次のオプションがサポートされます。

すべてのデバイスタイプを表示するには、次のコマンドを使用します。

ocloc compiler --help

複数のターゲットデバイスがリストされている場合、インテル® oneAPI DPC++/C++ コンパイラーはこれらのターゲットごとにコンパイルし、この方法で作成されたすべてのデバイスバイナリーを含む FAT バイナリーを作成します。

サポートされる -device パターンの例: