(一)MS-MPI入门及第一个程序

一、MS-MPI的安装

1.下载地址

https://msdn.microsoft.com/en-us/library/bb524831(v=vs.85).aspx
MS-MPI有两个安装包,一个是SDK,另一个是MPI可执行程序,两个都需要安装。

2.安装

按正常软件的安装方式即可。

二、MS-MPI的第一个程序

1. 配置MS-MPI环境

1)MS-MPI的系统变量

在安装MS-MPI的同时,会自动添加4个系统环境变量,可以直接通过【计算机-属性- 高级系统设置-环境变量-系统变量】查看,也可以通过以下方式:

  • 找到MS-MPI的bin目录:如本人安装在D:\MPISDK\Microsoft MPI\Bin
  • 在路径栏输入cmd,可以直接打开到该路径下的控制台
  • 输入指令:set MSMPI
  • 可以看到
    figure1
    其中MSMPI_BIN包含MS-MPI的可执行文件等;MSMPI_INC包含MS-MPI的头文件等;MSMPI_LIB32和MSMPI_LIB64分别包含32位和64位的库文件。

2)配置MS-MPI+Visual Studio环境

新建一个VS工程,添加一个源文件(如main.cpp),在工具栏找到【项目-属性】,我们需要配置的地方有以下几个:

  • 【C/C+±附加包含目录】:添加$(MSMPI_INC);$(MSMPI_INC)\x86
  • 【链接器-常规-附加库目录】:添加$(MSMPI_LIB32)
  • 【链接器-输入-附加依赖项】:添加msmpi.lib

[注]:以上是在工程默认为32位,若需要64位时,将其中的 x86换成 x64LIB32换成 LIB64即可。

2. 创建MS-MPI工程

以下是实现一个简单的MS-MPI多线程通信的例子。

#include <iostream> 
#include <mpi.h> 

int main(int argc, char* argv[]) 
{ 
	MPI_Init(&argc, &argv); 

	int RankID; 
	MPI_Comm_rank(MPI_COMM_WORLD, &RankID); 

	if (0 == RankID) 
	{ 
		int SendNum = 16; 
		MPI_Send(&SendNum, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); 
	} 
	else if (1 == RankID) 
	{ 
		int RecvNum = 0; 
		MPI_Recv(&RecvNum, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); 
		std::cout << "Receive from rank 0: " << RecvNum << std::endl; 
	} 

	MPI_Finalize(); 
	return 0; 
} 

该程序实现的功能是进程0向进程1发送一个整数16,进程1接收到并打印到窗口。
其中,

  • MPI_Init(&argc, &argv);:是MPI的初始化函数;
  • MPI_Comm_rank(MPI_COMM_WORLD, &RankID);:是获取该进程的ID编号,后面会用来判断该进程执行哪部分代码;
  • if (0 == RankID)…else… :这部分代码每个进程会也只会选择执行其中一个某一块,如进程0只会执行判断RankID==0true的部分代码,进程1只会执行判断RankID==1true的部分代码,该判断部分之外的代码是所有进程共有的代码,也就是全都会执行;
  • MPI_Send(&SendNum, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);:按参数的顺序:SendNum是要发送的数据,1是发送数据的数量,MPI_INT是数据的类型位int型,1 是接收端的进程编号,0是发送端的进程编号,MPI_COMM_WORLD是由所有进程组成的通信组,也就是通信子。

3. MPI程序的运行

MPI程序的运行方式和普通程序的运行方式有所不同,需要使用MPI自带的指令mpiexec.exe执行。这里介绍两种MPI程序的运行方式。

1)通过指令窗口执行

这是最常见的一种方法,

  • 找到MPI的bin目录,在路径栏输入cmd,执行指令mpiexec -n 2 "G:\Program\VS2015\MPITest001\Debug\MPITest.exe";(路径使用绝对路径);
  • 也可以将MPITest.exe直接复制到bin目录下,执行mpiexec -n 2 MPITest.exe

执行结果:
figure2
n用来指示创建进程的个数,2就表示创建两个进程,后面的exe可执行文件只在两个进程上都执行该程序。
[注]:在本机上做测试时,也可以不用 -n 2来显示地指出创建进程个数,不使用 -n 2时系统会默认在本机所有进程上执行。

2)通过修改Visual Studio调试指令和参数

Microsoft Visual Studio提供有将指令配置到工程中的方法,这样带来的好处是可以直接通过VS的运行执行多进程程序,而不需要到MPI的的bin目录下需要指令执行,有一定的方便性。配置的方法如下:
打开VS工程的【属性-调试-命令】:添加$(MSMPI_BIN)\mpiexec.exe
【属性-调试-命令参数】:添加-n 2 $(TargetPath)

执行结果:
figure3
[注]:1. 通过第2种方法运行MPI多进程程序时,无法调试,如果需要调试,就需要将配置到工程里的指令删去才可。
2. 在后续的开发中,根据需要改相应的指令即可。

猜你喜欢

转载自blog.csdn.net/u014516143/article/details/89316258
今日推荐