インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド

omp distribute

1 つ以上のループの反復をすべてのスレッドチームのマスタースレッド間で共有するかどうかを指定します。

構文

#pragma omp distribute [clause, clause, ...]

for-loop

引数

clause

省略するか、次の節を 1 つ以上指定できます。

collapse (n)

1 つのループに結合して並列実行する、OpenMP* for 構造に関連する for ループの入れ子構造のループ数を指定します。

firstprivate(list)

private 節で指定される機能のスーパーセットを指定します。各プライベート・データ・オブジェクトはオリジナルのオブジェクトの値を使用して初期化されます。

dist_schedule (static[, chunk_size])

private(list)

チーム内の各スレッドに対して変数を private にすることを宣言します。

説明

このプラグマは、teams 構造内の緊密な入れ子構造の 1 つ以上のループに関連付けられます。collapse を使用すると、omp for プラグマで collapse 節を指定した場合と同様に、複数のループを 1 つの反復シーケンスに結合できます。

collapse 節を使用してループの数を指定します。collapse 節を指定しない場合、プラグマはその直後のループにのみ適用されます。

2 つの最外ループを並列化して 2 つの正方行列を乗算する例

#include <omp.h>
void matmul (float *a, float const *b, float const * c, int N) {
 	#pragma omp teams {
    int i;

    #pragma omp distribute
    for (i=0; i<N; i++) {
      int j;
      #pragma omp parallel for
      for (j=0; j<N; j++) {
        int k;
        for (k=0; k<N; k++) {
          a[i*N+k] = a[i*N+k] + b[i*N+j] * c[j*N+k];
        }
      }
    }
  }
}