ナビゲーション:前へ 上へ 次へ
ナビゲーション:前へ 上へ 次へ
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
ナビゲーション:前へ 上へ 次へ