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 内のデータ変数は、コンマで区切られています。この文節に対する使用制限は、以下のとおりです。
|
firstprivate (list) | list 内のデータ変数のスコープが各スレッドに対して private であることを宣言します。それぞれの新規の private オブジェクトは、ステートメント・ブロック内に暗黙の宣言がある場合のように初期化されます。
list 内のデータ変数は、コンマで区切られています。
firstprivate 文節内の変数は、同じ omp single ディレクティブ用の copyprivate 文節内に出現することはできません。 |
nowait | この文節は、single ディレクティブ終了時の暗黙の barrier を回避するために使用します。nowait 文節が、所定の single ディレクティブ上に現れるのは、1 回のみです。 nowait 文節は、 copyprivate 文節と共に使用してはいけません。 |
nowait 文節が指定されていない限り、暗黙の barrier が並列化されたステートメント・ブロックの最後にあります。