Малко съм объркан относно условията на състезание, които могат да възникнат в OpenMP
По-конкретно, имам два масива A
и B
, които съдържат данни, и искам да използвам данните в един, да изчисля нещо и да го съхраня в друг.
моят fortran код ще изглежда така
!$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