#pragma omp single

説明

omp single ディレクティブは、単一の使用可能スレッドで実行しなければならないコードのセクションを識別します。

構文

#pragma omp single [clause[[,] clause] ...] 
   statement_block

ここで、clause は、次のいずれかです。

private (list) list 内のデータ変数のスコープが各スレッドに対して private であることを宣言します。 list 内のデータ変数は、コンマで区切られています。

また、private 文節内の変数は、同じ omp single ディレクティブ用の copyprivate 文節内に出現することはできません。

copyprivate (list) list 内で指定された変数の値を、チーム内のあるメンバーから他のメンバーにブロードキャストします。これは、omp single ディレクティブに関連付けられた構造化ブロックの実行の後、かつ、構成の終了時にすべてのスレッドがバリアから離れる前に行われます。チーム内の他のすべてのスレッドの場合、list 内の各変数は、構造化ブロックを実行したスレッド内の対応する変数の値を使用して定義されるようになります。 list 内のデータ変数は、コンマで区切られています。この文節に対する使用制限は、以下のとおりです。
  • copyprivate 文節内の変数は、同じ omp single ディレクティブ用の private または firstprivate 文節内に出現することはできません。
  • copyprivate 文節を持つ omp single ディレクティブが並列領域の動的範囲内で検出された場合、 copyprivate 文節内で指定された変数はすべて、囲んでいるコンテキスト内で private でなければなりません。
  • 並列領域の動的範囲内の copyprivate 文節内で指定された変数は、囲んでいるコンテキスト内で private でなければなりません。
  • copyprivate 文節内で指定された変数には、アクセス可能かつ、あいまいさのないコピー割り当て演算子がなければなりません。
  • copyprivate 文節は、 nowait 文節と共に使用してはいけません。
firstprivate (list) list 内のデータ変数のスコープが各スレッドに対して private であることを宣言します。それぞれの新規の private オブジェクトは、ステートメント・ブロック内に暗黙の宣言がある場合のように初期化されます。 list 内のデータ変数は、コンマで区切られています。

firstprivate 文節内の変数は、同じ omp single ディレクティブ用の copyprivate 文節内に出現することはできません。

nowait この文節は、single ディレクティブ終了時の暗黙の barrier を回避するために使用します。nowait 文節が、所定の single ディレクティブ上に現れるのは、1 回のみです。 nowait 文節は、 copyprivate 文節と共に使用してはいけません。

nowait 文節が指定されていない限り、暗黙の barrier が並列化されたステートメント・ブロックの最後にあります。

関連参照

並列処理を制御するプラグマ IBM Copyright 2003