ЗГУ Компилятору Cuda Fortran не удалось перевести регион ускорителя - PullRequest
0 голосов
/ 19 декабря 2018

Я пишу простой код cuda fortran.Компилятор - PGI Community Edition 18.4, а версия cuda - cuda 9.0.
При компиляции возвращается «PGF90-F-0155-Compiler не удалось преобразовать область ускорителя (см. Сообщения -Minfo): неожиданный вызов функции времени выполнения (тест.CUF: 1) ".
Код с вышеуказанной ошибкой находится внизу описания.
Я сузил ошибку до выражения" je = ubound (a, 1)"в коде устройства.Однако,
(1), если я заменю « ubound » на « lbound », он по крайней мере пройдет компиляцию;
(2), если я заменю » integer :: a (n)"с" integer :: a (:)"в коде устройства, он выполняет правильные вычисления.
Ошибка появляется в другом сложном коде,Я сокращаю и упрощаю код для диагностики, поэтому приведенный ниже код может показаться странным.

module incre
  contains
  attributes(global) subroutine increment(a,n)
    implicit none
    integer, value :: n
    integer :: a(n)
    integer :: i,js,je

    js=lbound(a,1)
    je=ubound(a,1)

    i=threadIdx%x-10
    if(i>=js .and. i<=je) a(i)=a(i)+1

  end subroutine
end module

program main  
  use cudafor
  use incre
  implicit none
  integer,parameter :: n=32
  integer :: a(n)
  integer, device :: a_d(n)

  a=0
  a_d=a
  call increment<<<1,64>>>(a_d,n)
  a=a_d

  if(any(a /= 1)) then
    write(*,*) "failed"
  else
    write(*,*) "passed"
  endif
end program
...