您的位置:首页 > 其它

MPICH2安装配置及其使用

2012-09-05 07:37 344 查看
下载mpich2-1.0.5p4.tar.gz.

首先说说我遇到的问题,以免大家重蹈覆辙

1需要在安装好mpich2之后再编译程序,否则会出现cannot open shared library..的错误。

2如果还出现cannot open shared library...no file XXX.so的提示,说明在系统的lib里面找不到XXX.so 此时将XXX.so所在路径加入到/etc/ld.so.conf中(注意,不要换行,否则加“/”),然后用/sbin/ldconfig -v更新

3需要用#hostname myhostname(临时),或者echo "myhostname" > /etc/hostname(永久)的方式来修改机器名。

接下来就是具体的安装和配置过程

Linux下的操作要相对来说麻烦一点, 这个麻烦从安装开始, 呵呵. 我用的系统是CentOS4.4, 装在VMware Workstation里的, 一共装了两个虚拟机, 环境基本上完全一样. 为运行MPI在两台虚拟机都创建了一个用户mpi, 密码也是mpi, home路径也都是/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下多出来一些目录和文件, 要比windows多, lib是库文件, 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支持通过ssh和rsh来做到这一点, 其中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地址, 只不过那样不太方便. 另外就是, 有些机器默认情况下第一行可能包括本机的主机名, 比如在ip为192.168.10.142的node0上, hosts文件第一行是

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 node0的IP:/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