注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

韬光养晦

路漫漫其修远兮,吾将上下而求索

 
 
 

日志

 
 

MPI 一种方案  

2008-05-06 14:18:41|  分类: MSE learning |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  一、目的

随着计算量和计算复杂度的增加,并行计算的门槛越来越低、越来越普及。并行计算的问题通常是具有较大的计算量和较长的计算时间。

但是,随着计算时间的增加,计算中发生错误的概率就越来越大。当发生错误的时候,通常程序默认的处理就是报告错误并停机。若要恢复程序运行,就需要在重新启动程序之后从头开始计算。这样就造成了计算资源的浪费。

为了减少这种计算资源的浪费,在MPICH规范下,我们设计了一种基于状态保存的错误恢复机制,使得当程序出错重新启动之后,能够迅速恢复到出错之前的正确状态,达到了预期的目的。

该机制的核心内容有二:程序状态的保存与恢复和消息的可靠传输。程序状态的保存与恢复是为了使得出错的程序能够迅速恢复到正确状态。消息的可靠传输是保证消息在正确传送之后产生的作用是永久性的,不受出错的影响。

对于程序状态的保存与恢复,可以采用保存和恢复进程的状态来实现,也可以通过应用程序级的操作来实现。对于消息的可靠传输,只需要在消息传送之后进行程序状态保存,即可达到目的。

二、一种方案

对于一个在所有进程循环执行的并行程序,循环次数比较巨大的称之为粗粒度的程序。当这种类型的程序出错时候,重新执行所需要花费的代价也比较大,随着循环次数增多而增大。我们的方案就是针对这种类型的程序提出,减少其恢复代价。

这里我们设计了一个主从模式的并行程序下的方案,主进程负责传递参数给从进程、从进程的数据备份和恢复、备份数据的保存等任务,从进程则负责循环计算,并将计算结果返回给主进程,并在适当时候通过主进程进行备份和恢复。

下面详细说明主从进程的工作流程:

1 程序启动后,首先判断进程个数,若进程个数小于2或者超过最大允许进程数,则退出,否则继续。

2 以0号进程为主进程,主进程启动之后,读入相关任务参数,并且将相关参数广播给各个从进程。然后进入主进程工作状态4。

3 从进程启动,在接受到主进程广播参数之后进入从进程工作状态5。

4 主进程通过硬盘某路径是否存在特定文件判断是否主进程是重新启动,如果是,则通过读取文件进行恢复;若不是,则新建该文件。然后主进程进入消息循环状态:

通过判断接受到的消息的类型来做相应处理,这些类型包括从进程的重启查询、数据备份、数据恢复、任务提交等。

重启查询:主进程通过查看自身数据,告诉从进程从进程是否是从启。

数据备份:接收到从进程发送过来的备份数据,则写入自身缓存并立刻写入备份文件。

数据恢复:从自身缓存中的响应数据返回给从进程。

任务提交:将从进程提交数据放入缓存,当所有从进程都提交任务之后,输出结果,并从硬盘删除备份文件。

5 从进程通过询问主进程,得知自己是否是重新启动。如果是,则向主进程请求数据恢复,并利用返回数据恢复初始化循环计算数据;若不是,则从头开始循环计算;

通常是每循环一次就向主进程进行一次备份,但是这样的开销十分巨大。为了减少这种频繁备份带来的开销,可以在循环一定次数之后再向主进程进行一次备份。

循环结束之后,即从进程计算任务完成之后,从进程再发送一次备份消息,并且再发送任务提交消息。

补充说明,应当注意的是:

1 这个方案中并没有涉及到从进程之间的相互通信,但这并没有多大关系,如果从进程之间有通信的话,只需要在接收方再接受消息成功之后,进行备份,即可。

2 从进程在循环中的备份步数,可以通过建立模型给出。

三、相应的程序

为了实现上面的方案,我们设计了一个程序用来演示。该程序用来模拟“火炬”(一种消息)的传送过程:每个从进程都被用来传递火炬,还没有收到火炬时候,进程进行循环加法运算用以等待;收到之后,继续原来循环加法一定次数之后将值同火炬已有值相加,作为新的火炬值传送给下一个进程并进行任务提交;传递之后,从进程计算任务结束。

应当注意的是:这个程序中从进程之间进行了通信,方案的补充说明中已经描述了这种情况。

以下给出程序的源代码:

(此处省略源代码)

经过运行程序,将程序在WCCS中多机运行,发现程序正确执行。即在一个结点上杀死进程,用来模拟出错时候系统的默认行为,程序被迫终止。在重新启动程序之后,通过程序的输出发现程序在原来备份的基础上开始运行计算,省去了一部分时间,并且最终输出结果同正常执行输出结果一致。方案和程序的正确性得到了验证。

從前從前有個人很愛你

  评论这张
 
阅读(195)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018