PGI Cuda Fortran编译器无法转换加速器区域

时间:2018-12-19 07:23:21

标签: cuda fortran gpu pgi

我正在编写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

0 个答案:

没有答案