zoukankan      html  css  js  c++  java
  • 无需超级用户mpi多机运行

    在之前的一篇博文中(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),运行例如以下命令:

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

    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、设置两台机器之间相互无password登陆。


    仍然如果如今用的是机器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)上的password。输入password后,敲击回车。

    运行例如以下命令:

    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用户在两个机器之间无password相互登陆了。


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








  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6738227.html
Copyright © 2011-2022 走看看