インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド
omp target プラグマの節: 現在のタスクのデータ環境から構文で指定されたデバイスのデータ環境へ変数をマップします。この節のオリジナルのリスト項目に対応する項目がデバイス上で新たに作成されます。この節は、インテル® MIC アーキテクチャーおよびインテル® グラフィックス・テクノロジーでのみ利用可能な omp target プラグマにのみ適用されます。
map ([map-type-modifier[,]] [map-type :] list)
map-type-modifier |
特定の map-type の修飾子を指定します。設定可能な値は以下のとおりです。
|
||||||||||||
map-type |
list 項目の初期化方法を指定します。設定可能な値は以下のとおりです。
map-type を指定しない場合、デフォルトは tofrom です。 マップの初期化と代入は、ビット単位のコピーにより行われます。 |
||||||||||||
list |
1 つ以上の変数または部分配列の名前。 list 項目が部分配列の場合、連続するストレージを指定する必要があります。 |
map 節は、許可されているプラグマで少なくとも 1 つ指定する必要があります。
threadprivate 変数は、map 節で使用できません。
omp target enter data プラグマでは、map-type は to または alloc でなければなりません。
omp target exit data プラグマでは、map-type は from、release、または delete でなければなりません。
オリジナルのリスト項目と対応するリスト項目がストレージを共有する場合、タスク間の同期が行われないと、データ競合が発生します。ストレージを共有する変数がマップされた場合、動作は不定です。
オリジナルのリスト項目に対応する項目がデバイスのデータ環境にある場合:
新しいデバイスのデータ環境は、デバイスのデータ環境にある対応するリスト項目を使用します。
新しいデバイスのデータ環境に追加のストレージは割り当てられません。
指定した map-type に関係なく、初期化と代入は行われません。
オリジナルのリスト項目に対応する項目がデバイスのデータ環境にない場合:
オリジナルのリスト項目に対応する項目が作成され、新しいデバイスのデータ環境で使用されます。
新しいリスト項目に対して、自動記憶域期間を持つストレージが割り当てられます。新しいリスト項目のストレージと存続期間は、それが作成されたブロックが終了するまでです。新しいリスト項目のサイズとアライメントは、変数の型によって決定されます。
map-type で指定されている場合、初期化と代入が行われます。
map 節で指定されていない omp target map 領域内の変数は、その領域内の共有変数として扱われます。
インテル® グラフィック・テクノロジーの場合、物理メモリーは CPU とプロセッサー・グラフィックス間で共有されます。map-type 値の from と tofrom は、グローバル・データ・オブジェクトへの直接アクセスを除き、nocopy 実装にマップします。デバイス領域への入口で、リスト項目の物理メモリーがメモリーに保存され、そのデバイス領域が終了するまで保持されます。これにより、コピーを回避してオフロードのオーバヘッドを軽減し、動作を維持します。copy と nocopy どちらの場合も、競合を回避するため、同じメモリーへの CPU アクセスは同期されなければなりません。