インテル® C++ コンパイラー 16.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 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。インテル® マイクロアーキテクチャーに非固有の特定の最適化は、インテル製マイクロプロセッサー向けに予約されています。この注意事項の適用対象である特定の命令セットの詳細は、該当する製品のユーザー・リファレンス・ガイドを参照してください。 改訂 #20110804 |