问题描述
此代码:
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