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

_Cilk_offload を使用したターゲット固有のコードの記述

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

ターゲット固有の組込み関数を使用するオフロードコードのセクションを記述することができます。コンパイラーは、コプロセッサー向けのコードを生成するとき、マクロ __MIC__ を定義します。#ifdef __MIC__ セクション内にターゲット固有のコードを記述することができます。

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

この例は、#ifdef __MIC__ セクション内にターゲット固有のコードを記述する方法を示します。

クラス F32vec の実装は CPU とコプロセッサー専用です。コプロセッサーで実行する場合、オフロードコードで専用バージョンを使用できます。function_1 を CPU で実行する場合、クラス F32vec の CPU バージョンを使用します。コプロセッサーで実行する場合、micvec.h の定義を使用します。

// クラス F32vec はオフロードコードで使用されます
// target(mic) 属性が必要です

#pragma offload_attribute(push,_Cilk_shared)


// CPU とコプロセッサー向けにカスタマイズしたバージョンを使用します

#ifdef __MIC__

	// このクラスのインテル® MIC アーキテクチャー・バージョンは micvec.h に含まれています
	#include <micvec.h>

#else
	// CPU バージョンはインラインで記述されています
	class F32vec16
	{
  		public:
    		...
    		friend F32vec16 sqrt(const F32vec16& a);
	};
#endif

#pragma offload_attribute(pop)


_Cilk_shared void function_3()
{
	F32vec16 w = ...;
	F32vec16 s;
	s = sqrt(w);
	...
}

関連情報