OpenMP i Fortran 95 - Virker ikke!?
Hej eksperter...Jeg har følgende Fortran 95-kode der kører i parallel vha. OpenMP... Den skal finde det det element der er størst, men lige nu ser det ud til at den bare overskriver det største element (Amax) uanset om det private element i tråden (priv_max) er større eller mindre.... Hvad sker der?!
Amax = 0.0_dbl
!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(j,alpha,beta,nu,A,priv_max,priv_numax)
priv_max = 0.0_dbl
!$OMP DO
do j = 1,Nspec
nu = nu_min+dF*(j-1)
! Calculate alpha and beta:
call CalcAlphaBeta(t,f,w,nu,alpha,beta)
! Calculate amplitude and phase:
A = sqrt(alpha**2 + beta**2)
if (A > priv_max) then
priv_max = A
priv_numax = nu
endif
enddo
!$OMP END DO
!$OMP FLUSH (Amax)
if (priv_max > Amax) then
!$OMP CRITICAL
if (priv_max > Amax) then
print *, priv_max
Amax = priv_max
numax = priv_numax
endif
!$OMP END CRITICAL
endif
!$OMP END PARALLEL
Hvis noget af det jeg skrev var uforståeligt, så sig til!
/Killer_R