我正在编写cuda fortran的简单代码。编译器为PGI社区版本18.4,CUDA版本为CUDA 9.0。
编译时,它返回“ PGF90-F-0155-编译器无法转换加速器区域(请参阅-Minfo消息):意外的运行时函数调用(test.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