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