现在有2台机器,希望可以尝试一下在多台机器上跑MPI的感觉,所以跑之前就得配置,先参考网址:

https://www.cnblogs.com/awy-blog/p/3402949.html:

1. 配置自动ssh登录

这里主要是要各个机器之间能无密码访问,主要用到的就是SSH,因此需要一些设置。

首先,我们需要导出各个节点的公钥和私钥:

$ ssh-keygen -t rsa 

在运行过程中,会提示你输入这个输入那个,不用管那么多,直接回车就完了。等运行结束后,进入.ssh目录,你会看到公钥和私钥文件;

$ cd ~/.ssh
$ ls
id_rsa id_rsa.pub

其中id_rsa就是私钥,id_rsa.pub就是公钥,现在我们需要把各个节点上的公钥都集中发送到一个节点上,来制作授权文件(authorized_keys).

注意:在两台机器必须安装ssh(sudo apt-get install ssh openssh-server)而且必须设置root密码(sudo passwd root),才能远程登录

$ scp ~/.ssh/id_rsa.pub node1:~/.ssh/1.pub

在将 node2 的公钥文件拷贝到 node1 后,在node1-ubuntu进行如下处理,制作好文件  authorized_keys :

$ cp ~/.ssh/id_rsa.pub authorized_keys
$ cat ~/.ssh/1.pub >> authorized_keys

在node1 上制作好的authorized_keys拷贝到node2上:(node1使用scp)

$ scp ~/.ssh/authorized_keys node2:~/.ssh/

要想让这两台机器无密码登录,所以我们需要更改一下必要的文件的权限(所有节点都要更改):其实只要保证authorized_keys的文件权限为600或者644

$ chmod 755 ~
$ chmod 755 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/id_rsa
$ chmod 644 ~/.ssh/id_rsa.pub

至此,SSH配置就完成了。下面检验一下:

在一个主机上面SSH另一个主机 ( 不需要账号和密码 ) :

$ ssh node1

现在2台机器已经可以自由的SSH登陆了!

2. MPI运行环境配置

执行了configure命令之后,

./configure --prefix=/home/<USERNAME>/openmpi  >& | tee install1.log  

提示:

Open MPI configuration:
-----------------------
Version: 3.0.
Build MPI C bindings: yes
Build MPI C++ bindings (deprecated): no
Build MPI Fortran bindings: no
MPI Build Java bindings (experimental): no
Build Open SHMEM support: yes
Debug build: no
Platform file: (none) Miscellaneous
-----------------------
CUDA support: no Transports
-----------------------
Cray uGNI (Gemini/Aries): no
Intel Omnipath (PSM2): no
Intel SCIF: no
Intel TrueScale (PSM): no
Mellanox MXM: no
Open UCX: no
OpenFabrics Libfabric: no
OpenFabrics Verbs: no
Portals4: no
Shared memory/copy in+copy out: yes
Shared memory/Linux CMA: yes
Shared memory/Linux KNEM: no
Shared memory/XPMEM: no
TCP: yes Resource Managers
-----------------------
Cray Alps: no
Grid Engine: no
LSF: no
Moab: no
Slurm: yes
ssh/rsh: yes
Torque: no

这里可以看到我们支持的通信协议和资源管理器支持只ssh

编译和安装的命令:

make all >& | tee make.log
make install >& | tee install2.log

出来一堆乱七八糟的,没眼看,然后找到安装目录下的  bin, 里面有很多编译器和可执行程序:

使用 mpicc 编译出可执行程序, 再使用 mpirun 去运行,就可以看到对应的输出。

正常运行后,这步骤就完成了!

3. 并行运行:

用vim编辑一个文件命名为hosts:如果你想在一个节点上运行多个进程,那么hostfile 可以使用 "slots" 属性。如果没有指定"slots",那么将假设其数目为1.

node1
node2

或者

node1-ubuntu    slots=4
node2-ubuntu slots=2

让两个节点并行运行例子程序,如下所示:

$ mpiexec -hostfile hosts -np 8 ./Test

如果运行正常,就会在运行该命令的机器上有一些显示,如果host列表中的机器的  相同路径下 没有这个文件的话,会报错:

$  ~/OpenMpi/bin/mpiexec -hostfile hosts -np   ~/TestA
--------------------------------------------------------------------------
mpiexec was unable to launch the specified application as it could not access
or execute an executable: Executable: /home/xxxxx/TestA
Node: localhost while attempting to start process rank .
--------------------------------------------------------------------------

就是:

1. 多台主机下 相同路径 下的 可执行程序命名相同

2. 开启进程数不要太多,以免超出上限,可参考  OpenMPI运行问题:enough slots available in the system

接下来,我发现,2台机器上的每个进程,但是 printf 输出的信息都只在一台机器上,这是为什么呢?——按照每台机器分别运行一个进程的话,应该打印在自身的控制台上才对呀?

后来通过测试,发现标准输出确实是只打印在运行命令的那台机器的控制台上。

而且只要可执行程序名称相同就可以,源代码是可以不一样的。(当然,最好还是一样啦,我这里弄成不一样是为了测试确实在2台机器上跑了)

机器一执行程序A: 输出固定数字  11

机器二执行程序B(生成源代码仅仅只有一个 printf 语句是不同的): 输出固定数字 22

给机器一划分一个进程,机器二也是一个进程,果然每次会输出11,22 或者 22,11 ——说明确实在2台机器上分别跑了。

也就是说,我们这个 MPI 集群其实已经搭建好了,接下来更深入的机理我后续会尽力去理清楚。

OpenMPI 集群配置的更多相关文章

  1. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  2. Redis 3.0 Cluster集群配置

    Redis 3.0 Cluster集群配置 安装环境依赖 安装gcc:yum install gcc 安装zlib:yum install zib 安装ruby:yum install ruby 安装 ...

  3. MongoDB高可用集群配置的方案

    >>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...

  4. MySQL Cluster 7.3.5 集群配置实例(入门篇)

    一.环境说明: CentOS6.3(32位) + MySQL Cluster 7.3.5,规划5台机器,资料如下: 节点分布情况: MGM:192.168.137. NDBD1:192.168.137 ...

  5. MySQL Cluster 7.3.5 集群配置参数优化(优化篇)

    按照前面的教程:MySQL Cluster 7.3.5 集群配置实例(入门篇),可快速搭建起基础版的MySQL Cluster集群,但是在生成环境中,还是有很多问题的,即配置参数需要优化下, 当前生产 ...

  6. 关于ActiveMQ的几种集群配置

    ActiveMQ的几种集群配置. Queue consumer clusters 此集群让多个消费者同时消费一个队列,若某个消费者出问题无法消费信息,则未消费掉的消息将被发给其他正常的消费者,结构图如 ...

  7. solrCloud+tomcat+zookeeper集群配置

    solrcolud安装solrCloud+tomcat+zookeeper部署  转载请出自出处:http://eksliang.iteye.com/blog/2107002 http://eksli ...

  8. RabbitMq 集群配置

    1. RabbitMQ 所需的附属安装包 1.1  openGL安装 执行命令: [root@localhost local]# yum install mesa-libGL-devel mesa-l ...

  9. Spring+quartz 实现定时任务job集群配置

    为什么要有集群定时任务? 因为如果多server都触发相同任务,又同时执行,那在99%的场景都是不适合的.比如银行每晚24:00都要汇总营业额.像下面3台server同时进行汇总,最终计算结果可能是真 ...

随机推荐

  1. wordpress上传含中文文件名出现乱码

    一.首先到FTP里面找到wp-admin/includes/file.php这个文件. 二.查找wp_handle_upload在文件里面找到以下代码. function wp_handle_uplo ...

  2. iOS-WebView(WKWebView)进度条

    一直以来,就有想通过技术博客来记录总结下自己工作中碰到的问题的想法,这个想法拖了好久今天才开始着手写自己的第一篇技术博客,由于刚开始写,不免会出现不对的地方,希望各位看到的大牛多多指教.好了,不多说了 ...

  3. BufPay.com 个人收款接口 接入步骤

    作为独立开发者产品需要收款是非常麻烦的,注册公司维护成本太高,市面上各种收款工具要么手续费太高,要么到账很慢,体验很不好. 看到 「BufPay.com 个人收款」 这个收款工具,挺有意思的.原理是监 ...

  4. 『ACM C++』 Codeforces | 1005D - Polycarp and Div 3

    今天佛了,魔鬼周一,在线教学,有点小累,但还好,今天AC了一道,每日一道,还好达成目标,还以为今天完不成了,最近任务越来越多,如何高效完成该好好思考一下了~最重要的还是学业的复习和预习. 今日兴趣新闻 ...

  5. Redis服务端和客户端的命令

    服务器端 服务器端的命令为redis-server 可以使⽤help查看帮助⽂档 redis-server --help 个人习惯 ps aux | grep redis 查看redis服务器进程su ...

  6. react-router-dom和本地服务本地开发 (node、webpack)

    场景 使用react 做开发,避免会使用react-router React Router 已经是V4的版本 React Router 目前已经被划分成了三个包:react-router,react- ...

  7. 虚拟机下linux 系统网卡配置、固定IP地址

    1.进入该目录下修改内容 vi       /etc/sysconfig/network-scripts/  ifcfg-eth0 TYPE=Ethernet BOOTPROTO=static DEF ...

  8. 第7章 YARN HA配置

    目录 7.1 yarn-site.xm文件配置 7.2 测试YARN自动故障转移 ResourceManager (RM)负责跟踪集群中的资源,以及调度应用程序(例如,MapReduce作业).在Ha ...

  9. 常用数字信号的产生(C实现)-均匀分布&正态分布

    小白博主开始学DSP之路,为了激励自己能坚持下去,写一系列博客来记录下来,也欢迎与大家一起讨论.介于我能力所限,这里学习目标定为,学习一个基础知识,写一个C语言程序实现, 最后会形成一个C的函数库,方 ...

  10. Go语言中的流程控制

    1 概述 Go语言提供了条件分支 if,状态分支 switch,循环 for,跳转 goto,延迟执行 defer,这些流程控制语句.分别作说明如下: 2 条件分支 if 依据条件是否满足确定执行哪个 ...