並列に実行するループで入出力を実行できます。 ただし、次の条件があります。
さまざまなスレッドからの出力がインタリーブされても問題とならないこと (プログラム出力は確定的ではありません)。
ループの並列実行の安全性が確実であること。
例: ループ内の入出力文
!$OMP PARALLEL DO PRIVATE(k)
do i = 1, 10 ! 並列化されます
k = i
call show ( k )
end do
end
subroutine show( j )
write(6,1) j
1 format(’Line number ’, i3, ’.’)
end
demo% f95 -openmp t13.f
demo% setenv PARALLEL 4
demo% a.out
|
Line number 9. Line number 4. Line number 5. Line number 6. Line number 1. Line number 2. Line number 3. Line number 7. Line number 8. |
ただし、入出力が再帰的な場合、つまり、入出力文に、入出力を行う関数への呼び出しが含まれている場合は、実行時エラーが発生します。