インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
プラグマの後で宣言されたすべての関数と変数がターゲットで利用可能であることを示します。このプラグマは、インテル® MIC アーキテクチャーおよびインテル® グラフィックス・テクノロジーにのみ適用されます。
#pragma offload_attribute([push, ]target(target-name) #pragma offload_attribute(pop) |
#pragma offload_attribute (pop) 文またはコンパイル単位の最後に到達するまで、ターゲットにオフロードする関数と変数を内部コンパイラー・スタックにプッシュします。
これはデフォルトです。
ターゲットを指定します。次のいずれかの値を使用できます。
gfx |
インテル® グラフィックス・テクノロジー |
mic |
インテル® Xeon Phi™ 製品 |
関数と変数を内部コンパイラー・スタックのトップから削除します。
プラグマをオフにします。
このプラグマは、プラグマの後で宣言されたすべての関数と変数がターゲットで利用可能であることを示します。
このプラグマを使用すると、個々の宣言にターゲット属性や declspec を追加する必要がありません。
プラグマをオンにするには、push と target(target-name) を指定するか、target(target-name) のみを指定します。push は target-name をスタックにプッシュします。target(target-name) のみを指定すると、コンパイラーはプラグマよりも前の状態を記憶しません。
次の例は、このプラグマの使用方法を示します。
この例では、push 文と pop 文の間のすべての関数と変数をターゲットに転送するように指示します。クラス A とクラス B はどちらも target(mic) 属性を取得します。
例 |
---|
// mic ターゲットをスタックにプッシュする #pragma offload_attribute (push, target (mic)) // 関数および変数 ... // ターゲットをスタックから削除して以前の状態に戻す #pragma offload_attribute (pop) |
例 |
---|
fileA.h #include <vector> class A { ... private: std::vector<int> av; }; fileB.cpp #pragma offload_attribute (push,target(mic)) #include "fileA.h" class B : public A { ... }; #pragma offload_attribute (pop) |
クラスのユーザーが追加したデータメンバー(データメンバー av など)と、コンパイラーが作成した内部データメンバー(仮想関数テーブルなど)はどちらも、offload_attribute プラグマ領域内で囲まれるため、target(mic) 属性を取得します。
クラスの target(mic) または _Cilk_shared 属性は継承されないため、クラスの定義または push/pop メカニズムでそれぞれ明示する必要があることに注意してください。また、仮想ディスパッチでメンバー関数の正しいオフロードを行うには、階層のすべてのクラスで target(mic) または _Cilk_shared 属性が表記されている必要があることにも注意してください。
例 |
---|
#pragma offload_attribute (push,target(mic)) namespace U { class C { ... }; ... } // 名前空間 U の元の定義 #pragma offload_attribute (pop) namespace U { class D { ... }; ... } // 拡張された名前空間 U |
上の例では、クラス C および元の定義の名前空間 U の内容は offload_attribute プラグマで囲まれるため、target(mic) 属性を取得します。ただし、名前空間 U はこの属性が明示されません。
結果的に、クラス D および拡張された名前空間 U の内容は offload_attribute プラグマで囲まれないため、target(mic) 属性を取得しません。