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

オフロードの開始

このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

offload プラグマを、複合文を含むすべての文の前に配置することができます。offload プラグマ付きの文は OpenMP* parallel プラグマにもなります。

次に例を示します。

#pragma offload target(mic : target_id) \
                            in(all_Vals : length(MAXSZ)) \
                            inout(numEs) out(E_vals : length(MAXSZ))
  for (k=0; k < MAXSZ; k++) {
      if ( all_Vals[k] % 2 == 0 ) {
        E_vals[numEs] = all_Vals[k];
        numEs++;
      }
  }

このコードブロックは、偶数を検索して配列に格納します。コードブロックの先頭は #pragma offload です。コンパイラーは、ホストとターゲットの両方で実行するようにコードブロックをビルドします。

ホストとターゲットの命令セットは似ていますが、同じシステムメモリーを共有しません。このため、コードブロックで使用する変数はホストとターゲットの両方に存在していなければなりません。プラグマは、指定子を使用してホストとターゲット間でコピーする変数を定義します。

プラグマには、複数のターゲットを持つシステムの特定のターゲットを指定する target (mic:target_number) 指定子も含まれています。

メインプログラムにオフロード構造が含まれる場合、デフォルトでは、コンパイラーはホストとターゲットの両方で実行するアプリケーションを生成します。ただし、[Q]offload コンパイラー・オプションを使用して、同じソースコードからホストのみで実行するアプリケーションを生成することもできます。

関連情報