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.TRUE.と評価した場合に限り、囲まれているコードブロックが並列に実行されます。それ以外の場合は、コードブロックは直列に実行されます。
schedule forループの反復がチームのスレッド間でどのように分割するかを指定します。
copyin 並列領域を実行しているチーム内の各スレッドのthreadprivate変数に、同じ名前を割り当てます。