OpenMP* ディレクティブと節

OpenMP ディレクティブ

ディレクティブ名 説明
parallel 並列実行領域を定義します。
for 関連付けられたループの反復が並列実行される領域を指定する、反復的なワークシェアリングの構造を識別します。
sections チーム内のスレッド間で分割される一連の構造を指定する、非反復的なワークシェアリングの構造を識別します。
single 対応する構造化ブロックがチーム内の 1 つのスレッドだけで実行されるように指定する構造を識別します。
parallel for 1 つの for ディレクティブを含む並列領域のショートカット。OpenMP ディレクティブ parallel または for の直後には、for 文を続けなければなりません。parallel または for ディレクティブと for 文の間に、他の文または OpenMP ディレクティブがあると、インテル® C++ コンパイラは構文エラーを出力します。  
parallel sections 1 つの sections ディレクティブを含む並列領域を指定するショートカット形式。
master チームの master スレッドで実行する構造ブロックを指定する構成体を示します。
critical[lock] 関連する構造ブロックの実行を一度に 1 スレッドだけに制限する構成体を示します。
barrier チーム内のすべてのスレッドを同期化します。
atomic 特定のメモリ・ロケーションをアトミックに更新します。
flush "クロススレッド" シーケンス・ポイントを指定します。このポイントでは、チーム内のすべてのスレッドから見たメモリ内の特定のオブジェクトの状態の整合性が保たれるように、プログラム上で保証する必要があります。
ordered ordered ディレクティブに続く構造ブロックを、シーケンシャル・ループ内で反復が実行される順序で実行します。
threadprivate 指定された名前付きのファイル有効範囲変数または名前空間の有効範囲変数を特定のスレッドに対してプライベートにし、そのスレッド内ではファイル有効範囲を参照可能にします。

OpenMP の節

説明
private チーム内の各スレッドに対して private になるように変数を宣言します。
firstprivate private 節で指定される機能のスーパセットを指定します。
lastprivate private 節で指定される機能のスーパセットを指定します。
shared チーム内のすべてのスレッドで変数を共用します。
default 変数のデータ有効範囲属性を設定できます。
reduction スカラ変数の削減を実行します。
ordered ordered ディレクティブに続く構造ブロックを、シーケンシャル・ループ内で反復が実行される順序で実行します。
if if(scalar_logical_expression) 節が存在する場合、scalar_logical_expression 節が真である場合にのみ、囲まれたコードブロックは並列に実行されます。 それ以外の場合は、コードブロックは直列に実行されます。
schedule for ループの反復がチームのスレッド間でどのように分割するかを指定します。
copyin 並列領域を実行しているチーム内の各スレッドの threadprivate 変数に、同じ名前を割り当てます。