前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安装MPICH并运行第一行代码

安装MPICH并运行第一行代码

原创
作者头像
小锋学长生活大爆炸
发布2022-08-19 21:39:31
1.7K0
发布2022-08-19 21:39:31
举报

目录

安装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

 安装完成。

试运行代码

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 processors\n",
         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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装MPICH
  • 试运行代码
  • 进阶Python版
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档