インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

複数の宣言への target 属性の適用

このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

複数のデータ宣言と関数宣言を行う場合、target 属性データを含む宣言をそれぞれ指定するのではなく、offload_attribute プラグマの pushpop で一連のデータ宣言と関数宣言の範囲を囲むことができます。

オフロードコードで C 標準ヘッダー、インテル® スレッディング・ビルディング・ブロック (インテル® TBB)、インテル® Cilk™ Plus の宣言、またはユーザーが記述した #include 宣言を利用する場合、それらが使用されるオフロードモデルの target 名を使用して、offload_attribute プラグマ内にそれらの宣言を囲む必要があります。

インテル® Cilk™ Plus は古い機能 (非推奨) です。

ヘッダーファイルの外部ルーチンによって示されるコードは、インテル® 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_1function_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

関連情報