インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーにのみ適用されます。
offload プラグマを、複合文を含むすべての文の前に配置することができます。 offload プラグマ付きの文は OpenMP* parallel プラグマにもなります。
次に例を示します。
#pragma offload target(mic : target_id) \ in(all_Vals : length(MAXSZ)) \ inout(numEs) out(E_vals : length(MAXSZ/2)) for (k=0; k < MAXSZ; k++) { if ( all_Vals[k] % 2 == 0 ) { E_vals[numEs] = all_Vals[k]; numEs++; } }
このコードブロックは、最初の 10 個の偶数を検索して配列に格納します。コードブロックの先頭は offload プラグマです。 コンパイラーは、CPU とコプロセッサーの両方で実行するようにコードブロックをビルドします。
ホスト CPU とコプロセッサーの命令セットは似ていますが、同じシステムメモリーを共有しません。このため、コードブロックで使用する変数はホスト CPU とコプロセッサーの両方に存在していなければなりません。プラグマは、指定子を使用してホスト CPU とコプロセッサー間でコピーする変数を定義します。
in 指定子は、コプロセッサーの入力に使用する変数を定義します。 この変数はホスト CPU にコピーされません。
out 指定子は、コプロセッサーの出力に使用する変数を定義します。 ホスト CPU はこの変数をコプロセッサーにコピーしません。
inout 指定子は、ホスト CPU からコプロセッサーおよびコプロセッサーからホスト CPU にコピーされる変数を定義します。
プラグマには、複数のコプロセッサーを持つシステムの特定のコプロセッサーを指定する target (mic:target_number) 指定子も含まれています。
デフォルトでは、コンパイラーは CPU とコプロセッサーの両方で実行するアプリケーションを生成しますが、-no-offload コンパイラー・オプションを使用して、同じソースコードから CPU のみで実行するアプリケーションを生成することもできます。