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

intel_omp_taskq

インテルの以前のタスク用に、囲まれた task プラグマに指定された作業単位をキューイングする while ループの環境を指定します。

構文

#pragma intel_omp_taskq[clause[[,]clause]...]

structured-block

引数

clause

次のいずれかです。

private(variable-list)

taskqvariable-list にある各オブジェクトの default-constructed バージョンの private を生成します。囲まれた各タスクで、captureprivate も含みます。各変数に参照されるオリジナルのオブジェクトは、構造に入る時点で中間値を持ちます。構造の動的範囲内では、オブジェクトは変更してはなりません。そして、構造から出る時点で中間値を持ちます。

firstprivate(variable-list)

taskqvariable-list にある各オブジェクトの copy-constructed バージョンの private を生成します。囲まれた各タスクで、captureprivate も含みます。各変数に参照されるオリジナルのオブジェクトは、構造の動的範囲内では、変更してはなりません。そして、構造から出る時点で中間値を持ちます。

lastprivate(variable-list)

taskqvariable-list にある各オブジェクトの default-constructed バージョンの private を生成します。囲まれた各タスクで、captureprivate も含みます。各変数に参照されるオリジナルのオブジェクトは、構造に入る時点で中間値を持ちます。構造の動的範囲内では、オブジェクトは変更してはなりません。そして、タスクの実行が終了した後に、オブジェクトは囲まれた最後のタスクからのオブジェクトの値をコピー割り当てされます。

reduction(operator : variable-list)

variable-list にある各オブジェクトの囲まれたタスク構造で与えられた演算子を持つリダクション演算を実行します。operatorvariable-list は、OpenMP* 仕様と同じように定義されます。

ordered

オリジナルのシーケンシャル実行順序で、囲まれた task 構造で ordered 構造を構成します。ordered と結合される taskq プラグマには ordered 節がなければなりません。

nowait

taskq の最後にある暗黙的なバリアを削除します。taskq 構造にキューされたすべての task 構造が処理される前に、スレッドは taskq 構造を終了できます。

説明

intel_omp_taskq プラグマは、囲まれた作業 (タスク) 単位が実行される環境を指定します。最初に、taskq プラグマを実行するすべてのスレッド間の中から、1 つのスレッドが選択されます。

概念的には、taskq プラグマは、選択したスレッドを実行する空のキューを生成し、次に、taskq ブロック内のコードがシングルスレッドとして実行されます。他のすべてのスレッドは、この概念キューに作業がキューイングされるのを待ちます。

task プラグマは、潜在的に異なるスレッドで実行される作業単位を指定します。taskq ブロック内に task プラグマが存在すると、task ブロックの内側のコードは、taskq に関連付けられている概念キューにキューイングされます。キューイングされたすべての作業が終了し、taskq ブロックの最後に達すると、概念キューはなくなります。

このプラグマは、Qopenmp (Windows*) または qopenmp (Linux* および macOS*) オプションによって行われる並列化に影響を与えます。OpenMP* を使用するオプションは、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で利用可能ですが、両者では結果が異なります。両者の結果が異なる可能性のある OpenMP* 構造および機能の主なリストは次のとおりです: ロック (内部的なものおよびユーザーが利用可能なもの)、SINGLE 構造、バリア (暗黙的および明示的)、並列ループ・スケジュール、リダクション、メモリーの割り当て、スレッド・アフィニティー、バインド。