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