openmpi笔记

本文持续更新…

最近用到openmpi,所以顺便学习一下,做个笔记。
参考资料有:

  1. openmpi youtube视频教程
  2. openmpi提供的视频介绍–这个比较长,比较细(英文)

1 OpenMPI使用–Fortran

这里主要讲fortran的例子,python的例子可以使用mpi4py

1.1 单个子程序

这里假定已经安装好OpenMPI,举例说明其应用
写一个名为hello.f90的程序,代码为:

program main  #fortran 程序开始
      use mpi  #使用mpi
      integer :: ierr   #声明变量为整型
      call MPI_INIT(ierr)
      write(*,*) 'Hello world'
      call MPI_FINALIZE(ierr)
end program main

所有要执行的程序放在 call MPI_INIT() 和 call MPI_FINALIZE()之间,这样才能调用mpi执行。
编译:

mpif90 hello.f90 -o hello #-o表示重命名为hello,否则是a.out

关于fortran的编译可以使用:

g77 hello.f90 
or
gfortran hello.f90

但是由于我们使用了mpi,所有要用mpif90编译。
运行程序:

mpirun -np 4 hello

在这里插入图片描述

  • -np x表示使用x个进程(process)来运行程序

1.2 多个子程序multiple subroutines

现在将程序修改为

program main
      use mpi
      integer :: ierr,myrank,mysize
      call MPI_INIT(ierr)
      !First subroutine
      call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr)
      !Second subroutine
      call MPI_COMM_SIZE(MPI_COMM_WORLD,mysize,ierr)
      write(*,*) 'myrank:',myrank,'mysize:',mysize
      call MPI_FINALIZE(ierr)
end program main

上面MPI_COMM是mpi中的函数,这里rank和size会分别告诉你哪个进程正在工作,以及使用了多少个进程
编译:

mpif90 hello.f90 -o hello

四个进程运行
在这里插入图片描述
结果显示进程调用排序是3,0,2,1(从0开始到n-1),共4个进程

1.3 Timer计时

timer可以计算每个进程的时间,调用的模块是MPI_WTIME()

program main
      use mpi
      integer :: ierr,myrank,mysize
      real :: t1,t2
      call MPI_INIT(ierr)
      !First subroutine
      call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr)
      !second
      call MPI_COMM_SIZE(MPI_COMM_WORLD,mysize,ierr)
      t1=MPI_WTIME()
      write(*,*) 'myrank:',myrank,'mysize:',mysize
      T2=MPI_WTIME()
      write(*,*) t2-t1
      call MPI_FINALIZE(ierr)
end program main

编译并运行

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Mr_Cat123/article/details/103425016