码迷,mamicode.com
首页 > 其他好文 > 详细

无需超级用户mpi多机执行

时间:2014-11-02 18:16:50      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   使用   for   

在之前的一篇博文中(Linux下mpi环境配置与执行步骤(Ubuntu为例) ),有讨论过如何使用MPI在两个不同的机器上执行程序,在那篇博文中使用了超级用户权限。不幸的是,有些情况下,我们不能拥有操作系统的超级用户权限,导致我们不能修改除用户目录以外的目录,因此写这篇博文讨论如何使用普通用户来实现mpi程序的编译和双机器执行。如果知道了如果双机器执行,多机器道理是相通的。


此文针对没有多少linux经验的读者,只要你会打开终端,这个问题可以被很好的解决。


前提

假设有两台机器,两台机器的主机名称分别为A、B,并且知道两台机器的IP(如果你不知道,请咨询管理员),假设A机器的IP为192.168.1.5,机器B的ip为192.168.1.6;

假设在两台机器上有同一个用户名为讲述方便,暂时假设这个用户名为demo;

假设两台机器上安装了完全相同的mpi版本。


不满足假设条件,请绕行。


步骤

完成无需超级用户mpi程序的编译和执行,分以下几步:

1、设置两台机器上PATH,使得在两台机器上分别可以执行mpicc --version命令。

2、设置两台机器相互之间可以免密码登陆。

3、执行自己的程序


1、设置两台机器上的PATH

假设你现在在A机器上,使用的是demo账户。

打开终端(Terminal),执行如下命令:

mpicc --version

如果上面的命令得到类似如下结果,直接可以去第2步:

gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

如果得到类似如下结果,则继续。

mpicc: command not found

打开终端,执行如下命令

echo "export PATH=`locate mpicc | grep -v ‘^/home/‘ | grep -E ‘/mpicc$‘ | sed ‘s/\/mpicc$//‘`:$PATH" >> ~/.bashrc

关闭终端,打开一个新的终端,再执行mpicc --version看看结果是否正确,如果还是不正确,这里就暂时不写此种情况下的解决方案了(穷尽所有情况太麻烦了)。

执行如下命令来登陆B机器(前提中假设了B机器的IP为192.168.1.6),在提示输入密码的时候,输入用户的密码,因为我们假设用的是demo用户,你此时要输入的是demo的密码。注意密码并不显示,输入完成后,直接敲击回车即可。

ssh demo@192.168.1.6

如果成功登陆,执行如下命令:

echo "export PATH=`locate mpicc | grep -v ‘^/home/‘ | grep -E ‘/mpicc$‘ | sed ‘s/\/mpicc$//‘`:$PATH" >> ~/.bashrc

然后执行exit命令退出机器B。


2、设置两台机器之间相互无密码登陆。

仍然假设现在用的是机器A(IP为192.168.1.5),打开终端,执行如下命令

ssh-keygen -t rsa

上面的命令在执行的时候可能要等待你的输入,不要输入任何内容,直接敲击回车即可。


执行如下命令:

ssh demo@192.168.1.6 mkdir -p .ssh

执行上述命令后,会等待你输入demo在机器B(假设的IP为192.168.1.6)上的密码,输入密码后,敲击回车。

执行如下命令:

cat .ssh/id_rsa.pub | ssh demo@192.168.1.6 ‘cat >> .ssh/authorized_keys‘

执行如下命令,以登陆B机器:

ssh demo@192.168.1.6

继续执行如下命令:

ssh-keygen -t rsa

遇到让输入yes或者no的地方是如yes或者y。遇到其他情况的等待输入,一律敲击回车。

cat .ssh/id_rsa.pub | ssh demo@192.168.1.5 ‘cat >> .ssh/authorized_keys‘

最后执行如下命令,以推出机器B

exit

完成上面的命令后,就可以实现demo用户在两个机器之间无密码相互登陆了。


3、执行自己的程序

仍然假设你在A机器上,ip的相关假设继续保持。

将程序拷贝到A机器上,对于没有linux经验的读者,请特别注意你拷贝的程序在哪个目录下,如果你不能在终端下找到自己的程序,那么这一切你都白做了。

假设你的程序拷贝到了A机器的/home/demo/目录下,那么你打开终端之后,执行 cd ~/ 即可进入这个目录。

在终端中进入源代码目录后,如果你的程序有Makefile,直接执行make命令即可(一般人写的makefile,这样执行会产生可执行文件的,如果不是一般人写的,请咨询写makefile的人)。


由于我们使用的两个机器是独立的,他们之间没有共享磁盘,你若要使用mpi在两个机器上执行,你必须将在A机器上生成的可执行程序拷贝到B机器上。如果你不了解mpi的执行方式,请保证在两个机器上的可执行程序存放在同一个目录下。


为方便,你可以把程序放到用户根目录(~/ 就是用户根目录),然后再拷贝到B机器上。

拷贝程序的命令如下(假设你的程序叫main.exe)

scp ~/main.exe demo@192.168.1.6:~/

下面你要新建一个文本文件,这个文本文件第一行写A机器的IP,第二行写B机器的IP。文件名随意,最好使用英文。

我门假设的A、B两个机器的IP分别是192.168.1.5和 192.168.1.6,所以我们的文件中可以这样写

192.168.1.5
192.168.1.6

假设我门命名这个文件为hosts,并且保存在~/目录下,那么我门就可以打开终端,启动我们的程序了。

cd ~/
mpiexec -f ./hosts -n 2 ./main.exe


结束语

如果你是linux新手(不知道怎么使用终端的都是新手),一定要严格执行每一个命令,按照说明一步步执行。注意命令中的下划线,短线,英文点 .,大小写字母,/,~等。这篇博文暂时写完了,剩下的就是祝你好运了。








无需超级用户mpi多机执行

标签:style   blog   http   io   color   ar   os   使用   for   

原文地址:http://blog.csdn.net/bendanban/article/details/40710217

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!