Я работаю в Fortran. Моя цель состоит в том, чтобы распараллелить с OpenMP программы такого рода:Fortran OpenMP: создание потоков только один раз
do t=1, t_fin (sequential)
a sequence of do loops (not sequential)
end do
где цикл является последовательным (временным). Я попытался создать потоки в начале каждой последовательной итерации цикла, но это делает код медленнее, чем это могло бы быть. Поэтому мой вопрос в том, можно ли создавать потоки только один раз, прежде чем начинать цикл. Практически:
!$OMP PARALLEL
!$OMP SECTIONS
!$OMP CRITICAL
do t=1, t_fin
sequence of OMP do
end do
!$OMP END CRITICAL
!$OMP END PARALLEL
Я пробовал таким образом, но работает, как если бы это была только одна тема. Я полагаю, это зависит от того, что существует внешний критический раздел, который включает в себя omp do
. Тем не менее, я хотел бы выполнить внутренний omp do
с несколькими потоками. Есть ли способ получить это?
Я не уверен, каков ваш вопрос на самом деле. Почему вы не распараллеливаете свой цикл, используя одну директиву 'omp parallel do'? Почему вы используете 'section'? Почему вы критически настроены? Вы знаете, что в критический раздел за один раз разрешен только один поток, верно? Ваш код не имеет смысла ... –