嵌套在openmp do循环中的循环循环会发生什么?

What happens to cycle loop nested in openmp do loop?

我有一个包含嵌套循环的 Fortran 代码。外循环使用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

是的,您可以在 loop1 中使用 cycle。该循环将由每个线程独立执行,每个线程上下文中的条件跳转不会造成任何问题。

只是不要忘记将 j 设为私有!只有 i 会自动设为私有。

顺便说一句,OpenMP 允许使用 cycle,甚至 parallel dodocument 表示

Only an iteration of the innermost associated loop may be curtailed by a CYCLE statement.

所以在你的情况下,你甚至可以在外循环中使用 cycle,这是你唯一的循环 并行部分相关联(即,没有几个 collapse-d 循环)。