los datos privados no triviales en Fortran90 OpenMP
-
16-09-2019 - |
Pregunta
Tengo una sección de un programa Fortran90 que deben ser parallelized con OpenMP.
!$omp parallel num_threads(8) &
!$omp private(j, s, prop_states) &
!$omp firstprivate(targets, pulses)
! ... modify something in pulses. targets(s)%ham contains pointers to
! elements of pulses ...
do s = 1, n_systems
prop_states(s) = targets(s)%psi_i
call prop(prop_states(s), targets(s)%grid, targets(s)%ham, &
& targets(s)%work, para)
end do
!$omp end parallel
Lo que estoy seguro de si es estructuras de datos complejas pueden ser privados a cada hilo (y cómo esto debe hacerse - es firstprivate
correcta). En el código de ejemplo anterior, targets
es de un tanto complicado tipo definido por el usuario, con subcampos igualmente complejos. Por ejemplo, targets(s)%ham%op(1)%pulse
es un puntero a algún elemento de un pulses
matriz. También, targets(s)%work
contiene asigna espacio para ser utilizado como matrices de trabajo en Fast-Fourier transformadas.
Obviamente, cada hilo tiene que mantener una copia independiente tanto de targets
y de pulses
, y mantener los punteros entre los dos de forma independiente. Me parece que esto podría estar pidiendo un poco demasiado de la gestión de memoria automática de OpenMP. ¿Es esto correcto o debe este trabajo fuera de la caja?
La alternativa, por supuesto, es crear copias de los datos originales dentro de cada hilo (almacenado en una matriz), y utilizar estos datos copiados privadas en la llamada a prop
.
Solución
A partir de la lectura de la norma OpenMP 2.5 no puede utilizar los objetivos de punteros en Fortran private
(o firstprivate
o threadprivate
) cláusulas, lo que parece descartar su código. Una vez dicho esto, no es algo que he probado en OpenMP por lo que si en bash adelante y llegar a ninguna parte, háganoslo saber.
Y firstprivate
es correcta si sus variables privadas están a inicializar, al entrar en la región en paralelo, con el valor de las variables del mismo nombre en la entrada a la región paralela.
supongo que probablemente tendrá que poner en práctica su plan B.