我们在开发mpi程序时,由于其是分布式程序,我们在单个节点上完成编码后,需要将代码拷贝到整个集群进行测试。集群之间的文件拷贝可以通过scp命令完成。但是scp命令是针对两个节点之间文件互传设计,为了将代码拷贝到所有的机器,我们需要多次调用scp命令。一个好的方法是将拷贝命令写成脚本,让其自动完成。

首次拷贝时,我们可以让scp拷贝整个工作目录到集群中,当项目较小时这种方法没有影响,但是当项目规模变大,拷贝将变得很费时。其实我们每次只对某个文件进行修改,然后重新编译进行测试。所以这时就没有必要将整个项目进行拷贝,只需要拷贝最新修改的几个文件即可。一种方法是将要拷贝的文件以参数形式传递给脚本,然后启动拷贝任务。

但是修改一个源程序文件,往往涉及多个文件的修改,例如修改一个cpp文件,重新编译之后对应的.o文件和可执行文件都被修改。如果源文件之间有依赖关系,修改的文件将会更多。因而通过参数形式声明要拷贝的文件还是有点麻烦。在实际情况中,我们往往按照这样的流程开发程序:修改一个文件,编译,然后立即将其分发到集群中进行测试。根据这个习惯,我们可以通过检查文件的修改时间来确定系统中哪些文件刚被修改,然后只拷贝这些与当前时间一样或者很接近的文件即可。下面的代码给出了一个简单的例子,程序在node1上编写,然后拷贝到集群中的node2-4中。判断文件被修改的方法就是检查文件的修改时间和当前时间是否一样,一样说明该文件刚被修改过。

#!/bin/sh

echo "copy to Node2, Node3, Node4"

current_time=$(date | cut -d' ' -f4|cut -d':' -f1,2)
for file in $(ls ~/ygch/mpi/qbh/); do
m_time=$(ls -l $file |cut -d' ' -f8) if [ $m_time = $current_time ]; then
scp ~/ygch/mpi/qbh/$file root@Node2:~/ygch/mpi/qbh/
scp ~/ygch/mpi/qbh/$file root@Node3:~/ygch/mpi/qbh/
scp ~/ygch/mpi/qbh/$file root@Node4:~/ygch/mpi/qbh/
fi
done

获取文件访问时间可以通过ls –l命令获得,运行该命令的结果是:

红色方框里面的即是文件的修改时间,然后我们通过cut命令提取该列即可获得文件的修改时间。当前时间可以利用date命令获得,运行结果是:

然后我们也通过cut命令获取当前时间,与ls –l命令稍微有点不同,我们需要两次利用cut命令获取和ls –l一样的时间。最后查找目录中两个时间一致的文件拷贝到集群中所有其他节点中。

在上例中文件被修改的标志是文件修改时间和当前时间一致,这个是最简单的方法,我们可以依照实际情况调整判别依据,但是上述方法足以应付绝大多数情况。

mpi中程序在集群中的分发的更多相关文章

  1. 项目中使用Quartz集群分享--转载

    项目中使用Quartz集群分享--转载 在公司分享了Quartz,发布出来,希望大家讨论补充. CRM使用Quartz集群分享  一:CRM对定时任务的依赖与问题  二:什么是quartz,如何使用, ...

  2. (4) Spring中定时任务Quartz集群配置学习

    原 来配置的Quartz是通过spring配置文件生效的,发现在非集群式的服务器上运行良好,但是将工程部署到水平集群服务器上去后改定时功能不能正常运 行,没有任何错误日志,于是从jar包.JDK版本. ...

  3. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统

    前言 我们知道HDFS集群中,所有的文件都是存放在DN的数据块中的.那我们该怎么去查看数据块的相关属性的呢?这就是我今天分享的内容了 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 我 ...

  4. win10下将spark的程序提交给远程集群中运行

    一,开发环境: 操作系统:win19 64位 IDE:IntelliJ IDEA JDK:1.8 scala:scala-2.10.6 集群:linux上cdh集群,其中spark为1.5.2,had ...

  5. 使用port-forward访问集群中的应用程序,以Redis 为例

    为Redis创建Deployment和Service 创建 Redis Deployment,YAML文件如下: apiVersion: apps/v1 kind: Deployment metada ...

  6. redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题

    先来说下session和cookie的异同 session和cookie不仅仅是一个存放在服务器端,一个存放在客户端那么笼统 session虽然存放在服务器端,但是也需要和客户端相互匹配,试想一个浏览 ...

  7. 实验室中搭建Spark集群和PyCUDA开发环境

    1.安装CUDA 1.1安装前工作 1.1.1选取实验器材 实验中的每台计算机均装有双系统.选择其中一台计算机作为master节点,配置有GeForce GTX 650显卡,拥有384个CUDA核心. ...

  8. 负载均衡集群中的session解决方案

    前言 在我们给Web站点使用负载均衡之后,必须面临的一个重要问题就是Session的处理办法,无论是PHP.Python.Ruby还是Java,只要使用服务器保存Session,在做负载均衡时都需要考 ...

  9. 集群中几种session同步解决方案的比较

    1. 客户端cookie加密 .比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现. 问题:session中数据不能太多,最好只有个用户id. Sessi ...

随机推荐

  1. Docker命令查询

    基本语法 docker [OPTIONS] COMMAND [arg...] 一般来说,Docker 命令可以用来管理 daemon,或者通过 CLI 命令管理镜像和容器.可以通过 man docke ...

  2. JavaScript Date(日期)对象

    返回当日的日期和时间 如何使用 Date() 方法获得当日的日期. getFullYear() 使用 getFullYear() 获取年份. getTime() getTime() 返回从 1970 ...

  3. 周口网视界易付点卡销售平台招商中 www.zkpay.cn 欢迎各界朋友加盟合作。

    周口网视界易付点卡销售平台针对全国各地网吧及游戏点卡代理招商中. http://www.zkpay.cn   腾讯新的游戏点卡销售平台,平台价优稳定,这个是老家朋友开的公司,欢迎全国各地网吧客户及游戏 ...

  4. 预处理指令--C语言

    ANSI标准C还定义了如下几个宏: __LINE__ 表示正在编译的文件的行号 __FILE__ 表示正在编译的文件的名字 __DATE__ 表示编译时刻的日期字符串,例如:"25 Dec ...

  5. springMVC源码分析--HandlerMethod

    在之前的博客中我们已经接触过HandlerMethod,接下来我们简单介绍一下HandlerMethod,简单来说HandlerMethod包含的信息包括类.方法和参数的一个信息类,通过其两个构造函数 ...

  6. 从源码安装git

    蛋疼的阿里云,git版本居然才1.9.只能手动安装了. 预装 apt-get update apt-get --yes install libcurl4-gnutls-dev libexpat1-de ...

  7. Editorial Board 、co-editor、ediitor、editor-in-chief的区别

    昨天更新掘金APP-IOS之后发现一个比较严重的Bug,联系管理者报告了Bug,中途发现掘金的发布功能需要申请成为co-editor才行. 那么这里科普一下这几个名词: Editorial Board ...

  8. Hibernate单表操作

    单一主键 assigned:由Java应用程序负责生成(即手工的赋值) native:由底层的数据库自动的生成标示符,如果是MySQL就是auto_increment,如果是Oracle就是seque ...

  9. EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证

     { field : 'startPort', title : "起始端口", editor: "text", width : 50, editor: { ...

  10. 关于android app签名文件获取sha1和MD值

    最近在做百度地图的嵌入,因为从同事接手的android app,所以第一次接触android的签名. 总的来说签名还比较简单,我用的是eclipse ADT自带的签名工具来做的签名,方法如下: 选择项 ...