这学期选的一门课的一个小作业,《计算科学与工程中的并行编程技术》;配环境的时候走了一些意想不到的弯路,贴出来给大家分享:
MPI安装于运行报告
学号:** 姓名:**
本机运行环境:
机器型号:联想ideapad Y460
CPU:Intel Core i5 M430主频:2.27Ghz (双核四线程)
运行内存(RAM):2GB
操作系统:Windows 7(32位)
程序开发环境:Visual Studio 2008
MPI版本:
直接使用老师给的mpich2-1.3.2p1-win-ia32安装程序。
详细安装步骤:
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中的例子程序拷贝进去。
图 1
果然,新建了这个cpp文件之后,项目属性中多出了C/C++这样一项,于是,就可以在其中设置包含文件的目录了,相应的配置如下面图2所示。
图 2
设置好这些文件之后,编译程序,结果在连接的时候报错,类似于“main.obj : error LNK2019: 无法解析的外部符号_MPI_Finalize,该符号在函数_main中被引用”,这样的错误出现了六个。再看README文档,发现了这样一句话:
For C applications add mpi.lib to your target link command.
于是想到,可能需要在工程中显式添加mpi库的支持。在下面图3所示的位置设置响应的lib之后,重新编译、连接程序,顺利通过。
图 3
然后直接编译运行程序,出现了如下面图4所示的界面,表明该程序只在本机进行了运行,尚未真正并行执行。
图 4
然后按照README和网上的指示,安装完MPICH2之后,系统中应该会出现一个名为smpd的服务进程。我多次重新安装了MPICH2,用任务管理器查看系统中的进程,始终没有发现smpd这个进程;在安装目录下找到该程序,直接双击运行也失败。在此情况下,运行并行程序时,会出现如下的错误提示:”Error: No smpd passphrase specified through the registry or .smpd file, exiting.”,如下面图5所示。
图 5
由于交作业时间紧迫,白天还要工作,我实在是没有时间研究解决问题了。于是临时决定转战Linux,下载并用Wubi安装了Ubuntu 10.10。具体安装步骤见后面的部分。后来上课的时候,清华的一个同学成功在Win7环境下把MPICH2配好了,我就去讨教了一下。原来,这个是需要用管理员账户,启动命令行(“以管理员身份”运行cmd.exe),然后输入smpd –install –phrase ******,星号部分就是你先前设置的passphrase。终于搞定!如下面图6所示
图6
再次用MPIEXEC wrapper来运行并行程序,终于出现了正确的结果!太艰辛了……如下面图7所示。
图7
Ubuntu系统下MPICH2的安装:
把老师给的“mpich2-1.3.2p1.tar.gz ”解压到我的用户目录下。解压完之后,就在根目录下面发现了README文档,马上打开观看。参照其中Getting Started一章,我开始了新的探索。
一、 首先进入解压后mpich2文件的根目录,运行配置操作:./configure –prefix=/home//mpich2-install |& tee info.txt,结果报错如下:
“No Fortran 77 compiler found. If you don’t need to build any
Fortran programs, you can disable Fortran support using
–disable-f77 and –disable-fc. If you do want to build
Fortran programs, you need to install a Fortran compiler such
as gfortran or ifort before you can proceed.”
于是按照提示修改命令,改为./configure –prefix=/home/east/mpich2-install –disable-f77 –disable-fc |& tee info.txt,结果又提示没有找到C++编译器:
“configure: error: Aborting because C++ compiler does not work. If you do not need a C++ compiler, configure with –disable-cxx”
考虑到以后应该会用到g++,于是根据提示用“sudo apt-get install g++”命令进行了安装。然后再次运行配置命令,终于成功完成。
二、运行make命令”make |& tee info.txt”,经过了漫长的等待,看到提示”Make completed”的时候,终于松了一口气。
三、安装MPICH2,运行”make install |& tee info.txt”命令。很快,就“Make completed”了。
四、将安装后MPICH2的bin目录“mpich2-install”添加到系统路径中,即添加到启动脚本中,运行命令“PATH=/home/east/mpich2-install/bin:$PATH ; export PATH”,或者直接修改系统配置文件/etc/profile,然后重启系统以使配置文件生效。然后运行which mpiexec,系统回显出mpiexec的路径,证明bin目录已经成功添加到系统路径中。
图8
为了节省时间,并确保程序的正确性,我就直接运行MPICH2安装文件中,example目录下自带的例子程序cpi了,这个程序是用来计算圆周率的。用mpicc进行编译,mpiexec来运行程序。具体命令及运行结果如上面图8所示。