我们在开发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 Kubernetes 项目

    Kubernetes 是 Google 团队发起并维护的基于Docker的开源容器集群管理系统,它不仅支持常见的云平台,而且支持内部数据中心. 建于Docker之上的Kubernetes可以构建一个容 ...

  2. Docker多台物理主机之间的容器互联

    Docker 默认的桥接网卡是 docker0.它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 veth* 而 Docker 只是把所有这些网卡桥接在一起,如下: [root ...

  3. APP自动化框架LazyAndroid使用手册(1)--框架简介

    作者:cryanimal  QQ:164166060 APP自动化简介 APP自动化,即通过自动化的方式,对APP施行一系列的仿按键输入.触摸屏输入.手势输入等操作,以达到对APP的功能进行自动化测试 ...

  4. valgrind检测内存泄漏

    Valgrind 使用 用法:valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具 -tool=<name>最常 ...

  5. WebView 的使用案例

    package com.example.day20_webview; import android.os.Bundle; import android.annotation.SuppressLint; ...

  6. 通过grub-install命令把grub安装到u盘

    通过grub-install命令把grub安装到u盘 ①准备一个u盘,容量不限,能有1MB都足够了. ②把u盘格式化(我把u盘格式化成FAT.fat32格式了,最后证明也是成功的).③开启linux系 ...

  7. SceneKit做一个旋转的地球效果

    SceneKit可以用寥寥几行帮你完成很多OpenGL复杂的3D设置代码,下面本猫就带大家完成一个旋转的3D地球的场景. 首先需要地球表面图片,将其导入到Xcode中: 我们用SceneKit内置的几 ...

  8. android 集成微博常见问题

    我们在做微博集成登录.分享.聊天的时候,肯定会遇到很多的坑,这里总结下常见的问题. 文件不存在 C8998 的解决方法 如图我们走微博授权登录的时候如果OAuth2.0 授权设置回调页面设置和本地的不 ...

  9. Servlet配置与资源参数

    import java.io.*; import javax.servlet.*; import javax.servlet.http.*; // 继承HttpServlet 类 public cla ...

  10. Android的ViewFlipper-android学习之旅(三十五)

    ViewFlipper的简介 ViewFlipper继承于ViewAnimator,它和AdapterViewFlipper有着许多的相似的地方. 代码示例 package peng.liu.test ...