一、安装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-->settings或Alt+F7
3、切换到C/C++选项卡。首先选择“Win32 Debug”(①的下拉框),再选择“Code Generation”(②的下拉框),再选择“Debug Multithreaded”(③的下拉框)。在“Project Options”的文本框中显示“/MT”表示设置成功。然后选择“Win32Release”(①的下拉框)重复上述步骤。
4、在C/C++选项卡中选择“All Configurations”。(①的下拉框)选择“Preprocessor”(②的下拉框),在相关位置输入MPICH所附带的头文件的目录。
5、在Link选项卡中,选择“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。我的机器上默认的passphrase是beHappy,很有意思的密码。设置这个东西很重要,一定要记住;下面会说到为什么。
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来运行并行程序,终于出现了正确的结果!