Нетривиальные частные данные в Fortran90 OpenMP

У меня есть часть программы Fortran90, которую нужно распараллелить с 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

В чем я не уверен, так это в том, могут ли сложные структуры данных быть закрытыми для каждого потока (и как это должно быть сделано - правильно ли firstprivate?). В приведенном выше примере кода targets относится к довольно сложному определяемому пользователем типу с такими же сложными подполями. Например, targets(s)%ham%op(1)%pulse — это указатель на какой-то элемент массива pulses. Кроме того, targets(s)%work содержит выделенное пространство для использования в качестве рабочих массивов в быстрых преобразованиях Фурье.

Очевидно, что каждый поток должен поддерживать независимую копию как targets, так и pulses, а также независимо поддерживать указатели между ними. Мне кажется, что это может быть слишком многого от автоматического управления памятью OpenMP. Это правильно, или это должно работать из коробки?

Альтернативой, конечно, является создание копий исходных данных в каждом потоке (хранящихся в массиве) и использование этих частных скопированных данных в вызове prop.


person Michael Goerz    schedule 25.09.2009    source источник


Ответы (1)


Из моего чтения стандарта OpenMP 2.5 вы не можете использовать цели указателей Fortran в предложениях private (или firstprivate или threadprivate), что, похоже, исключает ваш код. Сказав это, я никогда не пробовал это в OpenMP, поэтому, если вы прорветесь вперед и добьетесь чего-либо, дайте нам знать.

И firstprivate правильно, если ваши частные переменные должны быть инициализированы при входе в параллельную область со значением переменных с тем же именем при входе в параллельную область.

Я думаю, вам, вероятно, придется реализовать свой план Б.

person High Performance Mark    schedule 26.09.2009