本发明专利技术提供了一种并行运行时错误检测方法,包括:设置初始值为0的第一计数器和第二计数器;在进程进入一个MPI阻塞操作时,第一计数器加一,并启动一个定时器;在从该阻塞操作返回时,将第一计数器的值赋给第二计数器,并取消定时器;而且,如果该MPI阻塞在一个MPI调用中,则在定时器满时触发一个软中断信号,从而进入一个中断处理函数,在中断处理函数中比较第一计数器和第二计数器的当前值,如果第一计数器和第二计数器的当前值不相等,则执行状态转储并随后执行死锁检测;如果第一计数器和第二计数器的当前值相等,则从中断处理函数返回,并继续执行并行程序。
【技术实现步骤摘要】
并行运行时错误检测方法
本专利技术涉及计算机
,具体涉及一种并行运行时错误检测方法。
技术介绍
在HPC(HighPerformanceComputing,高性能计算)领域,MPI(MessagePassingInterface,消息传递接口)是目前应用最广泛最灵活的并行编程模型,也是当今主流的消息传递标准,目前应用最广泛的并行程序编程模型,有多个开源实现版本。对于MPI,因为其不是自动并行化,故程序员一般按照从小到大逐步增加并行规模的方式来开发并行计算。当程序在小规模并行时,可在程序中添加打印或使用调试工具的调试方法,来解决并行运行时错误的检测和定位,然而面对成百上千个点、数万行代码时,巨量的打印输出不仅显著干扰了程序的并行执行,而且给分析输出带来了巨大工作量。现有大规模并行程序的调试工具都是面向进程和程序语句的,从数千进程中选择哪些进程进行调试、调试哪些程序语句呢,因此目前大规模并行程序的查错几乎都是凭程序员的经验,进行人工分析。另一方面,大规模并行程序的执行时间可能延续很长,是否处于正常的运行状态,有没有因为程序错误或者网络等系统故障发生通信死锁是程序员非常关注的,这涉及到一个计算中心的投入产出率,因此需要一种轻量级的、能及时检测通信死锁,并大幅减少人工操作自动化分析大量并行进程交互状态的装置。STAT是一个并行程序运行监视软件,收集所有并行进程的函数调用栈层关系,基于MRNET(一种动态建立的分层通信网),聚集信息进行聚类分析,最后以可视化方式展示大规模并行程序的运行状态。由于该软件对并行交互过程没有显著干扰,监测信息简单,可以适应较大规模的并行监视,但是自身不能检测任何运行时错误,需要借助人工比较多次监控结果,才能发现是否存在执行行为异常的进程,再选择这类进程,使用常规调试工具进一步确认和分析程序错误。MUST是一款MPI运行时错误检测软件,采用库级插装,对程序中所有调用MPI库的地方插入了错误分析,收集基于MPI调用的全部并行交互信息,并基于MRNET聚集信息到一个中心点,构建消息传递的有向依赖图,进而检测消息传递的循环依赖,诊断通信死锁。由于信息采集存储通信的开销和中心服务器的瓶颈效应,限制了技术应用的并行规模,100个进程以内。在MPI运行时库的开源实现版本中,先后提供过两种调试技术:早期并行程序的规模较小,采用的调试方法是收集、展示每一次进程间交互事件,提供程序员人工分析,在并行规模增大后,提供了对抽象设备层(ADI)消息队列的访问接口,通过该接口库,可以获得某一瞬间,每个进程未完成的发送消息队列(pendingsend)、未完成的接收消息队列(pendingreceive)、以及意外接收消息队列(unexectedreceive)(即已接收下来未被本地程序认领的接收消息)消息队列。Totalview(一种并行调试工具,支持多种体系结构平台,为MPI、OpenMP、OpenAcc多种并行程序提供面向进程和线程的常规调试功能)首先利用进程间调试接口停止一个进程集合的进程活动,再基于该队列访问接口,到MPI进程空间中抓取消息队列,展示该进程集的程序在某一瞬间未完成的消息,没有进一步提供死锁检测功能,需要人工判断是否发生通信死锁。对于一个数千点规模的并行程序,全部停止所有进程活动可能危及调试工具自身的稳定性,因此totalview仅展示了部分进程,即一个子集中的消息。
技术实现思路
本专利技术所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种并行运行时错误检测方法,其面向MPI的通信死锁检测,解决了现有技术运行开销大,缺乏对运行时并行交互错进行探究分析的缺陷,在未被激活的时候几乎不影响并行程序的性能,能够基于MPI库的开放接口实现运行时库,可移植性好,对用户编程完全透明。根据本专利技术,提供了一种并行运行时错误检测方法,用于定位MPI并行程序运行时产生的错误。所述并行运行时错误检测方法包括:设置初始值为0的第一计数器和第二计数器;在进程进入一个MPI阻塞操作时,第一计数器加一,并启动一个定时器;在从该阻塞操作返回时,将第一计数器的值赋给第二计数器,并取消定时器;而且,如果该MPI阻塞在一个MPI调用中,则在定时器满时触发一个软中断信号,从而进入一个中断处理函数,在中断处理函数中比较第一计数器和第二计数器的当前值,如果第一计数器和第二计数器的当前值不相等,则执行状态转储并随后执行死锁检测;如果第一计数器和第二计数器的当前值相等,则从中断处理函数返回,并继续执行并行程序。优选地,在执行状态转储时,使每个进入交互稳态的MPI进程把当前进程状态、函数调用的地址轨迹、未完成的发送消息队列、未完成的接收消息队列以及意外接收消息队列的数据写入转储文件,转储完成后返回并行程序,继续执行。优选地,在执行死锁检测时,读入所有转储文件,并且在下述两个条件中的任何一个成立时判定发生通信死锁:第一条件:通信集中的所有进程都进入MPI操作中,但未执行同一种全局操作;第二条件:未完成的接收消息队列循环依赖。优选地,在第一条件被满足时输出相似度最低的进程状态;在第二条件被满足时顺着循环依赖关系,查询相似度最低的预定数量的进程中的每个进程的未完成的发送消息队列以及意外接收消息队列,以查找与所述未完成的接收消息队列匹配的消息。本专利技术采用稳态检测,自动推送关键信息到外部文件,由外部程序完成错误检测和分析,降低了错误检测对并行程序自身的运行干扰。基于消息队列检测和分析通信死锁,解决了收集和记录mpi通信语义带来的巨大开销。而且,本专利技术能够实现对应用编程透明。本专利技术能够针对大规模并行程序的通信死锁降低计算资源利用率的问题,采用在检测出进入稳态之后,自动推送关键信息到外部文件,由外部程序完成错误检测和分析。基于消息队列检测和分析通信死锁,无须跟踪分析并行交互全过程,解决了收集和记录MPI通信语义导致并行程序性能显著下降的问题,具有适应大规模并行程序查错的可扩展性和实用性。另外,该技术在运行时库级实现,对用户编程完全透明。附图说明结合附图,并通过参考下面的详细描述,将会更容易地对本专利技术有更完整的理解并且更容易地理解其伴随的优点和特征,其中:图1示意性地示出了根据本专利技术优选实施例的并行运行时错误检测方法的流程图。需要说明的是,附图用于说明本专利技术,而非限制本专利技术。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。具体实施方式为了使本专利技术的内容更加清楚和易懂,下面结合具体实施例和附图对本专利技术的内容进行详细描述。图1示意性地示出了根据本专利技术优选实施例的并行运行时错误检测方法的流程图。具体地,例如,根据本专利技术优选实施例的并行运行时错误检测方法用于定位MPI并行程序运行时产生的错误。如图1所示,根据本专利技术优选实施例的并行运行时错误检测方法包括:第一步骤S1:执行稳态检测;其中,在执行稳态检测时,例如在MPI工具的函数MPI_INIT(用于初始化MPI执行环境,建立多个MPI进程之间的联系,为后续通信做准备)中,设置初始值为0的第一计数器A和第二计数器B;在进程进入一个MPI阻塞操作时,第一计数器A加一,并启动一个定时器(alarm);从该阻塞操作返回时,第一计数器A的值赋给第二计数器B,并取本文档来自技高网...
【技术保护点】
一种并行运行时错误检测方法,用于定位MPI并行程序运行时产生的错误,其特征在于包括:设置初始值为0的第一计数器和第二计数器;在进程进入一个MPI阻塞操作时,第一计数器加一,并启动一个定时器;在从该阻塞操作返回时,将第一计数器的值赋给第二计数器,并取消定时器;而且,如果该MPI阻塞在一个MPI调用中,则在定时器满时触发一个软中断信号,从而进入一个中断处理函数,在中断处理函数中比较第一计数器和第二计数器的当前值,如果第一计数器和第二计数器的当前值不相等,则执行状态转储并随后执行死锁检测;如果第一计数器和第二计数器的当前值相等,则从中断处理函数返回,并继续执行并行程序。
【技术特征摘要】
1.一种并行运行时错误检测方法,用于定位MPI并行程序运行时产生的错误,其特征在于包括:设置初始值为0的第一计数器和第二计数器;在进程进入一个MPI阻塞操作时,第一计数器加一,并启动一个定时器;在从该阻塞操作返回时,将第一计数器的值赋给第二计数器,并取消定时器;而且,如果该MPI阻塞在一个MPI调用中,则在定时器满时触发一个软中断信号,从而进入一个中断处理函数,在中断处理函数中比较第一计数器和第二计数器的当前值,如果第一计数器和第二计数器的当前值不相等,则执行状态转储并随后执行死锁检测;如果第一计数器和第二计数器的当前值相等,则从中断处理函数返回,并继续执行并行程序;其中,在执行状态转储时,使每个进入交互稳态的MPI进程把当前进程状态、函数调用的地...
【专利技术属性】
技术研发人员:刘勇,彭超,陈华蓉,王敬宇,冯赟龙,王雯霞,
申请(专利权)人:无锡江南计算技术研究所,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。