我一直认为OpenMP中的parallel do
(我使用Fortran)不会受到竞争条件的影响。我只是需要确认。
所以我写了这个简单的程序来测试它
program test
use omp_lib
implicit none
integer, parameter :: m = 4
real*8, dimension(m,m) :: b
integer :: i, j
b = 1.0
!$ call omp_set_num_threads(4)
!$omp parallel do
do i = 1, m
do j = 1, m
b(i,j) = 2*b(i,j)
if(i==j) then
b(i,j) = b(i,j) + i
endif
end do
end do
!$omp end parallel do
print *, b
end program test
该程序给出了我预期的结果(即没有检测到竞争条件)。
但我担心某些事情可能会从我简单的思想中逃脱。任何人都可以确认parallel do
没有受到竞争条件的影响吗?