目录
1、官网-下载地址:
MPICH | High-Performance Portable MPI
2、放入Linux中,解压:
tar -xvf mpich-4.0.2.tar.gz
3、配置安装:
cd mpich-4.0.2/
./configure
如果没有 Fortran 编译器,则可以避免构建 MPI Fortran 库:
./configure --disable-fortran
(此处配置等待较久...)
如果报错说“Aborting because C++ compiler does not work.”,就安装下编译器:
sudo apt install g++
4、编译安装:
make; sudo make install
(此处编译等待更久...)
如果报错说无make指令,就安装下cmake:
sudo apt install cmake
5、验证安装是否完成:
mpiexec --version
安装完成。
1、待运行的源文件demo.c:
- #include
- #include
-
- int main(int argc, char** argv) {
- // 初始化MPI环境。
- // MPI Init的两个参数目前没有被MPI实现使用,但是为了以防将来实现可能需要这些参数。
- MPI_Init(NULL, NULL);
-
- // 通过调用以下方法来得到所有可以工作的进程数量
- int world_size;
- MPI_Comm_size(MPI_COMM_WORLD, &world_size);
-
- // 得到当前进程的rank
- int world_rank;
- MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
-
- // 得到当前进程的名字
- char processor_name[MPI_MAX_PROCESSOR_NAME];
- int name_len;
- MPI_Get_processor_name(processor_name, &name_len);
-
- // 打印一条带有当前进程名字,rank以及整个 communicator 的大小的 hello world 消息。
- printf("Hello world from processor %s, rank %d out of %d processors\n",
- processor_name, world_rank, world_size);
-
- // 释放 MPI 的一些资源. 在此之后不能再进行MPI调用
- MPI_Finalize();
- }
2、再编写makefile:
- EXECS=demo
- MPICC?=mpicc
-
- all: ${EXECS}
-
- demo: demo.c
- ${MPICC} -o demo demo.c
-
- clean:
- rm ${EXECS}
3、然后编译:
make
注意:如果想要在好几个节点的集群上面跑这个 MPI 程序的话,就需要配置一个 host 文件(不是 /etc/hosts)。如果在笔记本或者单机上运行的话,可以跳过下面这一段。
需要配置的 host 文件会包含你想要运行的所有节点的名称。为了运行方便,你需要确认一下所有这些节点之间能通过 SSH 通信,并且需要根据[设置认证文件这个教程](http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html)配置不需要密码的 SSH 访问。 我的 host 文件看起来像这样:
host_file:
- cetus1:2
- cetus2:2
- cetus3:2
- cetus4:2
(冒号后面的数字表示每个处理器有的核数,也可以不加“冒号和后面的数字”)
应该设置一个叫 MPI_HOSTS 的环境变量,把它指向 host 文件所在的位置。如果单机跑的话就不用设置这个环境变量。
- export MPIRUN=/home/kendall/bin/mpirun
- export MPI_HOSTS=host_file
4、然后运行:
单机下:
mpirun -n 4 ./demo
或者多机时:
mpirun -n 4 -f host_file ./demo
上面的MPICH使用C和C++开发,但其实也有Python绑定版,对大部分同学来说这个会更友好。
Python版MPICH库名为:mpi4py,文档推荐:
11. 使用Python的mpi4py模块 — python-parallel-programming-cookbook-cn 1.0 文档
使用起来简单直观多了。
1、安装mpi4py库:
首先也要先安装上面的MPICH,然后:
pip3 install mpi4py
(可能会卡主比较久...)
2、编写helloWorld_MPI.py:
- from mpi4py import MPI
-
- comm = MPI.COMM_WORLD
- rank = comm.Get_rank()
- print("hello world from process ", rank)
3、然后运行:
mpiexec -n 5 python3 helloWorld_MPI.py
或
mpirun -np 3 python3 mpi_helloworld.py