微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 OpenACC 帮派级循环不起作用

如何解决为什么 OpenACC 帮派级循环不起作用

代码

integer :: g_i,w_i

  !$acc parallel num_gangs(3) num_workers(2) vector_length(1)
  !$acc loop independent gang
  do g_i = 1,3
    !$acc loop independent worker
    do w_i = 1,2
      print *,g_i,w_i
    end do
  enddo
  !$acc end parallel

打印:

        1            1
        1            2
        1            1
        1            2
        1            1
        1            2

我不明白为什么 g_i 上的帮派级循环不起作用。

pgfortran 编译器报告:

171,Generating Tesla code
    173,!$acc loop gang(3) ! blockidx%x
    175,!$acc loop worker(2) ! threadidx%y
175,Loop is parallelizable

解决方法

您使用的是什么编译器版本、命令行选项和架构?

我试过你的例子,但它似乎给出了预期的答案。我在面向 V100 的 Linux x86_64 上使用 NVHPC SDK 20.11。

% cat test.f90


program foo

   integer :: g_i,w_i

  !$acc parallel num_gangs(3) num_workers(2) vector_length(1)
  !$acc loop independent gang
  do g_i = 1,3
    !$acc loop independent worker
    do w_i = 1,2
      print *,g_i,w_i
    end do
  enddo
  !$acc end parallel

end program foo
% pgfortran test.f90 -acc -V20.11 -fast -Minfo=accel ; a.out
foo:
      7,Generating Tesla code
          9,!$acc loop gang(3) ! blockidx%x
         11,!$acc loop worker(2) ! threadidx%y
     11,Loop is parallelizable
            1            1
            1            2
            2            1
            2            2
            3            1
            3            2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。