omp parallel ディレクティブは、選択したコードのブロックを並列化するようコンパイラーに明示的に指示します。
.-,------. V | >>-#--pragma--omp parallel----clause-+-------------------------><
ここで、clause は、次のいずれかです。
if (exp) | if 引数が指定されると、exp によって示されたスカラー式が実行時に非ゼロの値に評価された場合にのみ、プログラム・コードが並行して実行されます。 if 節は 1 つのみ指定することができます。 |
private (list) | list 内のデータ変数のスコープが各スレッドに対して private であることを宣言します。 list 内のデータ変数は、コンマで区切られています。 |
firstprivate (list) | list 内のデータ変数のスコープが各スレッドに対して private であることを宣言します。それぞれの新規の private オブジェクトは、あたかもステートメント・ブロック内に暗黙の宣言があるように、 元の変数の値を使用して初期化されます。 list 内のデータ変数は、コンマで区切られています。 |
num_threads (int_exp) | int_exp の値は、並行領域に使用するスレッドの数を指定する整数式です。 スレッドの数の動的調整も使用可能になっている場合は、 int_exp は使用されるスレッドの最大数を指定します。 |
shared (list) | list 内のコンマで区切られたデータ変数のスコープがすべてのスレッドの間で共用されることを宣言します。 |
default (shared | none) | 各スレッド内の変数のデフォルトのデータ・スコープを定義します。
default 節は、
1 つの omp parallel ディレクティブ上に 1 つのみ指定することができます。
default(shared) の指定は、 shared(list) 節内の各変数を指定するのと同じです。 default(none) の指定には、 並列化されたステートメント・ブロックに対して可視である各データ変数が、データ・スコープ節に明示的にリストされていることが必要です。ただし、次のような変数の例外があります。
|
copyin (list) | list 内に指定されているデータ変数ごとに、
マスター・スレッド内のデータ変数の値は、並列領域の開始地点のスレッド private コピーにコピーされます。
list 内のデータ変数は、コンマで区切られています。
copyin 節内に指定する各データ変数は、threadprivate 変数でなければなりません。 |
reduction (operator: list) | 指定された operator を使用して、
list 内のすべてのスカラー変数の縮約を実行します。
list 内の縮約変数は、コンマで区切られています。
list 内の各変数の private コピーは、スレッドごとに作成されます。 ステートメント・ブロックの最後で、縮約変数のすべての private コピーの最終値は、その演算子に適切な方法で結合され、その結果は、共用の縮約変数の元の値に戻されます。 reduction 節に指定される変数は以下の通りです。
|
並列領域が検出されると、スレッドの論理チームが形成されます。 チーム内の各スレッドは、作業共有構成を除いて、並列領域内のすべてのステートメントを実行します。 作業共有構成内の作業は、チーム内のスレッド間で配布されます。
ループの反復が独立していなければ、ループを並列化することはできません。 暗黙のバリアが、並列化されたステートメント・ブロックの終了地点にあります。
ネストされた並列領域は、常に直列化されています。