OpenMP 入門

ナビゲーション:前へ   上へ   次へ

4 doループの並列化

Fortranのdoループを複数のスレッドで実行するために、 OpenMPの do指示構文 が用意されています。 OpenMPのdo指示構文はその直後に指定されているdoループを並列化します。

do指示構文は以下の書式を持ちます。

!$omp do [指示節[[,] 指示節]...]
  doループ
[!$omp end do [nowait]]
  • 反復が複数のスレッドに割り当てられて並列に実行されます。
  • 対象となるdoループは構造化ブロックである必要があります。
  • 対象となるdoループは完了する必要があります(途中でdoループの外へ分岐できません)
  • 並列領域(parallel~end parallelの間)でのみ指定できます。

以下にdo指示構文を用いるプログラム例を示します。

program doTest
  implicit none
  integer,parameter :: N = 9
  integer i, a(N)
!$omp parallel
!$omp do
  do i=1,N
    a(i) = i
  end do
!$omp end do
!$omp end parallel
  print *, a
end program

以下に3つのスレッドで9回の反復を行うdoループの処理を分担する場合の実行イメージ図を示します。

DoDirective

4.1 ☆演習課題:do指示構文

OpenMPのdo指示構文を用いて、下記に示すプログラムの並列化を行って下さい。
[課題のコード]

program simpleDo
  implicit none
  integer,parameter :: N = 100
  integer i
  double precision x(N)
  do i=1, N
    x(i) = dble(i)/N
  end do
  print *, sum(x)
end program
[実行出力例]
  50.5000000000000000
[ヒント]
FortranのdoループをOpenMPのdo~end doで囲みます。
またその際にparalell~end parallelを更にその外側に指定します。
解答例:kadaiSimpleDo.f90


ナビゲーション:前へ   上へ   次へ
関連情報
ご案内
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks