【问题标题】:What happens to cycle loop nested in openmp do loop?嵌套在 openmp do 循环中的循环循环会发生什么?
【发布时间】:2019-09-23 02:53:26
【问题描述】:

我有一个包含嵌套循环的 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

【问题讨论】:

    标签: loops fortran openmp cycle


    【解决方案1】:

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

    别忘了将j设为私有!只有i 会自动设为私有。

    顺便说一句,OpenMP 允许使用cycle,即使是parallel dodocument 声明

    只有最里面的关联循环的迭代可以被 CYCLE 语句缩减。

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

    【讨论】:

    • 据我所知以及我们之前在此站点上建立的情况,如果循环紧密嵌套,ij 都将隐含private。但如果... 包含一些语句,j 可能不会。
    • @VladimirF 你的评论很有趣。您能否将“以前”交叉链接到相关页面?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2020-12-30
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多