Oracle® Solaris Studio 12.4: OpenMP API ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

6.4 task 構文内のスカラー変数のスコープ宣言の規則

自動スコープ宣言を行う場合、コンパイラは、task 構文内のスカラー変数のスコープを決定する際に、このセクションで説明されている規則を適用します。


注 -  このリリースの Oracle Solaris Studio では、タスクの自動スコープ宣言で配列は処理されません。

task 構文で参照され、暗黙に決まるか事前定義されたスコープを持たないスカラー変数を自動スコープ宣言する場合、コンパイラは、変数の使用を規則 TS1 - TS5 に対して順番に確認します。これらの規則は、OpenMP 仕様で暗黙にスコープ宣言される、parallel for/do ループのループインデックス変数などの変数には適用されません。

  • TS1: task 構文内で変数が読み取り専用として使用され、その task 構文を包含する parallel 構文内でも読み取り専用である場合、その変数は firstprivate として自動スコープ宣言されます。

  • TS2: 変数を使用してもデータ競合が発生せず、タスクの実行中にその変数にアクセスできる場合、その変数は shared と自動スコープ宣言されます。

  • TS3: 変数を使用してもデータ競合が発生せず、task 構文で読み取り専用であり、かつ、タスクの実行中には変数にアクセスできない場合は、その変数は firstprivate と自動スコープ宣言されます。

  • TS4: 変数を使用するとデータ競合が発生し、タスク構文を実行する各スレッドで、その変数が同じスレッドによる読み取りの前に常に書き込まれ、タスク内で変数に割り当てられた値がタスク外では使用されない場合、その変数は private と自動スコープ宣言されます。

  • TS5: 変数を使用するとデータ競合が発生し、変数が task 構文内で読み取り専用ではなく、タスクで行われる読み取りの中で、タスク外で割り当てられた値が取得されることがあり、タスク内で変数に割り当てられた値がタスク外では使用されない場合、その変数は firstprivate と自動スコープ宣言されます。