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

_Cilk_offload

CPU およびコプロセッサーでの関数の同期/非同期実行を制御します。 このキーワードは、インテル® MIC アーキテクチャーにのみ適用されます。

構文

lvalue = _Cilk_offloadfunc_name ( rvalue )

lvalue = _Cilk_offload_to ( target-number ) func_name ( rvalue )

lvalue = _Cilk_spawn _Cilk_offload func_name ( rvalue )

lvalue = _Cilk_spawn _Cilk_offload_to ( target-number ) func_name ( rvalue )

_Cilk_offload_Cilk_for ( init-expr; test-expr; incr-expr )

_Cilk_offload_to ( target-number ) _Cilk_for ( init-expr; test-expr; incr-expr )

引数

lvalue

オブジェクトを指定する式。

rvalue

値を表す式。

func_name

関数名。

target-number

値が次のように解釈される式。

>=0

次の式に応じて、文を特定のターゲット上で実行します。

target = target-number % number_of_targets

例えば、4 つのターゲットを搭載したシステムの場合:

  • 2 または 6 を指定すると、ランタイムシステムはターゲット 2 でコードを実行します (2 % 4 と 6 % 4 はどちらも 2 になるため)。

  • 1000 を指定すると、ランタイムシステムはターゲット 0 でコードを実行します (1000 % 4 = 0 になるため)。

-1 または値なし

文をランタイムシステムによって選択されたターゲット上で実行します。

<-1

予約済み。

init-expr

_Cilk_for ループの初期化式。

test-expr

_Cilk_for ループのテスト式。

incr-expr

_Cilk_for ループのインクリメント式。

説明

関数呼び出しの前に _Cilk_offload を指定すると、ランタイムシステムがその関数をコプロセッサーで実行するか、ホストで実行するかを選択します。複数のコプロセッサーが利用可能な場合は、特定のコプロセッサーを選択します。

_Cilk_spawn キーワードと呼び出しの間に _Cilk_offload キーワードを配置することにより、通常のインテル® Cilk™ Plus の規則を使用した CPU の非同期実行、およびインテル® Cilk™ Plus タスクによる関数の同期オフロードが行われ、非同期オフロードが効率的に実行されます。 通常のインテル® Cilk™ Plus の使用方法と同じように、CPU がオフロードした関数の結果を使用する前に _Cilk_sync キーワードが必要です。

_Cilk_for ループの前の _Cilk_offload は、すべてのループをコプロセッサーで実行するように指定します。

_Cilk_offload_to (target-number) は、コプロセッサーに必ずオフロードするように指定します。 target-number は、特定のコプロセッサーを指定します。

オフロード関数呼び出し:

z =  _Cilk_offload func(a);
z =  _Cilk_spawn _Cilk_offload func(a);

オフロード _Cilk_for ループ:

_Cilk_offload _Cilk_for ( init-expr; test-expr; incr-expr ) {
...
}

関連情報