OPENMP F90 / 95 Loops DO aninhados - problemas para melhorar a implementação em série
Fiz algumas pesquisas, mas não consegui encontrar nada que parecesse relacionado à minha pergunta (desculpe se minha pergunta é redundante!). De qualquer forma, como o título indica, estou tendo problemas para obter melhorias na implementação serial do meu código. O trecho de código que eu preciso paralelizar é o seguinte (este é o Fortran90 com OpenMP):
do n=1,lm
do m=1,jm
do l=1,im
sum_u = 0
sum_v = 0
sum_t = 0
do k=1,lm
!$omp parallel do reduction (+:sum_u,sum_v,sum_t)
do j=1,jm
do i=1,im
exp_smoother=exp(-(abs(i-l)/hzscl)-(abs(j-m)/hzscl)-(abs(k-n)/vscl))
sum_u = sum_u + u_p(i,j,k) * exp_smoother
sum_v = sum_v + v_p(i,j,k) * exp_smoother
sum_t = sum_t + t_p(i,j,k) * exp_smoother
sum_u_pert(l,m,n) = sum_u
sum_v_pert(l,m,n) = sum_v
sum_t_pert(l,m,n) = sum_t
end do
end do
end do
end do
end do
end do
Estou enfrentando problemas de condição de corrida? Ou estou simplesmente colocando a diretiva no lugar errado? Sou muito novo nisso, então peço desculpas se esse é um problema excessivamente simplist
e qualquer forma, sem paralelismo, o código é terrivelmente lento. Para dar uma idéia do tamanho do problema, os índices lm, jm e im são 60, 401 e 501, respectivamente. Portanto, a paralelização é crítica. Qualquer ajuda ou link para recursos úteis seria muito apreciada! Estou usando o xlf para compilar o código acima, se isso for úti
Obrigado! -Jen