Я пишу простой код 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