- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The tutorial author has promptly answered acknowledging his statement was wrong.
Many thanks for your attention.
Many thanks for your attention.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page