【Fortran并行科学计算】Hello-World程序

2016-11-25
#Fortran #Parallel

MPI(message passing interface),是一个消息传递接口。MPI的函数总共有287个。

想实现一个MPI并行计算的程序的话,只要掌握MPI的工作机理和6个简单的MPI函数便可以了,本文介绍4个简单MPI函数:MPI_INIT、MPI_COMM_RANK、MPI_COMM_SIZE和MPI_FINALIZE。

注意:以下调用格式为Fortran格式,大部分教程都是C语言的MPI介绍,这里以及以后的文章都是以Fortran为基础,尤其要注意Fortran不分大小写。

一、Hello World程序

先给出一个最简单的Hello_world的Fortran + MPI的程序,在此基础上来分析MPI的4个最简单的函数——MPI_INIT、MPI_COMM_RANK、MPI_COMM_SIZE和MPI_FINALIZE。

	program hello_world
      
      use mpi
      !include 'mpif.h'
      integer ierr, num_procs, my_id

      call MPI_INIT ( ierr )
      ! find out my process ID, and how many processes were started.
      call MPI_COMM_RANK (MPI_COMM_WORLD, my_id, ierr)
      call MPI_COMM_SIZE (MPI_COMM_WORLD, num_procs, ierr)

      print *, "Hello world! I'm process ", my_id, " out of ", num_procs, " processes."

      call MPI_FINALIZE ( ierr )

      stop
	end program hello_world

1.MPI初始化函数

call MPI_INIT (ierr)

MPI_Init用来初始化MPI执行环境,建立多个MPI进程之间的联系,为后续通信做准备。

2.MPI结束函数

call MPI_FINALIZE(ierr)

MPI_Finalize则是结束MPI执行环境。

3.MPI进程标识获取函数

call MPI_COMM_RANK(MPI_COMM_WORLD, my_id, ierr)

MPI_Comm_rank就是来标识各个MPI进程的,告诉调用该函数的进程“我是谁?”。

4.MPI通信包含的进程数获取函数

call MPI_COMM_SIZE(MPI_COMM_WORLD, num_procs, ierr)

MPI_COMM_SIZE用来标识相应进程组中有多少个进程。

二、运行过程和结果

2.1. 将以上内容保存为hello_world.f90,上传到服务器的文件夹/home/xldeng/mpi里面:

2.2. 编译hello_world.f90为hello_world,并用ls查看内容:

  mpiifort hello_world.f90 -o hello_world

2.3. 使用服务器里面的命令来调用不同的节点上面的核来计算:

  srun -p hpib -n 10 hello-world

三、注意事项

3.1 . 注意程序中的一个小细节:

  use mpi 
  !include 'mpif.h'

含义为调用mpi的库函数,因为使用的是Intel MPI + Fortran90,所以调用的方式为:use mpi。Fortran77可能需要 include “mpif.h”。

3.2 . 在2.2节中的mpiifort是ifort的并行使用方法,检验mpiifort的用法:which mpiifort或者是mpiifort -v。

3.3 . 在2.3节中的说明:本程序的运行平台为服务器上,所以使用的是MPI使用指南 | 武汉大学超算中心中提供的提交方法。如果在单台服务器上面,可以使用如下命令:

mpirun -np 4 hello_wolrd

来运行程序。

四、参考文献