PVF(PGI Visual Fortran) 安装以及openacc在linux和window下调用
1.首先下载软件到这个地址:
http://www.pgroup.com/support/download_pgi2015.php
因为已经安装了vs所以此处选择的只是PGI加速器
下载好文件以后一路安装下去,在下面这个页面能看到PGI也安装到了VS
我用的license 是在nvida openacc下载编译器的时候免费获取的,学生用的license 可以用一年,不过是单节点的,编译成的二级制文件也不可以移植,不过可以先用来开发,这种license key貌似都是PGI通用的,地址是:
http://www.nvidia.com/object/openacc-toolkit.html#utm_source=shorturl&utm_medium=referrer&utm_campaign=openacctoolkit
1.新建工程,选择PGI Visual Fortran第一个
然后点击项目属性,选择language ,选择enable openacc 处选为yes,我们可以看到他可以支持很多并行扩展:
将程序加入,编译完成:
命令行也可以使用:
也可以像Linux那样输入-ta=nvidia,time,然后来统计GPU端的时间和参数
<span style="font-size:24px;">program prog implicit none integer::n=100,m=500,i,j real,dimension(:,:),allocatable :: a //声明数组 real::w0=2.0,w1=3.0 allocate( a(n,m) ) //申请空间 do i=1,n do j=1,m a(i,j)=i*2.0+j*2.0 end do end do !$acc region //!$acc region 和 !$acc end region命令复制到GPU端 do i=1,n do j=1,m a(i,j) = w0 * a(i,j) +w1*(a(i-1,j) + a(i+1,j) + a(i,j-1) + a(i,j+1)) end do end do !$acc end region print*,"finish" end program prog</span>
这是复制信息,在!$acc region 后把a复制到GPU端,后面是执行并行
这是赋值和执行的时间。
源程序为:
<span style="font-size:24px;">module vecaddmod implicit none contains subroutine vecaddgpu( r, a, b, n ) real, dimension(:) :: r, a, b integer :: n integer :: i !$acc kernels do copyin(a(1:n),b(1:n)) copyout(r(1:n)) do i = 1, n r(i) = a(i) + b(i) enddo end subroutine end module program main use vecaddmod implicit none integer :: n, i, errs, argcount real, dimension(:), allocatable :: a, b, r, e character*10 :: arg1 argcount = command_argument_count() n = 1000000 ! default value if( argcount >= 1 )then call get_command_argument( 1, arg1 ) read( arg1, "(i)" ) n if( n <= 0 ) n = 100000 endif allocate( a(n), b(n), r(n), e(n) ) do i = 1, n a(i) = i b(i) = 1000*i enddo ! compute on the GPU call vecaddgpu( r, a, b, n ) ! compute on the host to compare do i = 1, n e(i) = a(i) + b(i) enddo ! compare results errs = 0 do i = 1, n if( r(i) /= e(i) )then errs = errs + 1 endif enddo print *, errs, " errors found" if( errs ) call exit(errs) end program</span><span style="font-size:32px;"> </span>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: JSP、PHP、ASP访问数据库速度
- 下一篇: ASP与JSP的比较