DEFAULT

目的

DEFAULT 節を指定すると、並列構文の字句エクステントにあるすべての変数は default_scope_attr のスコープ属性を持ちます。

DEFAULT(NONE) を指定すると、デフォルトのスコープ属性は持ちません。 したがって、 並列構文の字句エクステントに使用する各変数を並列構文のデータ・スコープ属性文節に明示的にリストする必要があります。 ただし、この変数が以下の場合は除きます。
  • THREADPRIVATE
  • THREADPRIVATE 共通ブロックのメンバー
  • ポインティング先
  • 以下のループに対するループ繰り返し変数だけに使用されるループ繰り返し変数:
    • 並列領域の字句エクステント内の順次ループ、または
    • 並列領域にバインドする DO ループ
  • 並列領域にバインドするワーク・シェアリング構文内だけで使用され、 それぞれのワーク・シェアリング構文用のデータ・スコープ属性文節に指定される変数

DEFAULT 節は、 並列構文のすべての変数が FIRSTPRIVATEPRIVATESHARED、 またはデフォルトのないスコープ属性のいずれかと同じデフォルト・スコープ属性を共有することを指定します。

構文

構文図を読む構文図をスキップする
>>-DEFAULT--(--default_scope_attr--)---------------------------><

default_scope_attr
FIRSTPRIVATEPRIVATESHARED、または NONE のいずれか 1 つです。

規則

ディレクティブに DEFAULT(NONE) を指定する場合は、 すべての名前付き変数および参照される配列セクションのすべての左端名、配列エレメント、構造体構成要素、または このディレクティブの字句エクステント内のサブストリングを FIRSTPRIVATELASTPRIVATEPRIVATEREDUCTION、または SHARED 文節に指定する必要があります。

ディレクティブに DEFAULT(FIRSTPRIVATE) を指定する場合、 すべての名前付き変数および参照される配列セクションのすべての左端名、配列エレメント、構造体構成要素、 またはこのディレクティブ構文の字句エクステント内のサブストリングは (ポインティング先 および THREADLOCAL 共通ブロックを除いた共通ブロックおよび参照結合された変数を含む)、FIRSTPRIVATE 節で明示的にリストされたかのように、スレッドに FIRSTPRIVATE 属性を持たせます。

ディレクティブに DEFAULT(PRIVATE) を指定する場合、 すべての名前付き変数および参照される配列セクションのすべての左端名、配列エレメント、構造体構成要素、 またはこのディレクティブ構文の字句エクステント内のサブストリングは (ポインティング先 および THREADLOCAL 共通ブロックを除いた共通ブロックおよび参照結合された変数を含む)、PRIVATE 節で明示的にリストされたかのように、スレッドに PRIVATE 属性を持たせます。

ディレクティブに DEFAULT(SHARED) を指定する場合、 すべての名前付き変数および参照される配列セクションのすべての左端名、配列エレメント、構造体構成要素、 またはこのディレクティブ構文の字句エクステント内のサブストリングは、 POINTEE を除いて、SHARED 文節で明示的にリストされたかのように、 スレッドに SHARED 属性を持たせます。

DEFAULT 文節をディレクティブで明示的に指示しない場合、 デフォルトの動作は DEFAULT(SHARED) です。

OpenMP の例

次の例は OpenMP に対する DEFAULT(NONE) の使用法、および変数のデータ・スコープ属性を並列領域に指定するためのいくつかの規則を示しています。
PROGRAM MAIN
  COMMON /COMBLK/ abc(10), def

  ! The loop iteration variable, i, is not required to be
  ! in data scope attribute clause.
$OMP PARALLEL DEFAULT(NONE) SHARED(ABC)

  ! def is specified on the work-sharing DO, and is not required to be
  ! specified in a data scope attribute clause on the parallel region.
!$OMP DO FIRSTPRIVATE(def)
  DO i = 1,10
    ABC(i) = def
  END DO
!$OMP END PARALLEL
END PROGRAM