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

此文针对没有多少linux经验的读者,仅仅要你会打开终端。这个问题能够被非常好的解决。

前提

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

如果在两台机器上有同一个username为讲述方便,临时如果这个username为demo;

如果两台机器上安装了全然同样的mpi版本号。

不满足如果条件,请绕行。

步骤

完毕无需超级用户mpi程序的编译和运行。分以下几步:

1、设置两台机器上PATH。使得在两台机器上分别能够运行mpicc --version命令。

2、设置两台机器相互之间能够免password登陆。

3、运行自己的程序

1、设置两台机器上的PATH

如果你如今在A机器上,使用的是demo账户。

打开终端(Terminal),运行例如以下命令:

  1. mpicc --version

如果上面的命令得到相似例如以下结果。直接能够去第2步:

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

如果得到相似例如以下结果,则继续。

  1. mpicc: command not found

打开终端,运行例如以下命令

  1. 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),在提示输入password的时候。输入用户的password。由于我们如果用的是demo用户,你此时要输入的是demo的password。注意password并不显示。输入完毕后,直接敲击回车就可以。

  1. ssh demo@192.168.1.6

如果成功登陆。运行例如以下命令:

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

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

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

仍然如果如今用的是机器A(IP为192.168.1.5),打开终端,运行例如以下命令

  1. ssh-keygen -t rsa

上面的命令在运行的时候可能要等待你的输入,不要输入不论什么内容,直接敲击回车就可以。

运行例如以下命令:

  1. ssh demo@192.168.1.6 mkdir -p .ssh

运行上述命令后,会等待你输入demo在机器B(如果的IP为192.168.1.6)上的password。输入password后,敲击回车。

运行例如以下命令:

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

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

  1. ssh demo@192.168.1.6

继续运行例如以下命令:

  1. ssh-keygen -t rsa

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

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

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

  1. exit

完毕上面的命令后。就能够实现demo用户在两个机器之间无password相互登陆了。

3、运行自己的程序

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

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

如果你的程序复制到了A机器的/home/demo/文件夹下,那么你打开终端之后。运行 cd ~/ 就可以进入这个文件夹。

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

由于我们使用的两个机器是独立的,他们之间没有共享磁盘,你若要使用mpi在两个机器上运行,你必须将在A机器上生成的可运行程序复制到B机器上。

如果你不了解mpi的运行方式,请保证在两个机器上的可运行程序存放在同一个文件夹下。

为方便,你能够把程序放到用户根文件夹(~/ 就是用户根文件夹),然后再复制到B机器上。

拷贝程序的命令例如以下(如果你的程序叫main.exe)

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

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

我门如果的A、B两个机器的IP各自是192.168.1.5和 192.168.1.6,所以我们的文件里能够这样写

  1. 192.168.1.5
  2. 192.168.1.6

如果我门命名这个文件为hosts,而且保存在~/文件夹下,那么我门就能够打开终端。启动我们的程序了。

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

结束语

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

无需超级用户mpi多机运行的更多相关文章

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

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

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

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

  3. ionic ios项目真机运行-不用开发者账号

    ionic ios项目真机运行-不用开发者账号 1. 添加ios平台 ionic platform add ios 2.使用XCODE打开项目 3.使用APPID登录XCODE 打开XCODE账号登录 ...

  4. Hadoop:开发机运行spark程序,抛出异常:ERROR Shell: Failed to locate the winutils binary in the hadoop binary path

    问题: windows开发机运行spark程序,抛出异常:ERROR Shell: Failed to locate the winutils binary in the hadoop binary ...

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

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

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

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

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

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

  8. Django之创建超级用户

    本文链接来自:https://blog.csdn.net/HuaCode/article/details/79721673 首选创建一个新用户,用来登录Django管理网站,进入manage.py目录 ...

  9. 用C#做成的程序如何打包部署,在其他PC机运行

    刚刚接触C#,在linux下面做习惯了c和c++,在本机运行OK后,得瑟的去别的机子,居然运行不了,你妹啊,怎么回事,没有.NET Framework,原来和java类似,.NET Framework ...

随机推荐

  1. UVA 12338:Anti-Rhyme Pairs(后缀数组+ST表)

    [题目链接] click [题目大意] 给出一些字符串,询问查询任意两个字符串的最长公共前缀 [题解] 将字符串拼接,对拼接的字符串做后缀数组,对于查询的两个字符串, 只要在height数组上查询区间 ...

  2. 【枚举】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem G. Equation

    f(n)定义为n的十进制表示下所有位的平方和. 问你方程K*f(n)=n在a<=n<=b中的解的个数. 发现f(n)最大不超过2000,可以直接枚举f(n),然后判断K*f(n)的位的平方 ...

  3. 20162307 实验三 敏捷开发与XP实践

    实验三 <敏捷开发与XP实践> 北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623 姓名:张韵琪 学号:20162307 指导教师:娄佳鹏老师.王志强 ...

  4. MATLAB/Octave warning: mx_el_eq: automatic broadcasting operation applied 错误分析

    在进行对一个mXn的矩阵与mX1的矩阵进行==比较时,原意是想让mXn的矩阵的每一行分别与mX1的矩阵每一行进行比较,得到的结果虽然是对的,但会报一个warning: mx_el_eq: automa ...

  5. Delphi 中ASSERT用法

    http://blog.csdn.net/dongyonggan/article/details/5780979 用法:ASSERT(表达式) 如果为假,ASSERT会产生一个EASSERTIONFA ...

  6. vagrant public_network 自定义静态 ip配置方法

    Vagrant 创建虚拟化开发环境 Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境.它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境. ...

  7. Lua学习笔记之开始

    在这节课的开始,按照国际惯例,一般学习一门新的语言,都是要打印出“Hello,world”,那么我们也不例外. Lua语言的打印跟其他语言一样,只要print(“Hello,World”),然后保存为 ...

  8. void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别?

    void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别? const void fun(){};和void const fun ...

  9. Android4.4系统源码百度网盘下载

    众所周知.Android如今非常火,肯定也有非常多android开发人员像我一样想研究android系统的源码.可是假设依照Google官方站点http://source.android.com/so ...

  10. Context Menus

    转载:http://open.chrome.360.cn/extension_dev/contextMenus.html 内容 清单 范例 API 参考: Chrome.contextMenus 方法 ...