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

map 節

omp target プラグマの節: 現在のタスクのデータ環境から構文で指定されたデバイスのデータ環境へ変数をマップします。この節のオリジナルのリスト項目に対応する項目がデバイス上で新たに作成されます。この節は、インテル® MIC アーキテクチャーおよびインテル® グラフィックス・テクノロジーでのみ利用可能な omp target プラグマにのみ適用されます。

map ([map-type-modifier[,]] [map-type :] list)

map-type-modifier

特定の map-type の修飾子を指定します。設定可能な値は以下のとおりです。

always

map-typetofromtofrom の場合、新たに作成される対応する項目に、オリジナルのリスト項目の値を代入します。

map-type

list 項目の初期化方法を指定します。設定可能な値は以下のとおりです。

alloc

デバイス領域への入口で、リスト項目に対応する各項目の初期値は未定義になります。

delete

リスト項目に対応する項目の初期化を制御するリファレンス・カウントを 0 に設定します。

from

デバイス領域の終了時に、デバイス上の対応する項目の値をオリジナルのリスト項目に代入します。

release

リスト項目に対応する項目の初期化を制御するリファレンス・カウントを 1 デクリメントします (非ゼロの場合)。

to

デバイス領域の入口で、対応する各項目の初期値は、オリジナルのリスト項目の値になります。

tofrom

デバイス領域の入口で、対応する各項目の初期値は、オリジナルのリスト項目の値になります。デバイス領域の終了時に、デバイス上の対応する項目の値をオリジナルのリスト項目に代入します。

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 節で指定されていない omp target map 領域内の変数は、その領域内の共有変数として扱われます。

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