données privées non triviales dans Fortran90 OpenMP
-
16-09-2019 - |
Question
J'ai une partie d'un programme Fortran90 qui devrait être parallélisée avec 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
Ce que je ne suis pas sûr est de savoir si les structures de données complexes peuvent être privés à chaque thread (et comment cela doit être fait - est firstprivate
correct). Dans l'exemple de code ci-dessus, targets
est d'un type défini par l'utilisateur quelque peu compliquée, avec des sous-domaines tout aussi complexes. Par exemple, targets(s)%ham%op(1)%pulse
est un pointeur sur un élément d'un pulses
de tableau. En outre, targets(s)%work
contient l'espace alloué à utiliser sous forme de tableaux de travail dans Fourier rapide Transforms.
De toute évidence, chaque thread a besoin de maintenir une copie indépendante les deux targets
et de pulses
, et maintenir les pointeurs entre les deux indépendamment. Il me semble que cela pourrait être demander un peu trop de la gestion automatique de la mémoire de OpenMP. Est-ce exact, ou si ce travail hors de la boîte?
L'alternative est bien sûr de créer des copies des données originales dans chaque fil (stocké dans un tableau), et d'utiliser ces données copiées privées dans l'appel à prop
.
La solution
De ma lecture du OpenMP 2.5 standard, vous ne pouvez pas utiliser les cibles des pointeurs Fortran dans les clauses private
(ou firstprivate
ou threadprivate
), qui semble exclure votre code. Cela dit, ce n'est pas quelque chose que j'ai jamais essayé OpenMP donc si vous obtenez bash avant et partout, faites le nous savoir.
Et firstprivate
est correct si vos variables privées doivent être initialisées, l'entrée dans la région parallèle, la valeur des variables du même nom à l'entrée de la région parallèle.
Je suppose que vous aurez probablement à mettre en œuvre votre plan B.