#pragma omp single

説明

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

構文

構文図を読む構文図をスキップする                          .-+---+------.
                          | '-,-'      |
                          V            |
>>-#--pragma--omp single----+--------+-+-----------------------><
                            '-clause-'
 

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

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

private 節の変数は、同じ omp single ディレクティブに対して、copyprivate 節にも現れることはできません。

copyprivate (list) list に指定された変数の値を、チームの 1 人のメンバーから他のメンバーにブロードキャストします。これは、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 ディレクティブの終わりにある暗黙のバリアを回避するために使用します。nowait 節が、所定の single ディレクティブ上に現れるのは、1 回のみです。 nowait 節は、copyprivate 節と一緒に使用することはできません。

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