MPICH2

MPI实验报告
目的:
了解建立高性能计算机的方法,使用现有计算机组装高性能计算机。
环境
主机: windows7 操作系统
虚拟机1:windowsXP, 操作系统
虚拟机2:ubuntu11.10操作系统
虚拟机3:ubuntu11.10操作系统
软件:MPICH2
MPICH2是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具,在程序设计语言上支持C/C++和Fortran。具体参见下面的网站:http://www.mcs.anl.gov/index.php
安装软件及配置
从官网http://www.mcs.anl.gov/research/projects/mpich2/index.php下载mpich2的最新版本mpich2-1.4.1p1. 以及windows上的版本mpich2-1.4.1p1-win-ia32.msi
原创文章:转载请注明出处。 http://lt200819.iteye.com/blog/1321974在unbuntu 11.10上安装
1.ubuntu上缺少g++  md5支持
sudo apt-get install g++  Sudo apt-get install libssl-dev

2.安装mpich2
mkdir  mpich2  将mpich安装到这个文件夹下
在获得mpich2-1.4.1之后
1)gzip –d mpich2-1.4.1p1.tar.gz     (将gzip压缩的文件解压:mpich2-1.4.1p1.tar)
2)tar xvf mpich2-1.4.1p1.tar        (将tar归档的文件解开)
3)cd mpich2-1.4.1p1              (进入mpich2-1.4.1p1的目录)
4)configure                      (运行shell程序configure对mpich进行一些配置)
./configure --prefix=/home/walter/mpich2 --with-pm=smpd --disable-f77 --disable-fc
使用smpd作为pm
运行make命令”make |& tee make info.txt”
make install
将安装后MPICH2的bin目录“mpich2”添加到系统路径中

3设置环境变量
Sudo vi /ect/environment  在PATH后面加上/home/yourname/mpich2/bin

4然后echo $PATH,看看有没有添加成功。再下一步which smpd,看看有没有找到相应的路径。

5复制node1系统,修改副本的主机名
先在/etc/hosts中删除原来的hostname,然后 vi /etc/hostname改成你想要的,注意必须顶行写。然后使用hostname命令来重新得到hostname,logout一下再login就会改掉。

6修改node1和 node2的host
Ifconfig 得到本机的ip
node1的ip(192.168.1.1)   node1 server
#个人认为这里的server加不加都可以就只是一个名字
node2的ip(192.168.1.2)   node2
原创文章:转载请注明出处。 http://lt200819.iteye.com/blog/1321974
7自动ssh登录
授权让node1和node2可以无密码的ssh登录对方以及自己
在node1和node2上运行ssh-keygen命令来产生公匙和私匙,分别把公匙内容增添到本机和对方机的 ~/.ssh/authorized_keys。
     具体做法:   
      $ ssh-keygen -t rsa,之后一路回车,这一步将产生~/.ssh目录,以及两个文件d_rsa(私钥)和 id_rsa.pub(公钥)
      $ cd ~/.ssh
      $ cat id_rsa.pub >> authorized_keys  把node1的公匙存到本地authorized_keys
      $ scp node1:~/.ssh/id_rsa.pub node2:~/.ssh/1.pub  把node1的公匙复制到node2
      $ ssh node2登录到node2
      $ ssh-keygen -t rsa在node2上产生一对公匙和私匙
      $ cd ~/.ssh
      $ cat id_rsa.pub >> authorized_keys  把node2的公匙保存到本地authorized_keys
      $ scp node2:~/.ssh/id_rsa.pub node1:~/.ssh/2.pub  把node2的公匙复制到node1
      $ cat 1.pub >> authorized_keys 把node1的公匙加入到node2的authorized_keys
      $ ssh node1  登录到node1
      $ cd ~/.ssh
      $ cat 2.pub >> authorized_keys 把node2的公匙加入到node1的authorized_keys
      这里要保证authorized_keys的文件权限为600或者644:chmod 600 authorized_keys
     这样在两台电脑之间分别ssh登录过一次以后就能无密码登录了

8 启动Smpd –s
要求passphrase的值在所有节点上相等,这里我用的是litong
因为在windows上也是用这个服务,所以可以实现,windows和linux的互联
在windows上安装
1只需运行mpich2-1.4.1p1-win-ia32.msi,要求passphrase的值在所有节点上相等,这里我用的是litong passphrase
安装完成之后打开C:\Program Files\MPICH2,有几个文件夹需要先说明一下,include是头文件,lib是库文件,开发的时候需要使用;bin文件夹里面是各需要使用的应用程序;examples文件夹中包含的是一个完整的例子,计算圆周率,使用这个来对比运行效率。
打开bin文件夹,运行wmpiregister.exe,注册计算机的用户名和密码,要求此用户有本计算机的管理员权限。这里要求window和linux的用户名相同
安装完后有一个MPICH2 Process Manager服务,自动开启了,不用去管它。这个服务也就是smpd。
2添加环境变量C:\Program Files\MPICH2\bin,此为节点3

在另外一个虚拟机1的windowsxp上按照如上步骤,设置node4
原创文章:转载请注明出处。 http://lt200819.iteye.com/blog/1321974

实验过程及结果
我们利用MPICH2的示例程序进行测试,示例为计算圆周率,可以输入精度。
首先在ubuntu下测试node1,node2(node1,ndoe2都是linux环境)
1修改为静态ip,便于测试
ifconfig 网卡设备名IP地址
将node1的ip设为192.168.1.1
将node2的ip设为192.168.1.2
2启动smpd:    smpd -s
3新建文件machinefile
内容为
node1
node2
4 cd mpich2-1.4.1p1
5执行
单节点执行
mpiexec –n 10  ./examples/cpi(n表示进程数)
多节点执行
mpiexec  -n 10 -machinefile machinefile ./examples/icpi


图1:在linux下执行的效果图
在windows下测试node3,node4(node3,node4都是windows系统)
1我们设置
node3  192.168.1.3
node4  192.168.1.4
2新建文件machinefile.txt
内容为
192.168.1.3
192.168.1.4
3执行
单节点执行
C:\MPICH2\bin>mpiexec -path "c:\MPICH2\examples " icpi
多节点执行
C:\MPICH2\bin>mpiexec -machinefile machinefile.txt -channel nemesis -path "c:\MPICH2\examples;/home/walter/mpich2-1.4.1p1/examples" icpi

图2:在windows下执行的效果图




在主机(windows7)上操作node1, node2(两个linux节点)协作运行:
1在window下,修改
machine.txt
192.168.1.1
192.168.1.2
2执行
多节点执行
C:\MPICH2\bin>mpiexec -machinefile machinefile.txt -channel nemesis -path "c:\MPICH2\examples;/home/walter/mpich2-1.4.1p1/examples" icpi

图3:在window下执行linux多节点的效果图



在主机(windows7)上操作node1, node3(异构环境)协作运行:
去掉icpi.exe的exe扩展名
1在window下,修改
machine.txt
192.168.1.1
192.168.1.3
2执行
多节点执行
C:\MPICH2\bin>mpiexec -machinefile machinefile.txt -channel nemesis -path "c:\MPICH2\examples;/home/walter/mpich2-1.4.1p1/examples" icpi

图4:在window下执行linux多节点的效果图

3在window下,修改
machine.txt
192.168.1.1:5
192.168.1.3:5
5代表进程数
2执行
多节点执行
C:\MPICH2\bin>mpiexec -machinefile machinefile.txt -channel nemesis -path "c:\MPICH2\examples;/home/walter/mpich2-1.4.1p1/examples" icpi

图5:在window下执行linux多节点的效果图
原创文章:转载请注明出处。 http://lt200819.iteye.com/blog/1321974
结果记录

以下所有结果为10次实验的平均结果,但是会有误差
序号 节点数 进程数 精度 执行时间 误差
1 1 2 10 0.000254 0.000833
2 1 2 5 0.000039 0.003333
3 1 10 10 0.005097 0.000833
4 1 2 1000000 0.187634 0.000001
5 1 10 1000000 0.147634 0.000001
6 2 2 10 0.001383 0.000833
7 2 2 1000000 0.186592 0.000001
结论:
 比较1和2,进程数和节点数一定时,精度降低执行时间降低
 比较1和3,当进程数增加时,执行时间会增长,这和我们一般预期的结果并不一致。
 这里我们分析认为计算节省的时间远少于通信所浪费的时间。
 比较4和5,当精度很大时,进程数增加,执行时间会减少。
 精度一定时,无论进程数和节点数是否变化,误差不变
 比较1和6,进程数和精度一定时,增加节点执行时间也增加了,这里我们也认为计算节省的时间远小于于通信所浪费的时间。
 比较4和6,我们发现当精度很大时,多节点执行和单节点执行,速度几乎一样。这里我们也认为计算节省的时间约等于通信所浪费的时间。由于CPU性能很高,我们很难看出增加节点数对性能的有益影响。理论上我们认为当进程数大于单个节点可以运行的数量时,多节点的性能将会优于单节点的性能
实验遇到的问题
本次实验遇到很多问题,花费了很长时间解决。
1. 在虚拟机下快速安装unbuntu11.10没有图形化界面。解决方案:新建虚拟机环境,然后用CD盘启动安装。
2. windows无法访问linux. mpich2-1.4.1的linux版本在安装时默认使用hydra 作为pm,而windows使用 smpd作为pm。解决方案:linux在配置的时候使用smpd作为pm。
3. windows下当前用户无法作为访问的用户.解决方案:新建其他用户,用户名和密码与linux下的用户名和密码相同。
4. 执行程序:linux和windows的执行文件的路径不同,需要用path属性设置 -path "c:\MPICH2\examples;/home/walter/mpich2-1.4.1p1/examples"
5. 一定要关闭所有防火墙
参考网址:
http://baiseda.iteye.com/blog/1024681
http://www.mcs.anl.gov/research/projects/mpich2/index.php
http://www.mcs.anl.gov/research/projects/mpich2/support/index.php?s=support


原创文章:转载请注明出处。 http://lt200819.iteye.com/blog/1321974

猜你喜欢

转载自litongbupt.iteye.com/blog/1321974
2
>&2
α2
2-2