现在有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. 通用输入输出端口 - GPIO

    一.概述 GPlO ( General Purpose I/0 Ports )意思为通用输入/输出端口, 通俗地说, 就是一些引脚.在芯片手册中I/O端口一般是分组的,比如有的芯片分为 A-J 共 9 ...

  2. Oracle 体系结构三 后台进程

    实例后台进程在启动实例时启动,在终止实例时终止运行. SMON SMON(system monitor)起初的任务是安装和打开数据.SMON通过查找和验证数据库控制文件来安装数据库.此后,它通过查找和 ...

  3. AJAX上传文件到服务器

    上传文件是常要处理的事情,使用ajaxFileUpload.js处理比较方便,这里的ajaxFileUpload.js文件修改过的, Html部分 <input type="file& ...

  4. CodeChef March Lunchtime 2018 div2

    地址https://www.codechef.com/LTIME58B?order=desc&sortBy=successful_submissions 简单做了一下,前三题比较水,第四题应该 ...

  5. Zabbix——设置报警阈值

    前提条件: 1. Zabbix-server 版本为4.0 2.邮件告警正常使用 3. 阈值改为1分钟进行邮件发送 点击: 找到agent,点击触发器: 设置网络ping包进行检测

  6. 关于MySQL自增主键的几点问题(上)

    前段时间遇到一个InnoDB表自增锁导致的问题,最近刚好有一个同行网友也问到自增锁的疑问,所以抽空系统的总结一下,这两个问题下篇会有阐述. 1. 划分三种插入类型 这里区分一下几种插入数据行的类型,便 ...

  7. springboot-redis缓存

    Redis缓存使用 1.  引入依赖(可能已经引入了):spring-boot-starter-cache 2.  在application.yml配置文件中配置spring:redis:host/p ...

  8. 【JavaWeb】从零实现用户登录

    1.数据库预备 1.1 SQL 创建数据库 create database db; 创建表 create table userInfo( id int primary key , name ), pa ...

  9. [转]去掉IOS下的input 和textarea的内阴影

    在IOS下,input 和textarea表单默认会有个内阴影,一定程度上影响视觉一致,可通过设置下面代码去掉: input{-webkit-appearance: none;}

  10. yii 后台配置独立子域名方法

    我这里安装的是宝塔面板集成的环境WNMP,官网上虽然也有,但是写的并不明确,对我这种用YII的新手来说也很头疼,折腾了半天终于弄好,记录一下. 首先解析一个子域名:back.domain.com: 用 ...