インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

インテル® グラフィックス・テクノロジー

このトピックは、インテル® グラフィックス・テクノロジーをターゲットとする場合にのみ適用されます。

インテル® グラフィックス・テクノロジー対応のインテル® プロセッサーの多くのモデルでは、並列化可能なかなりの作業をプロセッサー・グラフィックス上で実行できます。多くの場合、このオフロードはわずかなコードを追加するだけで済みます。コンパイルする場合、インテル® C++ コンパイラーを利用すると、CPU 向けに記述されている既存のスカラーまたは並列 C/C++ コードを、容易にプロセッサー・グラフィックスへオフロードできます。

次の表に、プロセッサー・グラフィックスへのオフロードをサポートしているアーキテクチャーと OS の組み合わせを示します。

ビルド

インテル® グラフィックス・テクノロジー対応プロセッサーでの実行

インテル® 64、Linux*

インテル® 64、Linux*

インテル® 64、Windows*

インテル® 64、Windows*

IA-32、Windows*

プロセッサー・グラフィックスに計算をオフロードするアプリケーションを実行する場合、インテル® グラフィックス・テクノロジー対応のインテル® プロセッサーに加えて、必要なランタイムサポートを提供するインテル® HD グラフィックス・ドライバーがインストールされていなければなりません。

インテル® コンパイラーでは、インテル® グラフィックス・テクノロジーで実行するターゲットコードを個別にコンパイルおよびリンクできます。また、オープンソースの binutils パッケージにより、ターゲットカーネルのリンクをサポートするリンカーが提供されています。詳細は、リリースノートを参照してください。

コンパイラーは、CPU (ホスト) でネイティブ実行するコード領域と、プロセッサー・グラフィックス (ターゲット) へオフロードするコード領域を生成します。オフロードランタイムは、ターゲットへのオフロード処理に使用されるランタイム・ライブラリーを参照します。

コンパイラーとオフロードランタイムは、次の操作を可能にします。

さらに、次の操作を簡単に行えるようにします。

インテル® グラフィックス・テクノロジー向けコンパイル

インテル® グラフィックス・テクノロジー向けのオフロード拡張を含むソースファイルをコンパイルする場合、生成されるオブジェクト・ファイルにターゲット・オブジェクトが組込まれます。このオブジェクト・ファイルは fat オブジェクトと呼ばれます。ターゲット・オブジェクトのセクション名は .gfxobj です。FAT オブジェクトをリンクする場合、ターゲット実行ファイルは次のようになります。

ターゲット・オブジェクトまたはターゲット実行ファイルは、offload_extract ツールを使用して FAT オブジェクトまたは FAT 実行ファイルから抽出できます。

インテル® グラフィックス・テクノロジー向けプログラミング

コンパイラーは、プロセッサー・グラフィックスへのオフロードで、次のプログラミング・モデルをサポートします。

プログラミング・モデルが同期オフロード、非同期オフロード、または両方をサポートするかどうかは重要です。同期オフロードでは、オフロードを開始する CPU スレッドは常にオフロードが完了するまで待機します。オフロード処理は、データの共有/非共有を伴います。多くの場合、同期オフロードは非効率的です。例えば、オフロードを開始した CPU スレッドは、オフロードが完了するまで待機する代わりに有用な作業を行うことができます。また、1 回共有することで、同じデータを複数のオフロードで使用できることもあります。そのような場合は、非同期オフロードを使用すべきです。3 つのプログラミング・モデルのうち、OpenMP* ベースのモデルとインテル® Cilk™ Plus ベースのモデルは同期モードと非同期モードをサポートしますが、API ベースのモデルは非同期モードのみサポートします。

コンパイラーは、インテル® グラフィックス・テクノロジー・向けのプログラミングを支援するため、次の言語拡張を提供しています。

CPU とプロセッサーグラフィック間でメモリーを共有するモードは 2 つあります。

共有仮想メモリーに関するセクションに、SVM モードを使用する場合のプログラミングの相違点の説明があります。

インテル® グラフィックス・テクノロジー向けビルド

コンパイラーには、インテル® グラフィックス・テクノロジー用のバイナリーをビルドする際に使用できる、次のコンパイラー・オプションと環境変数が用意されています。

コンパイラー・オプション

説明

qoffload、Qoffload

オフロードのモードを指定します。このオプションの否定形は、オフロード言語構造を無視します。

qoffload-attribute-target、Qoffload-attribute-target

ソースファイル中のすべてのグローバルルーチンとグローバル・データ・オブジェクトにオフロード属性 target(gfx) のフラグを付けます。

qoffload-option、Qoffload-option

指定したターゲットとツールで使うオプションを指定します。

qoffload-arch、Qoffload-arch

オフロードコードのターゲット・アーキテクチャーを指定します。

mgpu-asm-dump、Qgpu-asm-dump

オフロードするプロセッサー・グラフィックス用コードのネイティブ・アセンブリー・リストを生成します。

mgpu-arch、Qgpu-arch

特定のグラフィックス・プロセッサーで実行するグラフィックス用のオフロードコードをビルドします。

qopenmp、Qopenmp

並列化機能が OpenMP* ディレクティブに基づいてマルチスレッド・コードを生成できるようにします。

qopenmp-offload、Qopenmp-offload

target プラグマの OpenMP* オフロードコンパイルを有効/無効にします。

インテル® グラフィックス・テクノロジーで利用可能な環境変数の一部を以下に示します。

環境変数

説明

GFX_CPU_BACKUP

ターゲットが利用できない場合、ホスト上でヘテロジニアス・コードを実行するかどうかを制御します。

GFX_MAX_THREAD_COUNT

ループの入れ子を並列化する際のターゲットスレッドの最大数を制御します。

GFX_OFFLOAD_TIMEOUT

オフロードタスクの実行時間を制御します。

GFX_SHOW_TIME

実行の最後にタイミング情報を出力するかどうかを制御します。

関連情報