CN105243023B - 并行运行时错误检测方法 - Google Patents
并行运行时错误检测方法 Download PDFInfo
- Publication number
- CN105243023B CN105243023B CN201510831795.5A CN201510831795A CN105243023B CN 105243023 B CN105243023 B CN 105243023B CN 201510831795 A CN201510831795 A CN 201510831795A CN 105243023 B CN105243023 B CN 105243023B
- Authority
- CN
- China
- Prior art keywords
- counter
- mpi
- message queue
- dump
- unfinished
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种并行运行时错误检测方法,包括:设置初始值为0的第一计数器和第二计数器;在进程进入一个MPI阻塞操作时,第一计数器加一,并启动一个定时器;在从该阻塞操作返回时,将第一计数器的值赋给第二计数器,并取消定时器;而且,如果该MPI阻塞在一个MPI调用中,则在定时器满时触发一个软中断信号,从而进入一个中断处理函数,在中断处理函数中比较第一计数器和第二计数器的当前值,如果第一计数器和第二计数器的当前值不相等,则执行状态转储并随后执行死锁检测;如果第一计数器和第二计数器的当前值相等,则从中断处理函数返回,并继续执行并行程序。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种并行运行时错误检测方法。
背景技术
在HPC(High Performance Computing,高性能计算)领域,MPI(Message PassingInterface,消息传递接口)是目前应用最广泛最灵活的并行编程模型,也是当今主流的消息传递标准,目前应用最广泛的并行程序编程模型,有多个开源实现版本。对于MPI,因为其不是自动并行化,故程序员一般按照从小到大逐步增加并行规模的方式来开发并行计算。
当程序在小规模并行时,可在程序中添加打印或使用调试工具的调试方法,来解决并行运行时错误的检测和定位,然而面对成百上千个点、数万行代码时,巨量的打印输出不仅显著干扰了程序的并行执行,而且给分析输出带来了巨大工作量。现有大规模并行程序的调试工具都是面向进程和程序语句的,从数千进程中选择哪些进程进行调试、调试哪些程序语句呢,因此目前大规模并行程序的查错几乎都是凭程序员的经验,进行人工分析。
另一方面,大规模并行程序的执行时间可能延续很长,是否处于正常的运行状态,有没有因为程序错误或者网络等***故障发生通信死锁是程序员非常关注的,这涉及到一个计算中心的投入产出率,因此需要一种轻量级的、能及时检测通信死锁,并大幅减少人工操作自动化分析大量并行进程交互状态的装置。
STAT是一个并行程序运行监视软件,收集所有并行进程的函数调用栈层关系,基于MRNET(一种动态建立的分层通信网),聚集信息进行聚类分析,最后以可视化方式展示大规模并行程序的运行状态。由于该软件对并行交互过程没有显著干扰,监测信息简单,可以适应较大规模的并行监视,但是自身不能检测任何运行时错误,需要借助人工比较多次监控结果,才能发现是否存在执行行为异常的进程,再选择这类进程,使用常规调试工具进一步确认和分析程序错误。
MUST是一款MPI运行时错误检测软件,采用库级插装,对程序中所有调用MPI库的地方***了错误分析,收集基于MPI调用的全部并行交互信息,并基于MRNET聚集信息到一个中心点,构建消息传递的有向依赖图,进而检测消息传递的循环依赖,诊断通信死锁。由于信息采集存储通信的开销和中心服务器的瓶颈效应,限制了技术应用的并行规模,100个进程以内。
在MPI运行时库的开源实现版本中,先后提供过两种调试技术:早期并行程序的规模较小,采用的调试方法是收集、展示每一次进程间交互事件,提供程序员人工分析,在并行规模增大后,提供了对抽象设备层(ADI)消息队列的访问接口,通过该接口库,可以获得某一瞬间,每个进程未完成的发送消息队列(pending send)、未完成的接收消息队列(pending receive)、以及意外接收消息队列(unexected receive)(即已接收下来未被本地程序认领的接收消息)消息队列。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阻塞在一个MPI调用中,定时器满时就触发一个软中断信号,从而进入一个中断处理函数,在中断处理函数中比较第一计数器A和第二计数器B的当前值,如果不相等就认为进程处于一种交互稳态(需要进一步检测是否发生通信死锁),由此在执行状态转储(第二步骤S2)之后执行死锁检测(第三步骤S3)。如果两个计数器的值相等,则从中断处理函数返回,继续执行并行程序。
其中,交互稳态指的是如果进程从某一瞬间开始与其它进程不再交互,则认为该进程进入了一种并行交互的稳定状态。
第二步骤S2:执行状态转储;
在执行状态转储时,每个进入稳态的MPI进程把当前进程状态(计算、通信)、函数调用的地址轨迹、三个消息队列(未完成的发送消息队列、未完成的接收消息队列以及意外接收消息队列)等数据写入转储文件,转储完成后返回并行程序,继续执行。没有进入稳态的进程不执行这一步。
第三步骤S3:执行死锁检测;
在执行死锁检测时,读入所有转储文件,进行死锁检测。死锁检测依据两个条件:(1)全局操作未全局参与,即通信集中的所有进程都进入MPI操作中,但未执行同一种全局操作,2)未完成的接收消息队列循环依赖,即某一进程集中存在未完成的接收消息队列的循环依赖关系。构成任一条件,则认为发生通信死锁。
第四步骤S4:执行死锁推测。
若不满足死锁条件,则立即返回;否则对产生转储的进程集,进行进程状态的聚类分析,若是满足条件(1)则输出相似度最低的进程状态;若是满足条件(2)则顺着循环依赖关系,查询相似度低的每个进程(例如,相似度最低的预定数量的进程中的每个进程)的其它两个消息队列,查找与未完成的接收消息队列匹配(例如,满足预定匹配条件)的消息,如有,则输出命中进程的相似消息。
在上述方法中,执行前两步的模块集成在MPI并行程序中,是基于MPI运行时库的PMPI开放接口,链接时实现对MPI运行时库的库级插装,无须修改MPI库的源码,集成方便,对用户编程透明。该装置的执行流程不需人工操作,能够自动报告可能发生的通信死锁,并对死锁根原提供一份推测分析报告,大大提高了调试效率和计算资源的利用率。
总之,大规模MPI并行程序的运行时错误定位需要分析大量MPI进程的执行状态和交互过程,进程相关信息的采集、存储和集中分析产生了巨大运行开销,不仅降低了大量计算资源的利用率,而且影响了现有调试技术的可扩展性和实用性。本装置要解决MPI并行程序运行时错误检测的效率问题,降低对并行运行的干扰和运行开销。
此外,需要说明的是,除非特别指出,否则说明书中的术语“第一”、“第二”、“第三”等描述仅仅用于区分说明书中的各个组件、元素、步骤等,而不是用于表示各个组件、元素、步骤之间的逻辑关系或者顺序关系等。
可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (3)
1.一种并行运行时错误检测方法,用于定位MPI并行程序运行时产生的错误,其特征在于包括:
设置初始值为0的第一计数器和第二计数器;在进程进入一个MPI阻塞操作时,第一计数器加一,并启动一个定时器;在从该阻塞操作返回时,将第一计数器的值赋给第二计数器,并取消定时器;而且,如果该MPI阻塞在一个MPI调用中,则在定时器满时触发一个软中断信号,从而进入一个中断处理函数,在中断处理函数中比较第一计数器和第二计数器的当前值,如果第一计数器和第二计数器的当前值不相等,则执行状态转储并随后执行死锁检测;如果第一计数器和第二计数器的当前值相等,则从中断处理函数返回,并继续执行并行程序;其中,在执行状态转储时,使每个进入交互稳态的MPI进程把当前进程状态、函数调用的地址轨迹、未完成的发送消息队列、未完成的接收消息队列以及意外接收消息队列的数据写入转储文件,转储完成后返回并行程序,继续执行。
2.根据权利要求1所述的并行运行时错误检测方法,其特征在于,在执行死锁检测时,读入所有转储文件,并且在下述两个条件中的任何一个成立时判定发生通信死锁:
第一条件:通信集中的所有进程都进入MPI操作中,但未执行同一种全局操作;
第二条件:未完成的接收消息队列循环依赖。
3.根据权利要求2所述的并行运行时错误检测方法,其特征在于,在第一条件被满足时输出相似度最低的进程状态;在第二条件被满足时顺着循环依赖关系,查询相似度最低的预定数量的进程中的每个进程的未完成的发送消息队列以及意外接收消息队列,以查找与所述未完成的接收消息队列匹配的消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510831795.5A CN105243023B (zh) | 2015-11-24 | 2015-11-24 | 并行运行时错误检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510831795.5A CN105243023B (zh) | 2015-11-24 | 2015-11-24 | 并行运行时错误检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105243023A CN105243023A (zh) | 2016-01-13 |
CN105243023B true CN105243023B (zh) | 2017-09-26 |
Family
ID=55040676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510831795.5A Active CN105243023B (zh) | 2015-11-24 | 2015-11-24 | 并行运行时错误检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105243023B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107301125B (zh) * | 2017-06-19 | 2021-08-24 | 广州华多网络科技有限公司 | 一种寻找根源错误的方法、装置及电子设备 |
CN109213684B (zh) * | 2018-09-18 | 2022-01-28 | 北京工业大学 | 基于OpenMP线程心跳检测技术的程序检测方法及应用 |
CN112631816B (zh) * | 2019-09-24 | 2022-11-15 | 无锡江南计算技术研究所 | 基于调试日志的并行程序错误定位方法 |
CN111090528B (zh) * | 2019-12-25 | 2023-09-26 | 北京天融信网络安全技术有限公司 | 死锁确定方法、装置及电子设备 |
CN111538599A (zh) * | 2020-04-23 | 2020-08-14 | 杭州涂鸦信息技术有限公司 | 一种基于linux的多线程死锁问题定位方法及*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833479A (zh) * | 2010-04-16 | 2010-09-15 | 中国人民解放军国防科学技术大学 | 多网络环境下基于强化学习的mpi消息调度方法 |
CN101937365A (zh) * | 2009-06-30 | 2011-01-05 | 国际商业机器公司 | 并行程序的死锁检测方法和*** |
CN103365852A (zh) * | 2012-03-28 | 2013-10-23 | 天津书生软件技术有限公司 | 一种文档库***中的并发控制方法及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8527740B2 (en) * | 2009-11-13 | 2013-09-03 | International Business Machines Corporation | Mechanism of supporting sub-communicator collectives with O(64) counters as opposed to one counter for each sub-communicator |
TW201329863A (zh) * | 2012-01-10 | 2013-07-16 | Nat Univ Tsing Hua | 用於平行程式中必然先序關係且免於死結的同步動作合成器及方法 |
-
2015
- 2015-11-24 CN CN201510831795.5A patent/CN105243023B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937365A (zh) * | 2009-06-30 | 2011-01-05 | 国际商业机器公司 | 并行程序的死锁检测方法和*** |
CN101833479A (zh) * | 2010-04-16 | 2010-09-15 | 中国人民解放军国防科学技术大学 | 多网络环境下基于强化学习的mpi消息调度方法 |
CN103365852A (zh) * | 2012-03-28 | 2013-10-23 | 天津书生软件技术有限公司 | 一种文档库***中的并发控制方法及*** |
Non-Patent Citations (1)
Title |
---|
一种基于并行技术的死锁检测算法;陈岚;《广西科学院学报》;20030531;第19卷(第2期);64-68页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105243023A (zh) | 2016-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105243023B (zh) | 并行运行时错误检测方法 | |
Vetter et al. | Dynamic software testing of MPI applications with Umpire | |
US8141053B2 (en) | Call stack sampling using a virtual machine | |
CN110741354B (zh) | 呈现代码实体调用之间的差异 | |
US8136124B2 (en) | Method and apparatus for synthesizing hardware counters from performance sampling | |
US8032875B2 (en) | Method and apparatus for computing user-specified cost metrics in a data space profiler | |
US8813055B2 (en) | Method and apparatus for associating user-specified data with events in a data space profiler | |
US8627335B2 (en) | Method and apparatus for data space profiling of applications across a network | |
US20150234730A1 (en) | Systems and methods for performing software debugging | |
Dean et al. | Perfcompass: Online performance anomaly fault localization and inference in infrastructure-as-a-service clouds | |
US20080127120A1 (en) | Method and apparatus for identifying instructions associated with execution events in a data space profiler | |
Beschastnikh et al. | Mining temporal invariants from partially ordered logs | |
US10541042B2 (en) | Level-crossing memory trace inspection queries | |
EP2609501B1 (en) | Dynamic calculation of sample profile reports | |
US20060218543A1 (en) | Method and apparatus for analyzing call history data derived from execution of a computer program | |
Mitra et al. | Accurate application progress analysis for large-scale parallel debugging | |
WO2014143279A1 (en) | Bottleneck detector for executing applications | |
US9135082B1 (en) | Techniques and systems for data race detection | |
US10860454B2 (en) | Analyzing large-scale data processing jobs | |
Xu et al. | Experience mining Google's production console logs | |
US20120185732A1 (en) | Method of measuring and diagnosing misbehaviors of software components and resources | |
KR20150118963A (ko) | 큐 모니터링 및 시각화 | |
Sridharan et al. | Using pvf traces to accelerate avf modeling | |
Berger et al. | Triangulating python performance issues with {SCALENE} | |
Taheri | ANALYSIS AND DEBUGGING TOOLS FOR CONCURRENT PROGRAMS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |