インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。
ターゲット固有の組込み関数を使用するオフロードコードのセクションを記述することができます。コンパイラーは、コプロセッサー向けのコードを生成するとき、マクロ __MIC__ を定義します。#ifdef __MIC__ セクション内にターゲット固有のコードを記述することができます。
この例は、#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);
...
}