インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド
指定した種類の最内領域の取り消し要求を行います。このプラグマに到達したタスクは、取り消された構文の最後に進みます。
#pragma omp cancel [construct-clause[if(expr)] |
structured-block
construct-clause |
次のいずれか: parallel、sections、for、taskgroup |
if (expression) |
条件文を指定します。 expression は TRUE または FALSE のスカラー論理式です。 expression が FALSE の場合、CANCEL 構文は取り消し要求を行いません。 |
CANCEL 構文は、指定した種類の最内領域の取り消し要求を行います。このプラグマに到達した暗黙的および明示的なタスクは、取り消された構文の最後に進みます。
取り消しポイントは次の場所で暗黙的に指定されます。
暗黙のバリア
BARRIER 領域
CANCEL 領域
CANCELLATION POINT 領域
上記のいずれかの取り消しポイントに到達したスレッドは、取り消しポイントがアクティブな場合、直ちに取り消しがあったかどうかをチェックし、取り消しがあった場合はその領域の取り消しを行います。
CANCEL 構文によりタスクの取り消しが要求されると、最内の TASKGROUP が取り消されます。 CANCEL TASKGROUP 構文に到達したタスクは、その TASK 領域の最後にジャンプします。最内 TASKGROUP のタスクですでに実行を開始しているものは、終了まで実行するか、取り消しポイントに到達するまで実行しなければなりません。 取り消しポイントに到達すると、取り消し要求があった場合、タスクは TASK 領域の最後にジャンプし、完了したと見なされます。 最内 TASKGROUP の TASK でまだ実行を開始していないものは破棄され、完了したと見なされます。
PARALLEL 領域の取り消しが発生すると、各バインドスレッドは取り消された領域の最後から実行を再開し、TASK 構造により作成されたタスクとそのすべての子孫は TASKGROUP の取り消しセマンティクスに従って取り消されます。
FOR または SECTIONS 領域の取り消しが発生すると、各バインドスレッドは取り消された領域の最後から実行を再開しますが、タスクの取り消しは行われません。
expression は TRUE または FALSE のスカラー論理式です。expression が FALSE の場合、CANCEL 構文は取り消し要求を行いません。
制約事項
領域とその領域内に入れ子された領域を同時に取り消した場合の動作は不定です。
CANCEL 構文に到達したとき、デッドロックを引き起こす可能性があるロックやその他のデータ構造を解放する必要があります。ブロックされたスレッドは取り消すことができません。
取り消された構文に REDUCTION または LASTPRIVATE 節が含まれている場合、REDUCTION や LASTPRIVATE 変数の最終値は不定です。
取り消される SECTIONS 構文には、NOWAIT または ORDERED 節が含まれていてはなりません。
取り消される構文には、NOWAIT 節が含まれていてはなりません。