嵌套在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 do
; document 表示
Only an iteration of the innermost associated loop may be curtailed by a CYCLE statement.
所以在你的情况下,你甚至可以在外循环中使用 cycle
,这是你唯一的循环 与 并行部分相关联(即,没有几个 collapse
-d 循环)。
我有一个包含嵌套循环的 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 do
; document 表示
Only an iteration of the innermost associated loop may be curtailed by a CYCLE statement.
所以在你的情况下,你甚至可以在外循环中使用 cycle
,这是你唯一的循环 与 并行部分相关联(即,没有几个 collapse
-d 循环)。