MPICH2简单的安装配置总结

MPICH2MPI(Message-Passing Interface)的一个应用实现支持最新的MPI-2接口标准是用于并行运算的工具在程序设计语言上支持C/C++Fortran最近因为有项目需要的计算量比较大所以就学习使用了MPICH2在此根据网络上查询的相关信息和我自己的实际使用经历分别总结一下MPICH2windowslinux下基本的安装使用方法.

软件下载

        MPICH2的主页是http://www-unix.mcs.anl.gov/mpi/mpich2/index.htm在这个页面上就能找到各平台最新版本MPICH2的下载地址其中还包括源代码我在开始作这个项目的时候最新版本是windowsmpich2-1.0.5p2源代码mpich2-1.0.5p4我们的项目是一个CentOSlinux下的程序所以最终是要在linux下运行的但是又舍不得windows于是就打算可能的话就在windows下写程序MinGWwindows版的MPICH2编译调试通过后再到wmware虚拟机组成的简单集群作测试所以为避免不必要的麻烦就要统一一下windowslinux下的MPICH2版本而且不打算用最新的因此决定用mpich2-1.0.5但是如果在主页上找的话是没有以前旧版本下载的链接的(至少我没找到), 只有最新版本的httpftp下载这难不住我等有心之人既然提供了ftp下载那咱就直接到他ftp服务器上找最新源代码链接的地址是ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-1.0.5p4.tar.gz把后面文件名去掉就应该是文件的ftp存放路径把这个路径直接写到浏览器地址栏里回车(偶用的是FireFox2), 就能看到他们服务器上这个目录的文件列表里面就有1.0.5版的windows安装文件和源代码包分别为ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-1.0.5-win32-ia32.msi ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-1.0.5.tar.gz msi文件不用多说这是windows下安装用的源代码包我们拿来在linux下用.

文档下载

    还是主页上就有MPICH2的安装和使用指南文档主要有三个分别是User's GuideInstaller's GuideWindows Developer's Guidedown下来看看很有用的说具体开发用的有关MPI标准的文档在MPI论坛的网站里都有地址是http://www.mpi-forum.org/我觉得最有用的是MPI-2: Extensions to the Message-Passing Interface.

Windows下的安装配置

    我用的参与计算的系统都是WindowsXP Pro SP2安装的过程没什么太特别的一般就是默认就可以只是其中有个地方要填一个什么passphrase上面提示说所有系统都要用相同的passphrase照做就是了在所有参与计算的结点机器上都填一样的passphrase就好了另外就是需要.net framework 2的运行环境.

    默认安装的位置是C:\Program Files\MPICH2下面的bin目录下是系统配置运行需要的程序为了方便在控制台使用可以把C:\Program Files\MPICH2\bin加到系统的PATH变量中去Include是头文件开发的时候用lib是链接程序的时候用的库文件Jumpshot下有个pdf的文档干什么用的可以看看这个文档我没仔细看感觉我暂时还用不上Examples下面是一个样本程序就是一个用MPI计算圆周率的程序分别有CC++FortranC/C++的应该可以用VS2003以上版本打开同时安装程序还会自动向系统注册一个服务MPICH2 Process Manager我们从控制面板-管理工具-服务里就能找到这是管理运行MPI程序的一个服务安装好后就是自动启动的所以一般也就不用动它.

    安装完毕后开始菜单-程序中就添加了一个MPICH2目录其中就有上面提到的Jumpshot另外wmpiconfig.exe是用来配置运行环境的我在网上有找到的说明都是以前旧版本的和现在的差别比较大感觉这新版本用的不爽没搞明白这个程序该咋用不过好像默认状态下不改什么就能正常使用所以也就不管它了wmpiregister.exe则是用来注册用户的使用MPI之前需要在这个程序里注册一个系统里已经存在的用户而且这个用户必需拥有管理员权限拥有运行我们安装了的MPI系统的能力比如我就在所有参与运算的机器上添加了一个管理员mpi密码也是mpi.

    接下来我们就可以开始试着运行一下MPI的程序了就用examples目录下面的那个计算<!--[if !vml]-->圆周率的程序如果要多机并行计算的话就需要在所有机器上的相同位置放置要运行的程序我的情况就是在所有机器的C盘下建了一个mpiexe的目录并把cpi.exe拷到所有机器的这个目录下然后在其中的某台机器上进入控制台(运行MPI程序其实也可以用开始菜单的MPICH2下的wmpiexec.exe这是个gui程序但是我觉得用的不爽不如直接在控制台下敲命令来得灵活),敲下命令mpiexec -hosts 2 192.168.10.142 192.168.0.23 c:\mpiexe\cpi.exempiexec是安装目录下bin目录里的一个程序在本文的例子中就是C:\Program Files\MPICH2\bin\mpiexec.exe因为刚才说了我把这个地址加入到PATH里了所以可以在任何地方直接执行它是用来启动MPI程序的-hosts参数说明是启动多台机器并行运算后面跟着的2就是说要在两台机器上执行程序再后面的就是那两台机器的ip地址其中第一个就是我启动程序的机器当然这个地方也可以写机器名只要它的机器名能被正常的解析就可以最后面的就是要运行的程序也就是刚才提到的所有机器都要在相同位置放置的那个MPI程序如果只是在本机运行则命令为mpiexec –n 2 cpi.exe-n表示是在本地运行后面的2表示启动的进程数.程序运行后就会提示让你输入一个数字intervals这个数字影响计算的精度值越大精度越高当然计算时间就越长了然后程序会打印出计算的结果和花费的时间.

    比如我使用单机单进程运行intervals设为99999999耗时1.253849而用两台机器双进程则只有0.628954明显快很多并行运算还是很有效果的不过如果我们把intervals改为9999单机运行只用了0.000279而两台机器却花了0.001548这是因为并行运算过程中参与运算的机器需要通过网络传递一些消息如果计算量不大的话花在了这上面的时间影响会比较明显因而反不如单机版的来得快.

    到现在我们的MPI运行环境就基本安装好了当然MPI还有很多其他的命令参数只不过最常用估计也就这两条了其他的用得着的时候就去查上面提到的文档里面有比较详细的介绍另外如果按照以上的介绍进行安装配置在运行多机并行MPI程序的时候却出现连接错误的话八成是因为网络的问题看看你的防火墙是不是开着打开相应的端口或者干脆关掉防火墙就好了.

Linux下的安装配置和单机运行

        Linux下的操作要相对来说麻烦一点这个麻烦从安装开始呵呵我用的系统是CentOS4.4装在VMware Workstation里的一共装了两个虚拟机环境基本上完全一样为运行MPI在两台虚拟机都创建了一个用户mpi密码也是mpihome路径也都是/home/mpi然后继续都创建了一个目录/home/mpi/mpich2用来作MPI运行环境的安装路径一个/home/mpi/mpich2/src来存放编译用的源代码然后将源代码包mpich2-1.0.5.tar.gz下载到两台机器上都解压缩到/home/mpi/mpich2/src然后到/home/mpi/mpich2/src指定安装路径,

        ./configure -prefix=/home/mpi/mpich2

        make

        make install

    几分钟后安装完毕需要提一下的是我曾经试着用root用户来安装MPICH2但是安装后好重启系统就出了问题所以建议还是另外建个用户来装吧(ubuntu干脆就把root给禁了不让你直接用root).

        安装后/home/mpi/mpich2下多出来一些目录和文件要比windowslib是库文件include是头文件bin还是程序文件所以还是要写到环境变量里可以用命令export PATH /home/mpi/mpich2/bin:$PATH但我是用root用户直接在/etc/profile最后面加了这么一句export PATH=/home/mpi/mpich2/bin:$PATH一劳永逸.

        MPI应用一个管理器来管理运行MPI程序这个管理器就是mpd但是在正式开始运行mpd前还需要一个基于安全考虑的配置文件.mpd.conf这个文件是要放在运行程序的用户的home目录下本例子中就是/home/mpi/.mpd.conf而且这个文件只能由这个用户读写创建文件的命令是,

        cd $HOME

        touch .mpd.conf

        chmod 600 .mpd.conf

然后在文件中写入这么一行secretword=******在参与计算的计算机上必需完全一致如果是root用户的话这个文件应该是/etc/mpf.conf.

       然后我们就可以启动mpd管理器了直接在控制台下使用mpd命令或者是mpd &mpd在后台运行若关闭启动的mpd只需要命令mpdallexit即可在启动mpd之后就可以运行MPI应用程序了执行命令与windows下类似如我们仍然是测试一下examples里的cpi程序可以这样来作,

        cd ~/mpich2/examples

        mpiexec -n 1 ./ cpi

参数含义同windows下的单机运行命令另外启动mpd后还可以用命令mpdtrace来察看当前运行的mpd情况.

SSH配置和多机并行

        MPI的多机并行是用mpdboot来管理启动的是由参与计算的其中一台机器通过mpdboot同时启动其他机器上的mpd管理器并运行相应MPI程序的所以需要赋予运行mpdboot的机器执行其他机器上程序的能力MPICH2支持通过sshrsh来做到这一点其中ssh是默认的而且其安全性也优于rsh因此我在项目中是用的ssh.

       首先我们需要修改所有机器上的/etc/hosts文件在里面添加上参与计算的机器名和ip地址比如本文中有两台机器参加的例子里hosts文件应当为:

        127.0.0.1 localhost.localdomain localhost

        192.168.10.142 node0

        192.168.10.23 node1

这里的意思是说主机名为node0的机器ip地址为192.168.10.142主机名为node1的机器ip地址为192.168.10.23.

    当然其实这一步也可以跳过因为我们也可以在操作过程中直接使用ip地址只不过那样不太方便另外就是有些机器默认情况下第一行可能包括本机的主机名比如在ip192.168.10.142node0hosts文件第一行是

127.0.0.1 localhost.localdomain localhost node0

这样可能会使得mpdboot工作不正常所以还是最好给成上面的那种形式.

       第二步是创建ssh密钥命令行下:

        #ssh-keygen -t rsa

-t rsa指的是密钥类型具体请察看ssh相关资料这里不多说这样就在当前用户的home目录下生成了一个.ssh目录本文中的就是/home/mpi/.ssh.

       第三步/home/mpi/.ssh下的id_rsa.pub文件拷贝改名为authorized_keys

        #cp id_rsa.pub authorized_keys

       第四步在其他所有机器上进行以下操作.

        #ssh-keygen -t rsa                                            生成.ssh文件夹

        #scp node0IP:/home/mpi/.ssh/* ~/.ssh           拷贝node0上的.ssh文件夹覆盖本地的

       第五步在所有机器上建立与自己和所有其他机器的信任连接.

    对每个节点执行

        #ssh node0

        #ssh node1

    根据提示键入yes即可然后就可以在不需要用户名密码的情况下通过ssh登陆其他机器了比如在node0#ssh node1,就可以直接进入node1.

       接下来在启动mpdboot的机器上创建一个参与计算的host列表文件如文件mpd.hosts每行是一个主机名创建过程如

        #cd ~

        #touch mpd.hosts

        #vi mpd.hosts

        nod0

        node1

现在就可以启动运算集群了

        #mpdboot -n 2 -f mpd.hosts

-n表示要启动的机器个数一般是不大于mpd.hosts文件中的机器数比如本文中的例子就是两台机器这样列表中的机器就会启动其本机上的mpd管理器.

       然后就可以开始运行MPI程序进行运算了windows下一样程序需要放在每台机器上的相同位置(如果用NFS就只需在一台机器上放置程序其他机器作映射就行), 比如都是程序/home/mpi/mpich2/examples/cpi在运行mpdboot 的结点机器上:

        #mpiexec -n 2 /home/mpi/mpich2/examples/cpi

-n表示要启动的进程个数一般是不大于mpd.hosts文件中的机器数(或者cpu核心数?偶用的机器就是双核的了所以单机的时候双进程比单进程效率好很多但是三进程就不行).

        Mpd在运行过程中可以通过mpdtrace显示参与计算的机器名mpdtrace –l则是显示机器名以及其端口.

你可能感兴趣的:(分布式计算,mpi,大数据计算)