[Omp] Array update inside a parallel loop

Dieter an Mey anmey at rz.rwth-aachen.de
Wed Dec 7 06:58:15 PST 2005


You're code should work fine, as long as you maintain the implied 
barrier at the end of the first parallel loop.

regards
Dieter



Francisco Jesús Martínez Serrano wrote:
> 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
> (http://www.openmp.org/presentations/miguel/F95_OpenMPv1_v2.pdf), it's
> not, since:
> 
> "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.
> _______________________________________________
> Omp mailing list
> Omp at openmp.org
> http://openmp.org/mailman/listinfo/omp_openmp.org


-- 
--------------------------------------------------------------------
Dieter an Mey
High Performance Computing               Hochleistungsrechnen
RWTH Aachen University                   Rechen- und Kommunikations-
Center for Computing and Communication   zentrum der RWTH Aachen
phone: ++49-(0)241-80-24377              Seffenter Weg 23
fax:   ++49-(0)241-80-22134              52074 Aachen, Germany
email: anmey at rz.rwth-aachen.de
--------------------------------------------------------------------






More information about the Omp mailing list