Mikael Fremling
Mikael Fremling

Reputation: 762

OpenMP parallel do read write race condition?

I am a little bit confused about the race conditions that can occur in OpenMP

Specifically, I have two arrays A and B that contains data, and I wish to use the data in one, compute something, and store it to other.

my fortran code would look like this

!$OMP PARALLEL DO PRIVATE(tmp,data)
DO i = 1, 10000
   tmp = A(i) !!Extract A(i)
   data = Do_Stuff(tmp) !!Compute
   B(i)=data !!Store
END DO
!$OMP END PARALLEL DO

are there any lurking race conditions here?

I'm asking because in pages 11-12 in the introduction i'm reading the code bellow has this problem, even though the index i is different for all iterations.

!$OMP PARALLEL DO
do i = 1, 1000
    B(i) = 10 * i
    A(i) = A(i) + B(i)
end do 
!$OMP END PARALLEL DO

Upvotes: 1

Views: 428

Answers (1)

IanH
IanH

Reputation: 21431

There is a race condition in your first example.

The variable data is not explicitly given a data sharing attribute and doesn't have a predetermined attribute, consequently in a parallel construct it is shared. Multiple threads will read and write to it.

There is no such condition in your second example.

Upvotes: 1

Related Questions