参考
https://zhuanlan.zhihu.com/p/157804393?from_voters_page=true
https://www.cnblogs.com/starryxsky/p/10344344.html
什么是MPI?
MPI (Message Passing Interface)是一套标准,不是一个软件。事实上它是一套并行运算中信息传递和处理的标准,在这个标准之上,编程者可以很方便地组织自己的并行程序。
这套标准有很多种实现,比如C++,Fortran,Python的mpi4py,Matlab-MPI等等。在这些程序中调用响应的库来实现程序的并行化。
mpi4py是mpi的python接口,并不是mpi本身,所以首先要安装一个 MPI 实现软件,最好能支持 MPI-3 标准,并且最好是动态编译的。比较常用的 MPI 实现软件有 OpenMPI,MPICH 等。
安装MPI所需的环境
1. 安装openMPI
windows版本安装包OpenMPI_v1.6.2-2_win64.exe
2. 安装VSCompiler
进入微软下载链接,下载生成工具,然后直接双击进行安装。
3. 安装mpi4py
废话:使用conda或者pip直接安装mpi4py遇到了很多错误,比如使用conda安装时,只适用于python2.7,无法在python3.x上安装。所以直接看下面能在python3.8上成功的方法吧。
在官网选择一个版本下载(我选的3.0),本地解压后,打开cmd(最好以管理员方式打开)执行以下命令。
cd 你解压后的文件夹位置(如D://mpi4py-3.0.0)
conda activate 你的conda环境名字(如果不是conda环境请忽略)
python setup.py build
python setup.py build --mpi=other_mpi
python setup.py install
执行完这些命令后,可以执行conda list
看看有没有mpi4py
包,有的话,MPI就配置成功了!
4. 安装MS-MPI(可选)
如果报如下错误,则需要安装MS-MPI,若连接失效请从这里进入。
“mpi.h”: No such file or directory
注意,msi和exe都下载安装。
测试
新建一个python文件test.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
if rank == 0:
msg = 'Hello, world'
comm.send(msg, dest=1)
elif rank == 1:
s = comm.recv()
print("rank %d: %s" % (rank, s))
else:
print("rank %d: idle" % (rank))
在cmd中执行MPI命令:
mpiexec -np 8 python test.py
可以看到运行结果:
rank 2: idle
rank 6: idle
rank 4: idle
rank 7: idle
rank 5: idle
rank 3: idle
rank 1: Hello, world
可以说明MPI正确地启动了8个进程, 并且给引为1的进程发送了“Hello World”,而后该进程接收到了这个信息。