インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド

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

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

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

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

改訂 #20110804

関連情報