目录
安装MPICH
试运行代码
进阶Python版
安装MPICH
1、官网-下载地址:
MPICH | High-Performance Portable MPI
2、放入Linux中,解压:
代码语言:javascript复制tar -xvf mpich-4.0.2.tar.gz
3、配置安装:
代码语言:javascript复制cd mpich-4.0.2/
代码语言:javascript复制./configure
如果没有 Fortran 编译器,则可以避免构建 MPI Fortran 库:
代码语言:javascript复制./configure --disable-fortran
(此处配置等待较久...)
如果报错说“Aborting because C compiler does not work.”,就安装下编译器:
代码语言:javascript复制sudo apt install g
4、编译安装:
代码语言:javascript复制make; sudo make install
(此处编译等待更久...)
如果报错说无make指令,就安装下cmake:
代码语言:javascript复制sudo apt install cmake
5、验证安装是否完成:
代码语言:javascript复制mpiexec --version
安装完成。
试运行代码
- MPI相关教程,推荐看(下面的示例就是摘自这里):A Comprehensive MPI Tutorial Resource · MPI Tutorial
- 配套代码在:GitHub - mpitutorial/mpitutorial: MPI programming lessons in C and executable code examples
1、待运行的源文件demo.c:
代码语言:javascript复制#include <mpi.h>
#include <stdio.h>
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 processorsn",
processor_name, world_rank, world_size);
// 释放 MPI 的一些资源. 在此之后不能再进行MPI调用
MPI_Finalize();
}
2、再编写makefile:
代码语言:javascript复制EXECS=demoMPICC?=mpicc all: ${EXECS} demo: demo.c ${MPICC} -o demo demo.c clean: rm ${EXECS}
3、然后编译:
代码语言:javascript复制make
注意:如果想要在好几个节点的集群上面跑这个 MPI 程序的话,就需要配置一个 host 文件(不是 /etc/hosts)。如果在笔记本或者单机上运行的话,可以跳过下面这一段。
需要配置的 host 文件会包含你想要运行的所有节点的名称。为了运行方便,你需要确认一下所有这些节点之间能通过 SSH 通信,并且需要根据[设置认证文件这个教程](http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html)配置不需要密码的 SSH 访问。 我的 host 文件看起来像这样:
host_file:
代码语言:javascript复制cetus1:2cetus2:2cetus3:2cetus4:2
(冒号后面的数字表示每个处理器有的核数,也可以不加“冒号和后面的数字”)
应该设置一个叫 MPI_HOSTS 的环境变量,把它指向 host 文件所在的位置。如果单机跑的话就不用设置这个环境变量。
代码语言:javascript复制export MPIRUN=/home/kendall/bin/mpirunexport MPI_HOSTS=host_file
4、然后运行:
单机下:
代码语言:javascript复制mpirun -n 4 ./demo
或者多机时:
代码语言:javascript复制mpirun -n 4 -f host_file ./demo
进阶Python版
上面的MPICH使用C和C 开发,但其实也有Python绑定版,对大部分同学来说这个会更友好。
Python版MPICH库名为:mpi4py,文档推荐:
11. 使用Python的mpi4py模块 — python-parallel-programming-cookbook-cn 1.0 文档
使用起来简单直观多了。
1、安装mpi4py库:
首先也要先安装上面的MPICH,然后:
代码语言:javascript复制pip3 install mpi4py
(可能会卡主比较久...)
2、编写helloWorld_MPI.py:
代码语言:javascript复制from mpi4py import MPI comm = MPI.COMM_WORLDrank = comm.Get_rank()print("hello world from process ", rank)
3、然后运行:
代码语言:javascript复制mpiexec -n 5 python3 helloWorld_MPI.py
或
代码语言:javascript复制mpirun -np 3 python3 mpi_helloworld.py