Cuda Fortran不理解call语句
我正在尝试将PGFortran用于CUDA。我在我的电脑上安装了PGFortran,并尽我所知将一切联系起来。为了开始,我决定学习一门教程。尝试编译代码时: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)
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)