インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド

omp target

デバイスデータ環境を作成して同じデバイスで構文を実行します。このプラグマは、インテル® MIC アーキテクチャーおよびインテル® グラフィックス・テクノロジーにのみ適用されます。

構文

#pragma omp target [clause[, clause, ...]]

structured-block

引数

clause

次のいずれかです。

説明

このプラグマは、デバイスデータ環境を作成し、それを使用して、デバイスで構造化ブロックの計算を実行します。このプラグマに到達したタスクは、デバイス上の計算が完了するまで待機します。if(scalar-expression)false と評価されると、構造化ブロックはホストで実行されます。デフォルトでは、プログラムの実行はオフロードタスクが完了するまで待機します。nowait 節を指定すると、実行はオフロードタスクの完了を待たずに継続します。depend 節は、以前のタスクへの依存性を作成します。詳細は、task プラグマの説明を参照してください。

このプラグマは、構造化ブロックが omp parallel for として指定された並列ループの場合、インテル® グラフィックス・テクノロジーをサポートします。その場合、並列ループをプロセッサー・グラフィックスへオフロードします。if(scalar-expr) 式が false と評価された場合、またはターゲットデバイスが利用できない場合、構造化ブロックはホスト側でループを実行します。

マッピングは、1 つまたは複数の map 節で定義されます。map-type は次のいずれかです。

インテル® グラフィック・テクノロジーの場合、物理メモリーは CPU とプロセッサー・グラフィックス間で共有されます。map-type 値の fromtofrom は、グローバル・データ・オブジェクトへの直接アクセスを除き、nocopy 実装にマップします。デバイス領域への入口で、リスト項目の物理メモリーがメモリーに保存され、そのデバイス領域が終了するまで保持されます。これにより、コピーを回避してオフロードのオーバヘッドを軽減し、動作を維持します。copynocopy どちらの場合も、競合を回避するため、同じメモリーへの CPU アクセスは同期されなければなりません。

デバイスデータ環境を作成してそのデバイスで構造化ブロックを実行する例

#pragma omp target map(double dist, double x1, double y1, double x2, double y2)
{
  dist = sqrt((x2 – x1)**2  + (y2 – y1)**2 );
}

デバイスのデータ環境を作成し、依存性が満たされたらデバイスで構造化ブロックを非同期実行する例

#pragma omp target map(double dist, double x1, double y1, double x2, double y2) depend(in: a) nowait
{ 
  dist = sqrt((x2 – x1)**2  + (y2 – y1)**2 ); 
}

上記の例は、このプラグマを使用して領域をオフロードし、以前の target または task プラグマにより依存性 a が満たされたら、デバイスで非同期実行されるようにする方法を示します。以前の target または task プラグマがない場合、領域は直ちに実行のためオフロードされます。