[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