ナビゲーション:前へ 上へ 次へ
ナビゲーション:前へ 上へ 次へ
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ループの処理を分担する場合の実行イメージ図を示します。
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
ナビゲーション:前へ 上へ 次へ
