Domanda

Ho una sezione di un programma Fortran90 che dovrebbe essere parallelizzata 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

Ciò di cui non sono sicuro è se strutture di dati complesse possano essere private per ciascun thread (e come ciò dovrebbe essere fatto - is firstprivate corretto?).Nel codice di esempio sopra, targets è di un tipo definito dall'utente piuttosto complicato, con sottocampi altrettanto complessi.Per esempio, targets(s)%ham%op(1)%pulse è un puntatore a qualche elemento di un array pulses.Anche, targets(s)%work contiene lo spazio allocato da utilizzare come matrici di lavoro nelle trasformazioni Fast-Fourier.

Ovviamente, ogni thread deve mantenere una copia indipendente di entrambi targets e di pulses, e mantenere i puntatori tra i due in modo indipendente.Mi sembra che questo potrebbe essere chiedere un po' troppo alla gestione automatica della memoria di OpenMP.È corretto o dovrebbe funzionare immediatamente?

L'alternativa ovviamente è creare copie dei dati originali all'interno di ciascun thread (memorizzati in un array) e utilizzare questi dati copiati privati ​​nella chiamata a prop.

È stato utile?

Soluzione

Dalla mia lettura dello standard OpenMP 2.5 non è possibile utilizzare gli obiettivi dei puntatori Fortran private (O firstprivate O threadprivate), che sembra escludere il tuo codice.Detto questo, non è qualcosa che ho mai provato in OpenMP, quindi se vai avanti e arrivi da qualche parte, faccelo sapere.

E firstprivate è corretto se le vostre variabili private devono essere inizializzate, all'ingresso nella regione parallela, con il valore delle variabili omonime all'ingresso nella regione parallela.

Immagino che probabilmente dovrai attuare il tuo piano B.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top