Wednesday, December 2, 2009

linux平台下mpich2的安装以及如何运行并行程序 zz

From : http://hi.baidu.com/%B2%DD%B8%F9%CE%DE%B4%FD/blog/item/dcb32844961d4348500ffe0f.html

网上有很多资料,一搜一大片,其实很多雷同,而且是根据官方文档翻译过来的。在下载mpich2时就能下载到相应的帮助文档,安装过程在mpich2-doc-install.pdf(或mpich2-doc-README.txt)中说的很是详尽了!我仅把自己的安装过程和遇到的问题写下来。

我的计算环境是一个32CPU的集群,想在自己的帐户下安装mpich2-1.0.6,我的帐户目录为/home/mat04/ 。首先将mpich2-1.0.6拷贝到一个目录下,假设为/home/mat04/software/,接着如下:

cd /home/mat04/software/
tar zvxf mpich2-1.0.6.tar.gz
cd mpich2-1.0.6
makdir ~/mpich2-1.0.6/
makdir ~/tmp
./configure --prefix=/home/mat04/mpich2-1.0.6/ 2>&1 tee configure.log
make 2>&1 tee configure.log
make install 2>&1 tee configure.log

几点说明:
1、 由于 ./configure使用了选项--prefix ,所以在前面要先创建目录makdir ~/mpich2-1.0.6/。2、 安装的过程需要一个临时文件夹,所以makdir ~/tmp,要是没有这个tmp目录的话, ./configure总是出错。
3、 ./configure,make,make insatll中使用的 2>&1 tee ***.log 是要产生相应的log文件。
4、 与windows版本不同的是:在include文件夹下有mpi.mod,而windows下的include文件夹下则没有mpi.mod文件。windows下需要自己写一个mpi.mod,在前面的文章里有阐述。

然后,就是要将/home/mat04/mpich2-1.0.6/bin写入环境变量PATH里:
vi ~/.bashrc
插入三行:
# mpich2 variables :PATH=/home/mat04/mpich2-1.0.6/bin:$PATH
export PATH
保存退出,再source .bashrc

测试一下:
which mpirun
which mpif77
which mpd
结果应该是:
~/mpich2-1.0.6/bin/mpirun
~/mpich2-1.0.6/bin/mpif77
~/mpich2-1.0.6/bin/mpd
那就安装完成了,简单~~~,可以写一个简单的helloworld程序测试一下,当然也可以用它的cpi。

遇到的问题:
安装完成后发现/home/mat04/mpich2-1.0.6/bin目录下没有mpif90,而mpif77,mpicc,mpicxx都有。我就是要写90程序啊,就需要mpif90。不知道出了什么问题,卸了重装,换mpich2-1.0.3,问题依旧。倒是mpich-1.2.7没问题,装完就什么都有了,但是没有mpdboot,这也是我需要的啊。

昨天我针对这个问题给mpich写了封信,不知道能不能回复呢,呵呵。等不了那个,就先问了问小董,他对mpi挺熟悉的。他说是fortran编译器的问题。因为在我的帐户下装了pgf和intel两个fortran编译器,安装mpich2时,./congfigure步骤中关于fortran90的选项时认的是pgf90,而没有认intel的ifort。若把环境变量中的pgf去掉,只剩下intel的,再./configure时自然认的是ifort,安装完后在bin/目录下也有了mpif90。但是为什么pgf90不行,ifort行呢?不知道,他说在机房的10号机上只有pgf时是可以的,如果pgf和intel同时存在,不知道会怎么样。经过这个问题,我就把pgf彻底注释掉了,以后只用一个intel编译器。

最后,在集群环境下如何运行mpi程序。

1、先写一个mpd.hosts文件,里面写上要起动的节点,在1号机上有8个能用的节点oscarnode01-oscarnode08,就在里面写上这8行:
oscarnode01
oscarnode02
oscarnode03
oscarnode04
oscarnode05
oscarnode06
oscarnode07
oscarnode08
当然也可以把主节点simserver01也写进去。

2、启动节点: mpdboot -n 2 -f mpd.hosts
2代表2台机器,在这里就是两个节点。此时启动的是mpd.hosts中最前面的两行,即1,2节点,因为1,2节点都已经坏掉了,所以应该把oscarnode03和oscarnode04写在最前面。若mpdboot -n 9 -f mpd.hosts则会出错了,因为没有那么多个节点可用啊~~~

3、提交任务:mpiexec -n 4 ./helloworld
两个节点有4个CPU,当然要使用4个进程了,就是提了8个进程,也是在这4个CPU上运行。

4、退出:mpdallexit

几点说明:
1、虽然mpd.hosts启动的是3,4节点,但要是站在主节点simserver01上提任务,主节点上便会有任务进程运行,尽管主节点simserver01并不在mpd.hosts中。所以要先ssh oscarnode04进入一个节点中,再提交任务。
2、在集群环境中提交castep,pwscf,vasp等任务多用作业管理程序,如PBS。自己写的mpi程序也应该用pbs提交,试了几次不太理想,没有完全成功,pbs脚本还是不太会写。等成功了再写一篇文章吧。

写完这篇文章后,看了看邮箱,mpich回信了,原因跟小董说的一样,就是configure没找到f90编译器,老外的工作效率就是高啊,前天下午发的邮件,昨天早晨就回了,我今天下午才看见,是我耽误了自己啊,呵呵,其实是我写信的时候觉得他不一定能给我回复啊。以下是他的回复:The configure.log file you sent was empty. But it is possible that configure could not find the Fortran 90 compiler. You can specify the Fortran 90 compiler by setting the environment variable F90 to the name of the compiler and then rerunning configure, make, make install. Also make sure the f90 compiler is in your default path, or provide the full path in the F90 environment variable.

No comments:

Post a Comment