Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
28455 Discussions

OpenMP and data consistency across arrays

mambru37
Beginner
319 Views

Is it safe to access parts of an array previously updated inside the same parallel loop if you are only accessing the parts "belonging" to the current thread?
According to Miguel Hermanns, it's not:
"Since each thread is executing part of the iterations of the do-loop and the updates of the modifications made to the variables are not ensured until the end of the work-sharing construct, the following example will not work correctly using the !$OMP DO/!$OMP END DO directive-pair for its parallelization:

real(8) :: A(1000), B(1000)
do i = 1, 1000
  B(i) = 10 * i
  A(i) = A(i) + B(i)
end do

because the correct value of the matrix B is not ensured until the end of the work-sharing construct !$OMP END DO."
However, I'm doing precisely that to make a parallel 3D convolution routine using fftw and multiple calls to fftw 1D (the 3D version of fftw does not work for us because of special boundary conditions).
In fact, trying this same example with the latest public version of Intel's Fortran compiler (9.0.028):
      program test4
      implicit none

      integer,parameter :: N=10000000
      real(4) :: A(N), B(N)
      integer(4) :: i
!$OMP PARALLEL DEFAULT(PRIVATE) SHARED(A,B)
!$OMP DO
      do i = 1,N
        A(i)=0.
      end do
!$OMP END DO
!$OMP DO
      do i = 1,N
        B(i) = float(i)
        A(i) = A(i) + B(i)
      end do
!$OMP END DO
!$OMP END PARALLEL
      do i = 1,N
        if(A(i) .ne. float(i)) then
          print*, 'OOOOOOOOooooooooops!!'
          exit
        end if
      end do
      end program

works fine and does not yield any error. What am i missing? Is the fortran compiler implementing some sort of data-consistency that I am unaware of?
Thanks.

Message Edited by mambru37 on 12-07-2005 05:29 AM

0 Kudos
1 Reply
mambru37
Beginner
319 Views
The tutorial author has promptly answered acknowledging his statement was wrong.

Many thanks for your attention.
0 Kudos
Reply