Problema con el bloque común en la programación paralela de OpenMP

Tengo algunas preguntas sobre el uso de bloques comunes en programación paralela en Fortran.

Mis subrutinas tienen bloques comunes. ¿Tengo que declarar todos los bloques comunes y threadprivate en la región paralela do?

¿Cómo pasan la información? Quiero un reloj común separado para cada hilo y quiero que pasen información a través del final de la región paralela. ¿Sucede aquí?

MiFord la subrutina cambia algunas variables en bloques comunes yCondact la subrutina los sobrescribe nuevamente pero la función usa los valores deCondact subrutina ¿La segunda subrutina y función copian las variables de la subrutina anterior para cada subproceso?

program
...
! Loop which I want to parallelize
!$OMP parallel DO
!do I need to declear all common block and threadprivate them here?
I = 1, N
...
call FORD(i,j)
...
!$OMP END parallel DO
end program

subroutine FORD(i,j)
dimension zl(3),zg(3)
common /ellip/ b1,c1,f1,g1,h1,d1,
.               b2,c2,f2,g2,h2,p2,q2,r2,d2
common /root/ root1,root2
!$OMP threadprivate (/ellip/,/root/)
!this subroutine rewrite values of b1, c1 and f1 variable.
CALL CONDACT(genflg,lapflg)
return
end subroutine

SUBROUTINE CONDACT(genflg,lapflg)
common /ellip/ b1,c1,f1,g1,h1,d1,b2,c2,f2,g2,h2,p2,q2,r2,d2
!$OMP threadprivate (/ellip/)
! this subroutine rewrite b1, c1 and f1 again
call function f(x)
RETURN
END

function f(x)
common /ellip/ b1,c1,f1,g1,h1,d1,
.               b2,c2,f2,g2,h2,p2,q2,r2,d2
!$OMP threadprivate (/ellip/)
! here the function uses the value of b1, c1, f1 from CONDAT subroutine.
end

Respuestas a la pregunta(2)

Su respuesta a la pregunta