EN
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

CUDA Fortran

NVIDIA推出的运算平台。CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。2007年以来,以NVIDIA GPU为代表的加速器并行计算开始兴起。目前流行的GPU通用编程语言是CUDA C和OpenCL,它们均是C/C++语言的扩展,因此可以方便地将C/C++代码移植到GPU上。但对于科学与工程计算中的重要编程语言Fortran,无法直接地改写为CUDA C或OpenCL。

为使Fortran应用能够使用GPU加速,The Portland Group设计了CUDA Fortran语言。气象、理论物理等领域的应用代码经过简单的改造,就能够利用GPU的强大计算能力。到目前为止,只有PGI Fortran编译器支持CUDA Fortran架构。

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

如上述代码示例,testSaxpy为主机函数,调用saxpy为GPU侧的函数,saxpy的函数运行将卸载到GPU上进行。real :: x(N), y(N)声明的x和y变量为主机变量,real, device :: x_d(N), y_d(N)声明的x_d和y_d为GPU侧变量。

CUDA Fortran开源通过直接将主机变量和GPU侧变量间进行赋值,进行数据传输。比如:x_d = x就将主机变量x数据赋值给了GPU侧变量x_d。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词