Windows环境下MPI程序的编译以及运行

一、安装MPI

第一步:下载MPI软件包

得到文件: mpich.nt. 1.2.5.zip

第二步:安装

1、解压缩文件mpich.nt.1.2.5.zip到目录mpich.nt.1.2.5

2、进入目录mpich.nt.1.2.5

3、双击setup.exe,并按提示进程安装

目标目录:C/Program Files/MPICH,安装内容:全选

4、依照提示完成全部安装工作

第三步:验证安装是否正确完成

1、查看C/Program Files/MPICH目录是否存在

2、打开“任务管理器”中的“进程”选项卡,查看是否有一个mpd.exe 进程。如果有说明安装成功。以后每次启动系统,该进程将自动运行。

第四步:采用相同的方法完成局域网内其它计算机的安装工作

要求:1、均为管理员账户

      2、目标目录必须完全相同

第五步:注册(每台计算机都要进行)

目的:将先前在每台计算机上申请的账号与密码注册到MPICH 中去,以便MPICH在网络环境中访问每台主机。

方法:运行“C:/Program Files/MPICH/mpd/bin/MPIRegister.exe”,输入账号及密码,完成注册。

用户名和密码必须是有管理员权限的密码,否则在运行该软件的时候将会出错。

第六步:配置(每台计算机都要进行)

目的:让MPI程序能在多台机器上运行。

方法:开始->程序->MPICH->mpd->MPICH Configuration tool



二、在C语言上如何编写并运行MPI程序(以hello为例演示设置过程)

第一步:设置C语言的编译环境

1、新建一个Win32 Console Application工程。

方法:File->New

2、打开工程设置对话框。

方法:Project-->settingsAlt+F7

3、切换到C/C++选项卡。首先选择“Win32 Debug”(①的下拉框),再选择“Code Generation”(②的下拉框),再选择“Debug Multithreaded”(③的下拉框)。在“Project Options”的文本框中显示“/MT”表示设置成功。然后选择“Win32Release”(①的下拉框)重复上述步骤。

4、在C/C++选项卡中选择“All Configurations”。(①的下拉框)选择“Preprocessor”(②的下拉框),在相关位置输入MPICH所附带的头文件的目录。

5Link选项卡中,选择“All Configurations”。再选择“Input”在“Additional library path”的文本框中输入MPICH所附带的库文件的目录

6、在Link选项卡中,选择“All Configurations”。(①的下拉框)然后再选择“General” ,然后在“Object/library modules” 的文本框中添加“ws2_32.lib”。点击“OK”。这时在“Common Options” 中会出现“ws2_32.lib”。

7、在Link选项卡中,选择“Win32 Debug”。然后再选择“General”,然后在“Object/library modules”的文本框中添加“mpichd.lib”。点击“OK”。这时在“Project Options”中会出现“mpichd.lib”。

8、在Link选项卡中,选择“Win32 Release”。然后再选择“General” ,在“Object/library modules” 的文本框中添加“mpich.lib”。点击“OK”。这时在“Project Options” 中会出现“mpich.lib”。

第二步:编写程序

1、输入程序

第三步:编译

2、编译

第四步:运行

1、将执行文件拷贝至MPIRun.exe所在的目录

E:/mpidjana/hello/hello/Debug

第五步:运行

2、以命令MPIRun –localonly n 11运行程序


 

除此之外,对于mpich2的windows下亦有安装方式。

详细安装步骤:

1、运行mpich2-1.3.2p1-win-ia32.msi

安装过程中,会要求设置一个passphrase。我的机器上默认的passphrasebeHappy,很有意思的密码。设置这个东西很重要,一定要记住;下面会说到为什么。

2、  安装完之后,不知道下一步怎么进行了。打开刚才安装的MPICH2的快捷方式目录,发现了一个README文件。打开之后,发现了MPICH2的使用方法介绍,于是按照其中的指示,我进行了第一个MPI并行程序的编写。

我使用的是VC++2008。首先创建一个新的工程,取名为MPITest

添加MPI库的支持:

按照README中的指导,应该首先将MPI的头文件目录包含到项目中去。结果在项目属性中找了半天,也没有找到添加头文件目录的位置,只找到了包含库文件的位置,我安装MPICH2的目录为D:\Program Files\MPICH2,将MPICH2的库文件添加到如下面图1所示的位置即可。

最后才反应过来,这个工程还是空的,没有任何文件,可能跟这个有关系吧。于是,马上新建了一个Cpp文件main.cpp,将老师PPT中的例子程序拷贝进去。

果然,新建了这个cpp文件之后,项目属性中多出了C/C++这样一项,于是,就可以在其中设置包含文件的目录了,相应的配置如下面图2所示。 

        设置好这些文件之后,编译程序,结果在连接的时候报错,类似于main.obj : error LNK2019: 无法解析的外部符号_MPI_Finalize,该符号在函数_main中被引用,这样的错误出现了六个。再看README文档,发现了这样一句话:

For C applications add mpi.lib to your target link command.

于是想到,可能需要在工程中显式添加mpi库的支持。在下面图3所示的位置设置响应的lib之后,重新编译、连接程序,顺利通过。 

        然后直接编译运行程序,出现了如下面图4所示的界面,表明该程序只在本机进行了运行,尚未真正并行执行。

        然后按照README和网上的指示,安装完MPICH2之后,系统中应该会出现一个名为smpd的服务进程。我多次重新安装了MPICH2,用任务管理器查看系统中的进程,始终没有发现smpd这个进程;在安装目录下找到该程序,直接双击运行也失败。在此情况下,运行并行程序时,会出现如下的错误提示:Error: No smpd passphrase specified through the registry or .smpd file, exiting.,如下面图5所示。

Win7环境下把MPICH2配置,需要用管理员账户,启动命令行(“以管理员身份”运行cmd.exe),然后输入smpd –install –phrase ******,星号部分就是你先前设置的passphrase。终于搞定!如下面图6所示

 

再次用MPIEXEC wrapper来运行并行程序,终于出现了正确的结果!


你可能感兴趣的:(Windows环境下MPI程序的编译以及运行)