一、参考链接
1、官方安装文档
https://mpi4py.readthedocs.io/en/stable/install.html
2、源码包下载地址
https://github.com/mpi4py/mpi4py/releases
二、编译安装步骤
1、前提:系统已安装好OpenMPI或IntelMPI的环境
#使用which命令查看到已存在mpi的程序
$ which mpicc
/software/OpenMPI/4.0.5/bin/mpicc
2、解压&&编译安装
tar -xvf mpi4py-3.1.4.tar.gz
cd mpi4py-3.1.4
#构建
python3 setup.py build --mpicc=/software/OpenMPI/4.0.5/bin/mpicc
#使用 --prefix 参数指定安装到/software/Mpi4py目录下
python3 setup.py install --prefix=/software/Mpi4py
3、安装结果
#mpi4py的模块将安装到此目录,产生如下文件
$ cd /software/Mpi4py/lib/python3.8/site-packages
$ ls
mpi4py mpi4py-3.1.4-py3.8.egg-info
$ cd mpi4py
$ ls
bench.py futures __init__.pyi __main__.pyi MPI.pyi run.pyi
bench.pyi include libmpi.pxd mpi.cfg __pycache__ util
dl.cpython-38-x86_64-linux-gnu.so __init__.pxd lib-pmpi MPI.cpython-38-x86_64-linux-gnu.so py.typed
dl.pyi __init__.py __main__.py MPI.pxd
4、使用
将编译的模块路径追加到 PYTHONPATH 环境变量即可使用Mpi4py的模块
export PYTHONPATH=$PYTHONPATH:/software/Mpi4py/lib/python3.8/site-packages
5、实际运行测试
解压的源码包目录下有一个名为test的目录,该目录下有很多测试脚本,可以验证安装是否正常
$ cd test
$ ls
arrayimpl.py test_cco_nb_vec.py test_ctypes.py test_fortran.py test_op.py test_rma.py
dlpackimpl.py test_cco_ngh_buf.py test_datatype.py test_grequest.py test_p2p_buf_matched.py test_spawn.py
mpiunittest.py test_cco_ngh_obj.py test_dl.py test_group.py test_p2p_buf.py test_status.py
__pycache__ test_cco_obj_inter.py test_doc.py test_info.py test_p2p_obj_matched.py test_subclass.py
runtests.py test_cco_obj.py test_dynproc.py test_io.py test_p2p_obj.py test_threads.py
spawn_child.py test_cco_vec.py test_environ.py test_memory.py test_pack.py test_util_dtlib.py
test_address.py test_cffi.py test_errhandler.py test_mpimem.py test_pickle.py test_util_pkl5.py
test_attributes.py test_comm_inter.py test_errorcode.py test_msgspec.py test_rc.py test_win.py
test_cco_buf.py test_comm.py test_exceptions.py test_msgzero.py test_request.py
test_cco_nb_buf.py test_comm_topo.py test_file.py test_objmodel.py test_rma_nb.py
#也可以自己写一个测试程序来运行测试
$ cat test.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
print("Hello, world! I am rank %d." % rank)
#测试运行,-n 指定并行计算使用的核心数
$ mpirun -n 4 python3 test.py
Hello, world! I am rank 2.
Hello, world! I am rank 3.
Hello, world! I am rank 0.
Hello, world! I am rank 1.
6、编译中的坑
如果build过程中出现error的错误,有可能是系统自带或yum安装的python3缺少一些模块,可以根据错误的提示信息安装指定模块并添加到 PYTHONPATH 环境变量即可。