我们在开发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常见仓库Nginx

    Nginx 基本信息 Nginx 是开源的高效的 Web 服务器实现,支持 HTTP.HTTPS.SMTP.POP3.IMAP 等协议. 该仓库提供了 Nginx 1.0 ~ 1.7 各个版本的镜像. ...

  2. 安卓高级8 SurfaceView案例二 自定义相机

    效果:(由于不好录屏所以文字描述) 定一个SurfaceView 下方有几个按钮,点击确定可以拍照保存取消. 并且SurfaceView实时显示相机内容 package qianfeng.com.cu ...

  3. SpringBatch简介

    spring Batch是一个轻量级的.完善的批处理框架,旨在帮助企业建立健壮.高效的批处理应用.SpringBatch是Spring的一个子项目,使用Java语言并基于Spring框架为基础开发,使 ...

  4. 20160221.CCPP体系详解(0031天)

    程序片段(01):01.结构体静态数组.c+02.结构体动态数组.c 内容概要:结构体数组 ///01.结构体静态数组.c #include <stdio.h> #include < ...

  5. Compile C++ code in Matlab with OpenCV support

    Provides a function named as "mex_opencv(src)" The code function mex_opencv(src) ARC = 'x6 ...

  6. foxit pdf强制页面视图所有情况都为'合适宽度'

    在左边的书签点击时,有时明明已经设置为合适宽度,但foxit会自动给你变为'合适页面'.真是莫名其妙的设置.好在可以这样更改:

  7. Spark技术内幕:Storage 模块整体架构

    Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的.用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.R ...

  8. EBS客户化迁移SQL

    检查一些作废了的东西是否在程序包中还有用 SELECT t.* FROM ALL_SOURCE T WHERE T.TEXT LIKE '%CUX_AP_OA_OMS_PROGRAM_ELECT%' ...

  9. EBS开发性能优化之SQL语句优化

    (1)选择运算 尽可能先做选择运算,这是优化策略中最重要.最基本的一条,选择运算一般会使计算的中间结果大大变小,在对同一表格进行多个选择运算时,选择条件的排列顺序对性能也有很大影响,因为排列顺序不仅影 ...

  10. ORACLE时间日期格式使用总结(参考网上资料汇总)

    Oracle时间日期操作 sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟 ...