Меня немного смущают условия гонки, которые могут возникнуть в OpenMP.
В частности, у меня есть два массива A
и B
, которые содержат данные, и я хочу использовать данные в одном, что-то вычислить и сохранить в другом.
мой код на фортране будет выглядеть так
!$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
Есть ли здесь какие-либо скрытые условия гонки?
Я спрашиваю, потому что на страницах 11-12 во введении я читаю приведенный ниже код имеет эту проблему, хотя индекс i
отличается для всех итераций.
!$OMP PARALLEL DO
do i = 1, 1000
B(i) = 10 * i
A(i) = A(i) + B(i)
end do
!$OMP END PARALLEL DO