在之前的一篇博文中(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多机执行的更多相关文章

  1. 无需超级用户mpi多机运行

    在之前的一篇博文中(Linux下mpi环境配置与运行步骤(Ubuntu为例) ),有讨论过怎样使用MPI在两个不同的机器上运行程序,在那篇博文中使用了超级用户权限.不幸的是.有些情况下,我们不能拥有操 ...

  2. CentOS下添加Root权限用户(超级用户)方法

    1.添加普通用户[root@server ~]# useradd chenjiafa   //添加一个名为chenjiafa的用户[root@server ~]# passwd chenjiafa   ...

  3. ssh无密码登录多台机器,并让所有远程机执行相同命令

    问题集锦 其实标题的内容就是很常见的集群操作,当有一个脚本或者一个命令需要很多个机器同时(或者说接近同时)执行时,就涉及到几个问题: 怎么通知每个主机? 每个主机收到通知后,怎么让主机执行命令? 怎么 ...

  4. 在 Linux 中使用超级用户权限

    在你想要使用超级权限临时运行一条命令时,sudo 命令非常方便,但是当它不能如你期望的工作时,你也会遇到一些麻烦.比如说你想在某些日志文件结尾添加一些重要的信息,你可能会尝试这样做: $ echo & ...

  5. 联通GWH-01路由猫超级用户登录方法

    . . . . . 今天回老家,家里用的是联通GWH-01路由猫,上海贝尔的.用路由器背面说明上面写的user用户登录之后,发现只能查看却无法设置.为了开启无线路由功能,只好在网上查找超级用户,是cu ...

  6. Linux系统下超级用户密码的修改

    1)重启系统:在虚拟机刚启动界面,不停地按上下键,停止系统的自动引导(界面底部有提示) 2) 按 e 进入编辑模式 3) 编辑内容如下:完成后按Ctrl+x    (具体编辑内容为下图:删除倒数第三行 ...

  7. Hadoop-2.2.0中文文档—— Common - 超级用户模拟别的用户

    简单介绍 此文档描写叙述了一个超级用户怎样在安全的方式下以还有一用户的名义提交作业或訪问hdfs. Use Case 下一部分描写叙述的的代码演示样例对此用户用例是可用的. 一个username为's ...

  8. Linux学习笔记——1.超级用户

    以超级用户工作:su su命令允许临时变换到任何一用户标识(如果拥有口令的话),并挂起当前shell,为新用户开启一个新的shell. su <user> 将当前用户标识harley变换为 ...

  9. Azure Linux 云主机使用Root超级用户登录

    Azure的Linux虚拟机是可以灵活使用root超级用户的管理员权限的: 1:使用sudo passwd root指令设置超级用户root密码: 使用创建Linux时设置的用户名和密码登陆,使用su ...

随机推荐

  1. [LeetCode] License Key Formatting 注册码格式化

    Now you are given a string S, which represents a software license key which we would like to format. ...

  2. [JS]手动实现一个横屏滚动公告js插件

    前言 工作中要用到.在github上找的大部分都是竖屏滚动没办法只能自己手动写. 本来只是想随便实现一下的,结果一时兴起把它弄成了一个简单的小插件,开了个github仓库(希望路过点个星) JS横屏滚 ...

  3. LoadRunner菜鸟入门学习笔记

    一.LR版本及浏览器选择 1.首先百度了一下LR各版本的浏览器兼容性 8.0 最高ie6 8.1 最高ie6 9.0 最高ie7 9.5 最高ie8 11.0 最高ie9( win7 32位+LR11 ...

  4. ABP领域层知识回顾之---仓储

    1. 前言  在上一篇博文中 http://www.cnblogs.com/xiyin/p/6810350.html 我们讲到了ABP领域层的实体,这篇博文继续讲ABP的领域层,这篇博文的主题是ABP ...

  5. ●BZOJ 3931 [CQOI2015]网络吞吐量

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3931 题解: 在最短路图上跑网络流,要开long long(无奈 BZOJ AC 不了,洛谷 ...

  6. ●BZOJ 4361 isn

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4361 题解: 容斥,DP,树状数组 注意题意:一旦变成了非降序列,就停止操作.即对非降序列进 ...

  7. SAM维护的在线LCS

    题目大意: 给定两个字符串,存在三种操作,分别是在a,b串末尾加一个字符串,和询问两串的LCS 题解: Get新套路:把两串建在同一SAM上,将重合的位置合并为同一节点,再加个标记数组,如果两者的LC ...

  8. 2017ACM/ICPC广西邀请赛-重现赛 1007.Duizi and Shunzi

    Problem Description Nike likes playing cards and makes a problem of it. Now give you n integers, ai( ...

  9. Codeforces Round #430 A. Kirill And The Game

    Kirill plays a new computer game. He came to the potion store where he can buy any potion. Each poti ...

  10. bzoj3048[Usaco2013 Jan]Cow Lineup 尺取法

    3048: [Usaco2013 Jan]Cow Lineup Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 225  Solved: 159[Subm ...