並列およびワークシェアリング複合構造

並列/ワークシェアリング複合構造は、単一のワークシェアリング構造が含まれる並列領域を指定するための短縮形を提供します。並列/ワークシェアリング複合構造は次のとおりです。

これらの宣言子についての詳細は、「OpenMP* Fortran Compiler Directives」(英語) を参照してください。

PARALLEL DO および END PARALLEL DO

PARALLEL DO 宣言子を使用して、暗黙的に単一の DO 宣言子を含む並列領域を指定します。PARALLEL DO 宣言子に 1 つ以上の節を指定できます。

次の例では、単純なループを並列化する方法を示します。ループ変数は、デフォルトではプライベートであるため、明示的に宣言する必要はありません。END PARALLEL DO 宣言子はオプションです。

subroutine par(a, b, N)

  integer :: i, N, a(N), b(N)

  !$OMP PARALLEL DO

  do i= 1, N

    b(i) = (a(i) + a(i-1)) / 2.0

  end do

  !$OMP END PARALLEL DO

end subroutine par

PARALLEL SECTIONS および END PARALLEL SECTIONS

PARALLEL SECTIONS 宣言子を使用して、暗黙的に単一の SECTIONS 宣言子を含む並列領域を指定します。PARALLEL SELECTION 宣言子に 1 つ以上の節を指定できます。

最後のセクションは、END PARALLEL SECTIONS 宣言子で終わります。

以下の例では、サブルーチン X_AXISY_AXIS、および Z_AXIS が同時に実行できます。最初の SECTION 宣言子はオプションです。すべての SECTION 宣言子は、PARALLEL SECTIONS/END PARALLEL SECTIONS 構造の記述範囲内になければなりません。

!$OMP PARALLEL SECTIONS

!$OMP SECTION

      CALL X_AXIS

!$OMP SECTION

      CALL Y_AXIS

!$OMP SECTION

      CALL Z_AXIS

!$OMP END PARALLEL SECTIONS

PARALLEL WORKSHARE および END PARALLEL WORKSHARE

WORKSHARE 宣言子を使用して、ワークシェアリング文またはワークシェアリング構造のブロック内の作業を異なる作業単位に分割します。この宣言子は、実行する各作業単位をチームのスレッドに分配するので、各作業単位は 1 回だけしか実行されません。

PARALLEL WORKSHARE 宣言子を使用して、単一の WORKSHARE 宣言子を含む並列領域を省略形式で指定します。

いずれかの宣言子を使用する際は、これらの宣言子により定義されたブロック内外にコードを分岐させることができない点に注意してください。