2009-09-25 3 views
1

У меня есть раздел программы 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 содержит выделенное пространство для использования в качестве рабочих массивов в Fast-Fourier-Transforms.

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

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

ответ

0

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

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

Возможно, вам, вероятно, придется реализовать свой план B.

Смежные вопросы