インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。
複数のデータ宣言と関数宣言を行う場合、target 属性データを含む宣言をそれぞれ指定するのではなく、offload_attribute プラグマの push と pop で一連のデータ宣言と関数宣言の範囲を囲むことができます。
オフロードコードで C 標準ヘッダー、インテル® スレッディング・ビルディング・ブロック (インテル® TBB)、インテル® Cilk™ Plus の宣言、またはユーザーが記述した #include 宣言を利用する場合、それらが使用されるオフロードモデルの target 名を使用して、offload_attribute プラグマ内にそれらの宣言を囲む必要があります。
ヘッダーファイルの外部ルーチンによって示されるコードは、インテル® MIC アーキテクチャーで実行できるシステム・ライブラリーまたはユーザー・ライブラリーとしてコプロセッサー上に存在する必要があります。
プラグマを使用してオフロードする場合、インクルード・ファイルの定義を次のように囲みます。
#pragma offload_attribute(push, target(mic)) ... #pragma offload_attribute(pop)
共有仮想メモリーを使用してオフロードする場合、インクルード・ファイルの定義を次のように囲みます。
#pragma offload_attribute(push, _Cilk_shared) ... #pragma offload_attribute(pop)
プログラム内の単一オフロードモデルでのみ関数とデータを使用できるため、定義するインクルード・ファイルは単一オフロードモデル内でのみ参照することができます。そのため、#pragma offload_attribute(push, target(mic)) と #pragma offload_attribute(pop) で囲まれたインクルード・ファイルをキーワード _Cilk_offload で使用することはできません。
逆に、#pragma offload_attribute(push, _Cilk_shared) と #pragma offload_attribute(pop) で囲まれたインクルード・ファイルを #pragma offload 文で使用することはできません。
仮想共有メモリーモデルの場合、重要な例外が 1 つあります。#pragma offload_attribute(push, _Cilk_shared) と #pragma offload_attribute(pop) 内に C 標準ヘッダーを置かないでください。この処理は不要です。逆に、この処理を行うことで、ランタイムに未定義シンボルが発生することがあります。
インクルード・ファイル内で行われるすべての宣言と同じように、関数 function_1 と function_2 でそれぞれ target 属性を指定します。これらの宣言で offload_attribute プラグマを指定すると便利です。
#pragma offload_attribute(push,target(mic)) #include <stdio.h> #include <math.h> void function_1(); void function_2(); #pragma offload_attribute(pop) int main() { #pragma offload target(mic) { function_1(); printf("..."); } ... #pragma offload target(mic) function_2(); ... }
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。 この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |