python中的mpi4py多进程实现

centos中安装mpi模块来实现并发

Message Passing Interface,信息通讯接口,一般使用python中的mpi4py包来达到调用c++程序中的mpi模块的操作

安装mpi

这里尽量不要安装openmpi,尝试安装结果发现无法运行

  • yum list mpich*可以看到有多个包,可以选择一个版本来安装
  • yum install -y mpich-3.2*

安装mpi4py

  • pip install mpi4py安装包即可

调用方式

和一般的调用方式不一样,必须使用mpi的命令来执行python程序

1
2
3
4
5
6
7
8
9
10
11
12
13
from mpi4py import MPI
import numpy

comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
a_size = 1

senddata = (rank+1)*numpy.arange(size,dtype=int)
recvdata = numpy.empty(size*a_size,dtype=int)

comm.Alltoall(senddata,recvdata)
print(" process %s sending %s receiving %s" % (rank , senddata , recvdata))
1
2
3
4
5
6
7
8
9
# 启用5个进程来跑该程序
mpirun -n 5 python m.py

# output
process 0 sending [0 1 2 3 4] receiving [0 0 0 0 0]
process 1 sending [0 2 4 6 8] receiving [1 2 3 4 5]
process 2 sending [ 0 3 6 9 12] receiving [ 2 4 6 8 10]
process 4 sending [ 0 5 10 15 20] receiving [ 4 8 12 16 20]
process 3 sending [ 0 4 8 12 16] receiving [ 3 6 9 12 15]