Что происходит с циклом цикла, вложенным в цикл openmp do? - PullRequest
1 голос
/ 23 сентября 2019

У меня есть код на Фортране с вложенными циклами.Внешний цикл использует openmp.Внутренний цикл имеет команду цикла.Я хочу знать для openmp, есть ли специальная обработка для цикла во внутреннем цикле?

!$OMP PARALLEL
!$OMP DO schedule(static)
do i=1,N
...
loop1: do j=1,M
if() cycle loop1
enddo
enddo
!$OMP END DO
!$OMP END PARALLEL

1 Ответ

1 голос
/ 23 сентября 2019

Да, вы можете использовать cycle в loop1.Этот цикл будет выполняться каждым потоком независимо, и условные переходы в контексте каждого потока не создают никаких проблем.

Просто не забудьте сделать j приватным!Только i будет автоматически закрыто.

Кстати, OpenMP позволяет использовать cycle даже для parallel do; документ утверждает, что

С помощью оператора CYCLE может быть свернута только итерация самого внутреннего связанного цикла.

Так что в вашем случае вы могли быиспользуйте cycle даже во внешнем цикле, который является вашим единственным циклом , связанным с параллельным участком (т. е. не существует нескольких collapse -d циклов).

...