0

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)

このパターンを加速することはできますか?

4

1 に答える 1