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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top