在
上一篇
中我们简要介绍了 mpi4py 及其所提供的并行编程功能,本文介绍如何安装和使用 mpi4py。
安装依赖
要正确地安装和使用 mpi4py,你需要先安装和设置好以下软件:
- 一个 MPI 实现软件,最好能支持 MPI-3 标准,并且最好是动态编译的。比较常用的 MPI 实现软件有 OpenMPI,MPICH 等。
- Python 2.7,Python 3.3+。要写 Python 的并行程序,Python 自然是必不可少的。
安装 mpi4py
当你已经安装好以上依赖的软件后,就可以安装 mpi4py 了,不过在这之前你需要
mpicc
在你的程序搜索路径上,可以简单地通过以下命令查看:
$ which mpicc
如果该命令输出对应的
mpicc
执行路径,你就可以进行下面的安装步骤了,但是如果没有输出,你需要把安装的 MPI 软件的 bin 目录添加到
PATH
环境变量,lib 目录添加到
LD_LIBRARY_PATH
环境变量,以使
mpicc
可以被搜索到。
使用 pip 安装
使用 pip 安装 mpi4py 非常简单,如果你有 root 权限,直接在终端中输入下面的命令就行了:
$ pip install mpi4py
如果没有 root 权限,你可以安装 mpi4py 到自己的 $HOME 目录下,这样只能供你自己使用:
$ pip install mpi4py --user
保证安装的可执行文件路径 ~/.local/bin 添加到了
PATH
环境变量中,库文件路径 ~/.local/lib 添加到了
LD_LIBRARY_PATH
环境变量中。
从源文件安装
丛
https://pypi.python.org/pypi/mpi4py
上下载 mpi4py 安装包,然后解压安装包:
$ tar -xvzf mpi4py-X.Y.Z.tar.gz
$ cd mpi4py-X.Y.Z
编译安装包:
$ python setup.py build
编译完成后就可以安装了:
$ python setup.py install
或者
$ python setup.py install --user
测试 mpi4py 是否安装正确
现在可以写一段简单的程序来测试 mpi4py 是否安装好及能否正常使用:
# mpi_helloworld.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
node_name = MPI.Get_processor_name() # get the name of the node
print 'Hello world from process %d at %s.' % (rank, node_name)
运行 mpi4py 程序
用下面的命令运行一个 Python 写的 MPI 程序:
$ mpiexec -n 3 python mpi_helloworld.py
Hello world from process 2 at node1.
Hello world from process 0 at node1.
Hello world from process 1 at node1.
也可以用一种较老的方式:
$ mpirun -np 3 python mpi_helloworld.py
Hello world from process 2 at node1.
Hello world from process 0 at node1.
Hello world from process 1 at node1.
其中 -n 或者 -np 指定使用多少个 MPI 进程来执行这个程序。
上面的命令会在单个节点(单台机器)上发起3个 MPI 进程来并行执行
mpi_helloworld.py
,如果要在多个节点(多台机器)上并行执行程序,可以用下面的命令:
$ mpiexec -n 3 -host node1,node2,node3 python mpi_helloworld.py
Hello world from process 1 at node2.
Hello world from process 2 at node3.
Hello world from process 0 at node1.
其中 -host (或者 -H)后面指定所要使用的节点,这些节点以逗号分隔。如果节点很多也可以用选项 -hostfile 或者 -machinefile 指定一个文件,在这个文件中写入你需要使用的计算节点。更多的运行选项可以通过下面的命令获得:
$ mpiexec --help
在
下一篇
中我们将通过几个简单的例子来展示怎么使用 mpi4py 来进行并行编程,以使读者能够快速地上手使用 mpi4py。