回 帖 发 新 帖 刷新版面

主题:Fortran程序已经在GPU上跑起来了。

1) 我的显卡 8400SE
     应该是能运行CUDA最低档的显卡了,GPU-Z显示16个流处理器(SP),
[img]http://linuxl4.gicp.net/lsw/8400se.jpg[/img]
     
      但是用pgi自带的命令查看,却只有8个流处理器。
Device Number:                 0
Device Name:                   GeForce 8400 SE
Device Revision Number:        1.1
Global Memory Size:            267714560
Number of Multiprocessors:     1
Number of Cores:               8
Concurrent Copy and Execution: No
Total Constant Memory:         65536
Total Shared Memory per Block: 16384
Registers per Block:           8192
Warp Size:                     32
Maximum Threads per Block:     8192
Maximum Block Dimensions:      512 x 512 x 64
Maximum Grid Dimensions:       65535 x 65535 x 1
Maximum Memory Pitch:          262144B
Texture Alignment              256B
Clock Rate:                    918 MHz

我想既然pgi认为只有8个核心,那么不管这个卡是8个还是16个核心,都是以8个核心进行计算了。

回复列表 (共12个回复)

沙发

2) 程序和计算时间对比

program main
  implicit none
  integer :: i,j
  integer,parameter :: N=50000000
  real :: x(N)=0.0
  do j=1,20
!$acc region do kernel
  do i=1,N
    x(i)=x(i)+sin(real(i))+cos(real(i))-tan(real(i))
  enddo
  enddo
  print *, sum(x)
end program main


之所以使用两个循环,是因为希望时间长一点,计时误差较小,另外如果使用一个大循环,cuda会编译报错溢出。
这个程序大家可以在自己的机器上跑跑,比较一下时间。

a) pgi 编译器,对gpu编译 ,命令pgf95 -ta=nvidia:cc11 -Minfo -O3 1.f90
结果 , 1分39秒
[~]$ time ./a.out   (a.out是刚编译出来的可执行程序, 用time命令进行计时,下同)
   4.3171661E+09

real    1m39.567s
user    1m39.237s
sys     0m0.300s

b) pgi 编译器 , 对cpu编程 , 命令pgf95 -O3 1.f90
结果
   4.3171661E+09

real    2m25.498s
user    2m24.666s
sys     0m0.369s

c) gfortran编译器 ,使用intel编译器的数学库以计算三角函数,(如果使用glibc的标准数学库,时间太长,运行到7分钟的时候我把它杀了)
命令gfortran 1.f90 -O3 -limf
结果
  4.3171661E+09

real    1m27.940s
user    1m27.673s
sys     0m0.220s

d) intel fortran 11.0
  4.3692155E+09

real    0m26.139s
user    0m25.954s
sys     0m0.178s

板凳

补充一下gfortran的数据
运行时间34分钟26秒 :)

  4.2817336E+09

real    34m34.502s
user    34m26.154s
sys     0m0.401s

3 楼

我记得前一段时间看报道说年底PGI和NVDIA才发布CUDA的fortran版本。不知道是消息有误还是这个还是处于测试阶段?
单从PGI自身的对比来看是有明显提高的。但是比起intel的编译起还是有差距。
最后想问一下F2003老师,这个CUDA的语法是怎么学的?是不是看PGI自带的说明书。

4 楼

在我的机器(笔记本, T7100,1.8GHz,3GRAM, windows vista)上采用gfortran-4.5.0-20090709的运行结果如下:

1. gfortran -o gpu gpu.f95 -O3
   结果:4.36997171E+09
   运行时间:216秒,即3m36s

2. gfortran -o gpu gpu.f95 -O3 -fopenmp
   结果:4.36997171E+09
   运行时间:116秒,即1m56s

gpu.f95
program main
  implicit none
  integer :: i,j,t1,t2
  integer,parameter :: N=50000000
  real :: x(N)=0.0
call system_clock(t1)
do j=1,20
!$omp parallel do default(private) shared(x)
  do i=1,N
    x(i)=x(i)+sin(real(i))+cos(real(i))-tan(real(i))
  enddo
!$omp end parallel do
enddo
print *, sum(x)
call system_clock(t2)
print*,'time=',nint((t2-t1)/1000.0)
end program main

5 楼


关于gpu编程,

1,cpu和gpu比较浮点性能本身就是个不平等的游戏。cpu有复杂的指令集(尤其是x86),即使在cpu内部大量堆彻浮点执行单元,也会因为前端的解码单元无法发射足够的指令而无法被喂饱。要提高指令发射能力,就必须分支预测等算法更聪明(amd比intel就差在这),但这方面潜力已经挖掘的差不多了,cpu以后提高运算能力也许只能靠堆彻核心。所以,依赖cpu增强浮点性能其效率很低,几十个核心堆起来才能顶得上现在的一个高端显卡。
gpu以及其他的浮点专用芯片没有这个限制。gtx 285有1.2Tflops的浮点性能,将面世的GT300有超过2.5T的浮点性能,nvidia的首席科学家说,2015年gpu的浮点性能将达到20T。
而目前顶级的4核心cpu才有100Gflops的浮点性能。这里不难看出高性能计算的趋势。
上面的程序用gtx285计算也就是2、3秒钟的事情。

2, gpu编程的限制
作为外设,gpu与cpu/内存之间的延迟很大,获取数据慢,所以它适合一下子完成很大的一件任务,但不适合分多次做每次工作量都很小的任务。一个比喻是gpu是载重1万吨的巨轮,1个月能运到; cpu是载重10吨的飞机,10个小时就能运到。如果我的货物只有1吨,那巨轮和飞机也都必须跑一趟,显然飞机合适。
不仅如此,gpu没有cpu灵活也是很重要的因素。并行的3个环节:进程管理,进程通信,进程同步,cpu程序都可轻易做到,但gpu目前还比较受限制。所以至少目前gpu还不适合任务并行,它更适合数据并行。你可以这样去想象,定义一个大的数组,gpu的数百个核心分别工作在这个大数组的某一段数据上,gpu比较适合做这样的事情。大多数时候,我们的算法必须要求有进程通信和同步,所以gpu的浮点峰值性能虽然诱人,但得到并非易事。
gpu工程师们正在改善这方面。

3, 
这个程序在我的8400se显卡上跑了90秒,其间拉动桌面上的窗口,一顿一顿的,可见确实占用了显卡。所以最好不要启动xwindow,在命令行下运行。
还有,对于游戏程序,数据量的多少取决于游戏分辩率,而分辨率受限于显示器大小,所以显存到了一定程度就足够了,再多就是摆设。对于数值程序,数据量不受屏幕大小限制,而是由数值算法和问题本身决定。所以显存最好大一些。这是gpu比较受限制的一个方面,目前显卡一般只有512MB-2G显存,这种容量对科学工程计算的某些问题领域只能是挠挠痒级别的。

6 楼

目前的并行程序 主流是通过mpi+分域 来实现 ,如果程序主体主要是浮点数据的四则运算 那是不是gpu比cpu更合适呢。
mpi+分域 对计算节点间 数据传输速度和延迟要求很高 要求网卡和计算核心(gpu、cpu)之间传输数据时候 延迟少 传输快 不知道目前的gpu核心在这个方面表现如何?

7 楼

我测试了下f2003的程序。在windows下,intel的编译器的确快,我的Q9550只要22s。

这样的话,请问F2003,PGI+CUDA有什么优势?

8 楼

jason388:gfortran-4.5.0-20090709也已经支持CUDA了?

9 楼

问一下搭建一个CUDA开发环境需要什么样的配置?楼上的朋友能介绍一下吗?
包括硬件和软件

10 楼

http://www.nvidia.com/object/cuda_home.html

你可以在nv官网找到所有信息.

我来回复

您尚未登录,请登录后再回复。点此登录或注册