subsub
現在、含まれているサブルーチン ( ) が親サブルーチン ( sub
)で宣言された変数にアクセスして変更する Fortran コードを高速化しています。
module mod
implicit none
contains
subroutine sub
integer :: var(10)
integer :: i
!$acc kernels loop
do i = 1, 10
call subsub
enddo
contains
subroutine subsub
!$acc routine
var(i) = i
endsubroutine
endsubroutine
endmodule
program test
use mod
call sub
endprogram
PGI コンパイラ バージョン 20.9-0 でコンパイルするとsubsub
、ホスト変数を参照できないというエラーが表示されますvar
。
sub:
8, Generating implicit copy(.S0000) [if not already present]
9, Loop is parallelizable
Generating Tesla code
9, !$acc loop gang, vector(32) ! blockidx%x threadidx%x
NVFORTRAN-S-0155-acc routine cannot be used for contained subprograms that refer to host subprogram data: var (test.f90)
0 inform, 0 warnings, 1 severes, 0 fatal for subsub
これは理にかなっています。またはでvar
デバイス上に作成しようとしましたが、結果は変わりません。acc data create(var)
acc declare create(var)
このパターンを加速することはできますか?