Ubuntu 18.04下的MPICH安装

MPI(Message-Passing Interface),并不是一种新的语言,而是消息传递接口,它定义了一个可以被C、C++和Fortran程序调用的函数库[1]。我们可以用MPI来进行进程间的通信,以消息传递的方式来对分布式内存系统进行编程。通过安装MPICH构建MPI编程环境,从而进行并行程序的开发。MPICH是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具[2]。

1.安装方案一

直接运行利用apt安装,执行下面的命令,按照提示操作即可,但是我安装后使用还是有问题。
apt安装命令:

apt-get install mpich

如果需要卸载:

sudo apt-get --purge remove mpich

安装之后可以利用第三部分提供的代码进行测试。

2.安装方案二

利用源码安装。

1. 确保已经安装了如下软件:

gcc --version
g++ --version
cmake --version
gfortran --version

如果没有直接sudo apt-get install xxx安装即可。
如果gfortran安装有问题,可以参考下面的:

sudo apt-get install gfortran
# 如果没有源则按下面更新下,再次安装
# sudo apt-get update

如果上面的命令,无法安装gfortran,则需要,显示:

gfortran : 依赖: gfortran-7 (>= 7.3.0-12~) 但是它将不会被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系

这表示有冲突了,所以可以采取如下命令安装,aptitude会提供一套解决冲突的方案,你可以根据提示选择合适方案安装,如果aptitude没有安装的,那么可以按照下面的安装即可:

sudo apt install aptitude
sudo aptitude install gfortran

2.下载源码:

在你希望存储的文件路径下执行下载命令(下面的是3.0版本,需要其它版本的去官网选择,将下面的下载链接替换调即可,后面的命令中对应的版本编号对应着改下即可,官网):

wget https://www.mpich.org/static/downloads/3.0/mpich-3.0.tar.gz

如果一次下载失败,可以继续执行下面的命令,进行断点续传:

wget -c https://www.mpich.org/static/downloads/3.0/mpich-3.0.tar.gz

3.解压

继续执行下面的命令:

sudo tar -zxvf mpich-3.0.tar.gz

4.配置路径

解压完后, 进入解压后的文件夹,进行配置(我的配置安装位置为 /home/mpi/mpich3(提前准备好)。如果没有root权限,可以选择用户目录/home/XXX/mpich3)(这个安装路径随自己选的),将下面命令后面的prefix改成自己想设置的路径后,运行命令即可。

sudo ./configure -prefix=/home/mpi/mpich3

如果出现以下错误

configure: error: No Fortran 77 compiler found. If you don't need to   
  build any Fortran progr

可能就是没有安装gfortran.安装方法看上面的方案二中的第一步。

5.编译和安装

配置完成后,执行编译和安装工作

sudo make
sudo make install 

6.添加环境变量

有个gedit的可以运行下面的打开.bashrc,没有的就直接用vim 修改.bashrc也是一样的。

sudo gedit ~/.bashrc

在最后添上下面几句话

export MPI_ROOT=/home/mpi/mpich3
export PATH=$MPI_ROOT/bin:$PATH
export MANPATH=$MPI_ROOT/man:$MANPATH

3.测试

随便找个地方新建一个测试文件,mpi_hello.cpp,代码如下:

#include <iostream>
#include <string.h>
#include <mpi.h>
using namespace std;

const int max_string = 100;

int main ()
{
	int comm_sz=0;
	int my_rank=0;
	char greeting[max_string];
	
	MPI_Init(NULL,NULL);
    MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
    MPI_Comm_size(MPI_COMM_WORLD,&comm_sz);

	 if(my_rank!=0){
		sprintf(greeting,"Greetings from process %d of %d!",my_rank,comm_sz);
		MPI_Send(greeting,strlen(greeting),MPI_CHAR,0,0,MPI_COMM_WORLD);
	}
	else{
		cout<<"Greetings from process "<<my_rank<<" of "<<comm_sz<<"!"<<endl;
		for(int i=1;i<comm_sz;i++){
			MPI_Recv(greeting,max_string,MPI_CHAR,i,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
			cout<<greeting<<endl;
		}
	}
	
	MPI_Finalize ();
	return 0;
}

然后重新打开terminal,进行编译

mpicxx -g -Wall -o mpi_hello.o mpi_hello.cpp

注意: 如果用root身份运行,会提示不能直接运行,他会提示你要么添加参数,要么换个非root用户身份运行,推荐换个身份运行;此外如果配置上了上面的环境变量依然报错,可以关闭终端,重新打开一个终端运行
其中:

mpicc         是编译C程序的
mpicxx        是编译C++程序的
-g            允许使用调试器
-Wall         显示警告(W大写)
-o outfile.o  编译出可执行的文件,文件名为outfile.o
-02           告诉编译器对代码进行优化

编译完成后,开始运行,可由-n后面的数字来调节创建进程数。

mpirun -n 4 ./mpi_hello.o

最后得到的结果为,有可能顺序不一样

Greetings from process 0 of 4!
Greetings from process 1 of 4!
Greetings from process 2 of 4!
Greetings from process 3 of 4!

至此,MPI的安装和测试全部完成。

参考文献

[1] [美]Peter S.Pacheco.并行程序设计导论[M].邓倩妮等译注.北京:机械工业出版社,2012.8
[2] 百度百科, https://baike.baidu.com/item/MPICH/7488372?fr=aladdin
[3]Ubuntu18.10安装MPICH, https://www.jianshu.com/p/74d30935f277
[4]我的并行计算之路(一)Ubuntu 16.04下的MPI安装, https://blog.csdn.net/qq_30239975/article/details/77703321

Ubuntu 20.04下的MPICH安装

参考:Ubuntu 18.04下的MPICH安装

注意:MPICH和cmake不同版本间的组合,有时有会不兼容的问题。

MPI(Message-Passing Interface),并不是一种新的语言,而是消息传递接口,它定义了一个可以被C、C++和Fortran程序调用的函数库[1]。我们可以用MPI来进行进程间的通信,以消息传递的方式来对分布式内存系统进行编程。通过安装MPICH构建MPI编程环境,从而进行并行程序的开发。MPICH是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具[2]。

1.安装方案一

直接运行利用apt安装,执行下面的命令,按照提示操作即可,但是我安装后使用还是有问题。
apt安装命令:

apt-get install mpich

如果需要卸载:

sudo apt-get --purge remove mpich

安装之后可以利用第三部分提供的代码进行测试。

2.安装方案二

利用源码安装。

1. 确保已经安装了如下软件:

gcc --version
g++ --version
cmake --version
gfortran --version

如果没有直接sudo apt-get install xxx安装即可。
如果gfortran安装有问题,可以参考下面的:

sudo apt-get install gfortran

如果上面的命令,无法安装gfortran,则需要,显示:

gfortran : 依赖: gfortran-7 (>= 7.3.0-12~) 但是它将不会被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系

这表示有冲突了,所以可以采取如下命令安装,aptitude会提供一套解决冲突的方案,你可以根据提示选择合适方案安装,如果aptitude没有安装的,那么可以按照下面的安装即可:

sudo apt install aptitude
sudo aptitude install gfortran

2.下载源码:

在你希望存储的文件路径下执行下载命令(下面的是3.0版本,需要其它版本的去官网选择,将下面的下载链接替换调即可,后面的命令中对应的版本编号对应着改下即可,官网):

wget https://www.mpich.org/static/downloads/3.4/mpich-3.4.tar.gz

如果一次下载失败,可以继续执行下面的命令,进行断点续传:

wget -c https://www.mpich.org/static/downloads/3.4/mpich-3.4.tar.gz

3.解压

继续执行下面的命令:

sudo tar -zxvf mpich-3.4.tar.gz

4.配置路径

解压完后, 进入解压后的文件夹,进行配置(我的配置安装位置为 /home/mpi/mpich3(提前准备好)。如果没有root权限,可以选择用户目录/home/xx/mpich3)(这个安装路径随自己选的),将下面命令后面的prefix改成自己想设置的路径后,运行命令即可。

sudo ./configure --with-device=ch3 FFLAGS=-fallow-argument-mismatch  -prefix=/home/xx/software/mpich3.4

如果出现以下错误

configure: error: No Fortran 77 compiler found. If you don't need to   
  build any Fortran progr

可能就是没有安装gfortran.安装方法看上面的方案二中的第一步。

5.编译和安装

配置完成后,执行编译和安装工作

sudo make
sudo make install 
6.添加环境变量

有个gedit的可以运行下面的打开.bashrc,没有的就直接用vim 修改.bashrc也是一样的。

sudo gedit ~/.bashrc
# 或者 sudo vim ~/.bashrc

在最后添上下面几句话

export MPI_ROOT=/home/xx/software/mpich3.4
export PATH=$MPI_ROOT/bin:$PATH
export MANPATH=$MPI_ROOT/man:$MANPATH

使修改的配置生效(或者直接关闭终端重新打开):

source /etc/profile

3.测试

随便找个地方新建一个测试文件,mpi_hello.cpp,代码如下:

#include <iostream>
#include <string.h>
#include <mpi.h>
using namespace std;

const int max_string = 100;

int main ()
{
	int comm_sz=0;
	int my_rank=0;
	char greeting[max_string];
	
	MPI_Init(NULL,NULL);
    MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
    MPI_Comm_size(MPI_COMM_WORLD,&comm_sz);

	 if(my_rank!=0){
		sprintf(greeting,"Greetings from process %d of %d!",my_rank,comm_sz);
		MPI_Send(greeting,strlen(greeting),MPI_CHAR,0,0,MPI_COMM_WORLD);
	}
	else{
		cout<<"Greetings from process "<<my_rank<<" of "<<comm_sz<<"!"<<endl;
		for(int i=1;i<comm_sz;i++){
			MPI_Recv(greeting,max_string,MPI_CHAR,i,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
			cout<<greeting<<endl;
		}
	}
	
	MPI_Finalize ();
	return 0;
}

然后重新打开terminal,进行编译

mpicxx -g -Wall -o mpi_hello.o mpi_hello.cpp

注意: 如果用root身份运行,会提示不能直接运行,他会提示你要么添加参数,要么换个非root用户身份运行,推荐换个身份运行;此外如果配置上了上面的环境变量依然报错,可以关闭终端,重新打开一个终端运行
其中:

mpicc         是编译C程序的
mpicxx        是编译C++程序的
-g            允许使用调试器
-Wall         显示警告(W大写)
-o outfile.o  编译出可执行的文件,文件名为outfile.o
-02           告诉编译器对代码进行优化

编译完成后,开始运行,可由-n后面的数字来调节创建进程数。

mpirun -n 4 ./mpi_hello.o

最后得到的结果为,有可能顺序不一样

Greetings from process 0 of 4!
Greetings from process 1 of 4!
Greetings from process 2 of 4!
Greetings from process 3 of 4!

至此,MPI的安装和测试全部完成。

参考文献

[1] [美]Peter S.Pacheco.并行程序设计导论[M].邓倩妮等译注.北京:机械工业出版社,2012.8
[2] 百度百科, https://baike.baidu.com/item/MPICH/7488372?fr=aladdin
[3]Ubuntu18.10安装MPICH, https://www.jianshu.com/p/74d30935f277
[4]我的并行计算之路(一)Ubuntu 16.04下的MPI安装, https://blog.csdn.net/qq_30239975/article/details/77703321