Looking for openmp Answers? Try Ask4KnowledgeBase
Looking for openmp Keywords? Try Ask4Keywords

openmpOpenMPにおけるループ並列性


パラメーター

パラメータ
private コンマで区切られたプライベート変数のリスト
firstprivate privateと同様ですが、ループに入る前に変数の値に初期化されます
lastprivate privateと同様ですが、変数は終了時にループの最後の反復に対応する値を取得します
reduction リダクション演算子:対応するリダクション変数のコンマ区切りリスト
schedule staticdynamicguidedautoまたはruntimeの3つの昏睡状態の後の任意のチャンクサイズ
collapse 折りたたまれて並列化される完全にネストされたループの数
ordered ループのいくつかの部分を順番に保つ必要があることを伝えます(これらの部分は、ループ本体の中でいくつかのordered節で特定されます)
nowait ループ構成の最後にデフォルトで存在する暗黙のバリアを削除する

備考

schedule句の意味は次のとおりです。

  • static[,chunk] :ラウンドロビン方式でchunkサイズのバッチでループ反復を静的に(つまり、ループに入る前に配布が行われることを意味して)分散します。 chunkが指定されていない場合、 chunkは可能な限り均等であり、各スレッドは最大で1つのスレッドを取得します。
  • dynamic[,chunk] :バッチが残らなくなるまで先入れ先出しポリシーでスレッドのchunkサイズをバッチ単位でループ間で繰り返します。指定しない場合、 chunkは1に設定されます
  • guided[,chunk]dynamicと同じように、バッチサイズが小さくなり、小さくなる
  • auto :コンパイラや実行時ライブラリが最適なものを決めるようにする
  • runtime :実行時にOMP_SCHEDULE環境変数を使用して決定を破棄します。実行時に環境変数が定義されていない場合は、デフォルトのスケジューリングが使用されます

scheduleのデフォルトは実装定義です。多くの環境ではstaticdynamic場合もあれば、 auto場合もあります。したがって、明示的に設定することなく、実装が暗黙的に依存しないように注意してください。

上記の例では、融合形式をparallel forまたはparallel do 。しかし、ループ構築物はでそれを融合することなく使用することができるparallelの形で、ディレクティブ#pragma omp for [...]または!$omp do [...]内のスタンドアロンディレクティブparallel地域。

Fortranバージョンの場合のみ、並列化されたループのループインデックス変数は、デフォルトでは常にprivateです。したがって、明示的にprivate宣言する必要はありません(エラーではありませんが)。
CおよびC ++バージョンでは、ループインデックスは他の変数とまったく同じです。したがって、スコープが並列化されたループの外側にある場合for ( int i = ...)ようfor ( int i = ...)宣言されていなくてint i; ... for ( i = ... )ようfor ( int i = ...)宣言されている場合は、 privateに宣言する必要があります。

OpenMPにおけるループ並列性 関連する例