最近由于导师的一个项目结项,需要搭建一个并行运算平台。经高手推荐,我们打算采用MPI+OpenPBS来搭建,各节点机位为fodera,通过共享上网。
假设共有4台机器,主机名分别为station1,station2,station3,station4。以第一台为例:
1.1、更改/etc/hosts文件
#vi /etc/hosts
打开hosts文件,更改如下:
#127.0.0.1 localhost.localdomain localhost(注意,这行必须注释,否则连不上计算节点)
192.168.0.1 station1
192.168.0.2 station2
192.168.0.3 station3
192.168.0.4 station4
1.2 创建SSH信任连接(在root目录下)
1.2.1 在station1生成SSH秘钥对
#ssh-keygen -t rsa #一路回车即可,产生.ssh文件
#ls -a #查看是否有.ssh文件夹
1.2.2进入.ssh目录
#cd .ssh
1.2.3 生成authorized_keys文件
#cp id_rsa.pub authorized_keys
1.2.4 退出到root目录
#cd ..
1.2.5 建立本身的信任连接
#ssh station1 #按提示输入yes
1.2.6 设置station2(station2的root目录下)
#ssh-keygen -t rsa 生成.ssh文件夹
#scp 192.168.0.1:/root/.ssh/* /root/.ssh 拷贝station1上的.ssh文件夹覆盖本地的
#scp 192.168.0.1:/etc/hosts /etc/hosts 拷贝station1上的hosts文件覆盖本地的
#ssh station1 提示处输入yes回车
设置station3,station4的方法与station2相同
1.2.7 确认四台机器的信任连接已建立
对每个节点执行:
#ssh station1
#ssh station2
#ssh station3
#ssh station4
在提示处输入yes回车,最后确定无需输入密码并且没有任何提示信息即可登陆("Last login:时间日期"提示信息除外)
2 安装mpich2
2.1 到MPICH官方网站下载源代码包,解压缩
#tar -zxvf mpich2-1.0.8.tar.gz
2.2 进入mpich2解压目录
#cd mpich2-1.0.8
2.3 设置安装目录
#./configure --prefix=/usr/local/mpich
2.4 编译
#make
2.5 安装
#make install
2.6 改变目录(可选)
#mv mpich2-1.0.8 /usr/local/mpich/install
2.7 退出到root目录
#cd
2.8 通过编辑.bashrc文件修改环境变量
#vim .bashrc
修改后的.bashrc文件如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
PATH="$PATH:/usr/local/mpich/bin" #新增加的
#Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
2.9 测试环境变量设置
#which mpd
#which mpicc
#which mpiexec
#which mpirun
2.10 修改/etc/mpd.conf文件,内容为secretword=myword
#vi /etc/mpd.conf
设置文件读取权限和修改时间
#touch /etc/mpd.conf
#chmod 600 /etc/mpd.conf
2.11 创建主机名称集合文件/root/mpd.hosts
#vi mpd.hosts
文件内容如下:
station1
station2
station3
station4
3 测试
3.1 本地测试
启动:
#mpd&
[1] 24455
观看启动机器:
#mpdtrace
station1
退出:
#mpdallexit
3.2运行集群系统
#mpdboot -n 4 -f mpd.hosts
参数-n 4指定了要起动的机器个数,-f mpd.hosts指定了通过mpd.hosts运行
#mpdtrace
station1
station6
station3
station8
#mpdallexit
3.3测试运行MPICH的圆周率的程序
在软件的安装包里有圆周率计算的原代码icpi.c,先编译成可执行文件
#cd /usr/local/mpich/install/examples/
mpicc icpi.c -o icpi
3.1 集群测试
#mpdboot -n 4 -f mpd.hosts
#启动这四台机器
#mpiexec -n 4 /usr/local/mpich/install/examples/icpi
用num指定使用的进程数
Enter the number of intervals: (0 quits) 100000000
pi is approximately 3.1415926535901937, Error is 0.0000000000004006
wall clock time = 18.460739
Enter the number of intervals: (0 quits) 10000
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.022534
Enter the number of intervals: (0 quits) 0
#mpdallexit
3.2 单机测试
#cd /usr/local/mpich/install/examples/
#./icpi
Enter the number of intervals: (0 quits) 100000000
pi is approximately 3.1415926535902345, Error is 0.0000000000004414
wall clock time = 73.898167
Enter the number of intervals: (0 quits) 10000
pi is approximately 3.1415926544231341, Error is 0.0000000008333410
wall clock time = 0.010941
测试结果表明:在intervals的值设为100000000,既精确值比较大时,群集的4进程并发运行时间是18.460739秒,单机单进程运行时间是73.898167秒,明显快很多,并行运算还是很有效果的。在intervals的值设为10000,既精确值比较小时,群集的4进程并发运行时间是0.022534秒,单机单进程运行时间是0.010941秒,这是因为并行运算过程中,参与运算的机器需要通过网络传递一些消息,如果计算量不大的话,花在了这上面的时间影响会比较明显,因而反不如单机的来得快。