http://hi.baidu.com/evevil/item/578c89ea990324225a2d6438
我是Linux超级新手,文中难免有错误的地方,望指正和多多包容
硬件情况:2台主机
主机1: 主机名:node1 IP:192.168.19.165 操作系统:CentOS 5.2 用户:root 密码:root
主机2: 主机名:node2 IP:192.168.19.169 操作系统:CentOS 5.2 用户:root 密码:root
(这里的两台主机上的用户名和密码设置成一样的,好像不一样的话将会影响之后mpi程序的执行)
为了省事,以下操作都是以root用户进行的
1、===================配置host文件=========================
在node1和node2上
#vi /etc/hosts 打开hosts文件,修改如下:
127.0.0.1 localhost.localdomain localhost
192.168.19.165 node1
192.168.19.169 node2
(注意127.0.0.1 localhost.localdomain localhost一定不能缺,否则将可能导致之后 mpiexec运行出错)
2、====================设置SSH信任连接====================
在node1上生成SSH秘钥对.
#ssh-keygen -t rsa yes,一路回车
#cat /root/.ssh/id_rsa.pub | root@192.168.19.169 "cat - >> root/.ssh/authorized_keys" 将密钥等信息拷贝至node2中,该过程需要输入node2上root用户的密码
#ssh root@node2 登陆node2
#exit
#ssh root@node2 第二次登陆node2,无需再输入密码了
#exit
#ssh root@node1 登陆自身一次
在node2上执行同样的操作,只不过目标换成node1了
#ssh-keygen -t rsa yes,一路回车
#cat /root/.ssh/id_rsa.pub | root@192.168.19.165 "cat - >> root/.ssh/authorized_keys"
#ssh root@node1
#exit
#ssh root@node1
#exit
#ssh root@node2
(以上使用的ssh,如果系统安装的ssh2,设置过程将与上有所不同)
3、=====================安装mpich2======================
在node1和node2上:
#tar -zxvf mpich2-1.0.1.tar.gz 解压缩
#cd mpich2-1.0.1
#./configure --prefix==安装路径,指定安装路径时可以使用#./configure --prefix=???,不带参数时默认安装路径为/usr/loacl,我用的是默认安装路径
#make
#make install 安装完成
(为了避免未知错误,两台机器的mpich2安装位置最好一样)
设置环境变量:
#cd /etc/
#vi profile 编辑profile文件
添加 PATH="$PATH:/usr/local/bin"
#source profile
#which mpd 测试环境变量
创建并修改/etc/mpd.conf文件
#vi /etc/mpd.conf
内容为
secretword=myword
#touch /etc/mpd.conf
#chmod 600 /etc/mpd.conf (设置文件读取权限和修改时间,这两步好像不能省)
创建主机名称集合文件/root/mpd.hosts
#vi /root/mpd.hosts
文件内容如下:
node1
node2
4、=====================简单的测试=========================
在node1上
#mpd & 启动
#mpdboot -n 2 -f mpd.hosts 启动2台机器(启动的机器数不能超过集群中的主机数,这里只有2台)
#mpdtrace 观看启动机器
#mpiexec -n 4 /usr/local/examples/cpi number为使用的进程数,运行mpi自带的测试程序(不一定存在)
#mpdallexit 退出
mpi程序的编译
#mpicc example.cc -o example C语言源代码
或#mpic++ example.cc -o example C++语言源代码
或#mpif77 example.f -o example Fortran语言源代码
编译后可以执行:
#mpdboot -n 2 -f mpd.hosts
#scp /tmp/example root@node2:/tmp/example (/tmp/为刚才编译的程序所在文件夹)
(需要并行运算的程序在两台主机上所存放的路径必须相同,文件名也必须相同我这里都存放在/tmp/文件夹下)
#mpiexec -n 4/tmp/example
5、===================在Eclipse中开发MPI程序=================
在新建的工程上点右键 选择Properties
添加include路径,我的mpich2安装在/usr/local
添加lib库路径,添加mpich,mpichxx,pthread 注:这是在linux下,与windows环境下需添加的库不同
OK,Eclipse加MPI开发环境配置完成
参考资料:
SSH设置:
http://stevenz.blog.hexun.com/15798089_d.html
MPICH2配置:
http://www.xxlinux.com/linux/article/accidence/install/20070514/8413.html
MPI与Eclipse:
http://blog.csdn.net/cleverysm/archive/2007/06/06/1640290.aspx
一些MPI错误解决方法:
http://blog.csdn.net/xiaxiazls/archive/2009/09/08/4530423.aspx
在PBS任务管理系统中使用MPICH
只要将
sort -u $PBS_NODEFILE > mpd.hosts
mpdboot -f mpd.hosts -n $NNODES --rsh=/usr/bin/rsh
mpiexec -machinefile $PBS_NODEFILE -np $NNODES $RUNJOB -i $WORK_AREA/$PREFILE/$PREFILE.in -dim 2 -n 100000 -d 10000 > $PREFILE.log
mpdallexit
写入pbs的script中就可以了
实际上包含了一个完整使用集群的过程,只不过是提交给了任务管理系统PBS而已。