ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: OpenMP API ユーザーガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
自動スコープ宣言では、コンパイラは、task 構文内の変数のスコープを決定する際に、この節で説明されている規則を適用します。
これらの規則は、OpenMP 仕様で暗黙にスコープ宣言される、PARALLEL DO や FOR ループのループインデックス変数などの変数には適用されません。
タスク構文で参照され、暗黙に決まるか事前定義されたスコープを持たないスカラー変数を自動スコープ宣言する場合、コンパイラは、変数の使用を次の規則 TS1 - TS5 に対して順番に確認します。
TS1: task 構文内で変数が読み取り専用として使用され、その task 構文を包含する並列構文内でも読み取り専用である場合、その変数は FIRSTPRIVATE として自動スコープ宣言されます。
TS2: 変数を使用してもデータ競合が発生せず、タスクの実行中にその変数にアクセスできる場合、その変数は SHARED と自動スコープ宣言されます。
TS3: 変数を使用してもデータ競合が発生せず、タスク構文で読み取り専用であり、かつ、タスクの実行中には変数にアクセスできない場合は、その変数は FIRSTPRIVATE と自動スコープ宣言されます。
TS4: 変数を使用するとデータ競合が発生し、タスク領域を実行する各スレッドで、その変数が同じスレッドによる読み取りの前に常に書き込まれ、タスク内で変数に割り当てられた値がタスク領域外では使用されない場合、その変数は PRIVATE と自動スコープ宣言されます。
TS5: 変数を使用するとデータ競合が発生し、変数がタスク領域内で読み取り専用ではなく、タスク領域で行われる読み取りの中で、タスク外で定義された値が取得されることがあり、タスク内で変数に割り当てられた値がタスク領域外では使用されない場合、その変数は FIRSTPRIVATE と自動スコープ宣言されます。
タスクの自動スコープ宣言では、配列は処理しません。