Cuda Fortran不理解call语句

Cuda Fortran不理解call语句,cuda,fortran,Cuda,Fortran,我正在尝试将PGFortran用于CUDA。我在我的电脑上安装了PGFortran,并尽我所知将一切联系起来。为了开始,我决定学习一门教程。尝试编译代码时: module mathOps contains attributes(global) subroutine saxpy(x, y, a) implicit none real :: x(:), y(:) real, value :: a integer :: i, n n = size(x)

我正在尝试将PGFortran用于CUDA。我在我的电脑上安装了PGFortran,并尽我所知将一切联系起来。为了开始,我决定学习一门教程。尝试编译代码时:

module mathOps
contains
  attributes(global) subroutine saxpy(x, y, a)
    implicit none
    real :: x(:), y(:)
    real, value :: a
    integer :: i, n
    n = size(x)
    i = blockDim%x * (blockIdx%x - 1) + threadIdx%x
    if (i <= n) y(i) = y(i) + a*x(i)
  end subroutine saxpy 
end module mathOps

program testSaxpy
  use mathOps
  use cudafor
  implicit none
  integer, parameter :: N = 40000
  real :: x(N), y(N), a
  real, device :: x_d(N), y_d(N)
  type(dim3) :: grid, tBlock

  tBlock = dim3(256,1,1)
  grid = dim3(ceiling(real(N)/tBlock%x),1,1)

  x = 1.0; y = 2.0; a = 2.0
  x_d = x
  y_d = y
  call saxpy<<<grid, tblock="">>>(x_d, y_d, a)
  y = y_d
  write(*,*) 'Max error: ', maxval(abs(y-4.0))
end program testSaxpy
错误指向调用saxpy(x\u d,y\u d,a)行。出于某种原因,它显然讨厌我使用
?根据教程,这些三个V形标志应该在那里:

三个V形符号之间的信息是执行 配置,它指示有多少设备线程执行 内核并行

移除这些V形标志没有任何意义,因为它们是该计划的目的。那么为什么PGFortran不喜欢这个呢

至于汇编。我已经按照教程使用了
pgf90-o saxpy main.cuf
。但由于出现错误,我也尝试了
pgf90-Mcuda-o saxpy main.cuf
。相同的结果。

该日志中的内核调用行似乎存在文本错误:

call saxpy<<<grid, tblock="">>>(x_d, y_d, a)
因此,如果您在实际代码中相应地更改这一行,我认为您将获得更好的结果。

我相信,中的拼写错误现在已经修复。
call saxpy<<<grid, tblock="">>>(x_d, y_d, a)
call saxpy<<<grid,tBlock>>>(x_d, y_d, a)