CN110554925B - 面向死锁检查的非阻塞mpi程序符号执行方法、系统及介质 - Google Patents
面向死锁检查的非阻塞mpi程序符号执行方法、系统及介质 Download PDFInfo
- Publication number
- CN110554925B CN110554925B CN201910838017.7A CN201910838017A CN110554925B CN 110554925 B CN110554925 B CN 110554925B CN 201910838017 A CN201910838017 A CN 201910838017A CN 110554925 B CN110554925 B CN 110554925B
- Authority
- CN
- China
- Prior art keywords
- state
- blocking
- matching
- global
- program
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及计算机高性能计算的可靠性保证领域,公开了一种面向死锁检查的非阻塞MPI程序符号执行方法、系统及介质。针对非阻塞MPI程序的异步性和非确定性,本发明通过为通信操作的不同消息匹配情况和不同交叠执行情况创建不同待探索状态来确保符号执行能够系统遍历MPI程序的路径空间。发明框架中的语句符号执行方法能精确刻画不同类型语句执行所对应的符号化状态迁移,阻塞驱动匹配策略能够有效获取符号执行过程中通信行为的所有可能匹配情况。本发明基于符号执行来系统遍历非阻塞MPI程序的路径空间,在探索程序执行路径时自动检测路径是否发生死锁,直到探索完程序路径空间、发现死锁或者超时。
Description
技术领域
本发明涉及计算机高性能计算的可靠性保证领域,具体涉及一种面向死锁检查的非阻塞MPI程序符号执行方法、系统及介质。
背景技术
现阶段,高性能计算被广泛应用于解决大规模计算问题,例如核模拟和气候模拟。消息传递接口(Message Passing Interface,MPI)凭借着优异的计算性能、良好的可扩展性和可移植性,已经成为高性能计算领域并行程序设计的标准范式。严格地讲MPI是一个库,而不是一种语言,它的并行语言可以基于C、Fortran等语言实现。
图1给出了MPI基本通信操作Comm的定义。为了描述的简洁性,定义忽略了操作中消息和通信域等参数。图1中,表达式e的取值为整型,用来标识操作的目标进程编号,符号r是非阻塞操作的句柄。MPI基本通信操作Comm包括:Ssend(e)发送消息给e号进程,发送进程阻塞直到消息被接收;Send(e)发送消息给e号进程,发送进程阻塞直到消息被拷贝到系统缓冲区;Recv(e)接收e号进程的消息,接收进程阻塞直到消息被接收;Recv(*)接收任意进程的消息,接收进程阻塞直到消息被接收;Barrier为栅栏同步操作,该操作阻塞进程直到所有进程都调用Barrier操作;Wait(r)阻塞进程直到句柄r所标识的非阻塞操作完成;ISend(e,r)发送消息给e号进程,该操作不需要等待消息发送完成立刻返回;IRecv(e,r)接收e号进程的消息,该操作不需要等待消息接收完成立刻返回;IRecv(*,r)接收任意进程的消息,该操作不需要等待消息接收完成立刻返回。
基于所定义的基本通信操作可以扩展支持复杂通信操作,例如聚合通信操作MPI_Scatter和MPI_Gather等。为了描述的简洁性,文中使用send(dst)代表发送消息给dst进程的各种类型发送操作,使用recv(src)表示接收来自src进程消息的各种类型接收操作,当src为*时,表示任意源接收操作。MPI非阻塞通信操作不需要等待通信完成,可以继续执行后续操作,导致通信操作的乱序完成;任意源接收操作的不同次运行可能接收来自不同进程的消息,使得程序执行变得高度不确定。MPI程序所具有的异步性和非确定性特征导致程序容易出错,死锁是MPI程序中的代表性错误。
图2所示MPI C程序运行四个MPI进程。图2中,进程P0、P2和P3都是发送一个消息给P1然后终止(无限系统缓存模式下标准发送Send会立刻返回)。如果输入x不等于'a',进程P1阻塞接收进程P0的消息,否则非阻塞接收任意一个进程发送的消息,最后阻塞接收来自进程P3的消息。显然当输入x不等于'a'时,进程P1会先后接收来自进程P0和P3的消息并顺利终止,不存在死锁。当输入x等于'a'且任意源接收操作IRecv(*,req)匹配来自进程P3的消息时,进程P1的阻塞接收操作Recv(3)没有消息匹配,而其他进程都已经正常终止,发生死锁。因此MPI程序死锁的发生既依赖于程序的输入,也依赖于进程执行的调度策略。
当前MPI程序的死锁检查方法主要分为静态检查方法、动态检查方法和符号化检查方法。静态检查方法分析MPI程序的抽象模型是否存在死锁,受限于自动化程度低和误报率高等问题。动态检查方法基于程序的运行时信息来检查程序是否存在死锁,并不能够有效覆盖程序的输入空间。符号执行使用符号值来运行程序,能够有效覆盖程序的输入空间。传统串行程序的符号执行状态是一个三元组(M,Stat,PC),M是变量到实际值或符号表达式的映射关系;Stat为该状态下一步要执行的语句;PC是路径条件,即从程序入口执行到当前状态符号化变量所产生的约束集合。初始时,M将符号化变量和正常变量分别映射到无约束符号值和实际值,Stat是程序第一条语句,PC为真。符号执行遇到符号化变量的分支语句c时,会为当前状态创建两个状态St和Sf,分别对应于真分支和假分支。对于St,符号执行调用约束求解器来判定PC∧c是否可满足,若可满足则将St的路径条件更新为PC∧c,否则终止St。根据的可满足性,符号执行对Sf采用类似操作。图3给出了一个示例程序和对应的符号执行树,针对左侧示例程序所包含的两条路径(x==100和x≠100),右侧执行树给出2个对应的测试用例x=100和x=1。
对实际MPI程序进行符号执行面临两个主要挑战:(1)如何系统地遍历包含非阻塞和非确定性通信操作的MPI程序的路径空间;(2)如何提高符号执行分析MPI程序的可扩展性。除了分支指令外,MPI程序的路径数目与运行的MPI进程个数和任意源接收的操作个数都成指数级增长。现有MPI程序符号执行方法,即MPISE和TASS,能够在系统遍历程序路径空间的过程中检查程序是否存在死锁,但是都不支持实际MPI程序中广泛存在的非阻塞通信操作。如何实现面向死锁检查的非阻塞MPI程序符号执行,已经成为亟待解决的关键技术问题。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种面向死锁检查的非阻塞MPI程序符号执行方法、系统及介质。本发明基于符号执行技术自动化检测包含非阻塞和非确定性通信操作的实际MPI程序是否存在死锁。本发明提出的MPI语句符号执行能够精确刻画不同类型语句执行所对应的符号化状态迁移,阻塞驱动消息匹配策略能够有效获取MPI程序符号执行过程中消息的所有可能匹配情况。基于语句执行方法和阻塞驱动匹配策略,给出了面向死锁检查的MPI程序符号执行方法,能够自动化检测实际MPI程序中的死锁错误。
为了解决上述技术问题,本发明采用的技术方案为:
一种面向死锁检查的非阻塞MPI程序符号执行方法,实施步骤包括:
1)输入MPI程序、运行进程个数N和符号化变量集合Sym;
2)初始化待探索状态集合Worklist为全局初始化状态init,所述全局初始化状态init为所有进程初始状态的组合;
3)按照状态空间搜索策略从待探索状态集合Worklist中选择一个尚未处理的全局状态作为当前全局状态Sc;
4)按照轮询调度策略,选取待探索状态Sc下的活跃进程i来执行,其中进程i的符号化状态包括该进程的变量映射关系Mi、下一条执行语句Stati、路径条件PCi和进程运行状态F;
5)基于全局状态Sc对进程i的待执行语句Stati进行语句符号执行,根据语句符号执行方法更新进程i的符号执行状态,并判断Sc中所有进程运行状态是否都阻塞或者终止,如果是则跳转至步骤6),否则继续执行步骤4);
6)在全局阻塞状态下进行通信行为的匹配,为通信操作的不同消息匹配情况和不同交叠执行情况创建待探索状态,并加入到Worklist中;根据通信操作的匹配情况更新进程的运行状态及进行死锁检查;
7)判断是否发生死锁、超时或者待探索状态集合Worklist为空,如果是则终止分析,否则,跳转执行步骤3)。
可选地,步骤5)中符号执行活跃进程i的下一条执行语句Stati的详细步骤包括:
5.1)判断下一条执行语句Stati的类型,如果Stati为非阻塞通信操作则执行步骤5.2);如果Stati为阻塞通信操作则跳转执行步骤5.3);否则跳转执行步骤5.4);
5.2)通过序列Seqi来记录进程i流出的通信操作序列,记录方法为将新流出的通信操作拼接在之前流出的操作序列尾部,且保持进程i的运行状态仍为活跃;
5.3)通过序列Seqi来记录进程i流出的通信操作序列,记录方法为将新流出的通信操作拼接在之前流出的操作序列尾部;更新进程i的运行状态为阻塞;
5.4)按照传统符号执行方法执行语句,且保持进程i的运行状态仍为活跃。
可选地,步骤6)中在全局阻塞状态Sc下进行消息匹配和死锁检查,其详细步骤包括:
6.1)初始化用于记录任意源接收操作匹配情况的集合PSW为空;
6.2)匹配获取全局阻塞状态Sc下一对非任意源操作的匹配pairn;
6.3)如果匹配pairn为非空,执行消息匹配pairn并创建新状态Sc’,其中新状态Sc’对应于基于Sc执行消息匹配pairn所带来的状态变化,更新Sc’中匹配对pairn所包含阻塞通信动作所在进程的运行状态为活跃,将新状态Sc’加入到Worklist中并返回);否则,执行步骤6.4);
6.4)针对全局状态Sc匹配任意源接收操作,将匹配结果加入集合PSW;如果集合PSW非空,则基于全局状态Sc为集合PSW中的每一种任意源操作的匹配pairw创建一个相应的新状态Sc’,其中Sc’表示状态Sc执行消息匹配pairw所迁移到的状态,添加新状态Sc’到待探索状态集合Worklist中并返回;否则,执行步骤6.5);
6.5)在该全局阻塞状态下检查是否仍有未终止的进程,若有则报告产生死锁,否则返回。
可选地,步骤6.2)匹配获取全局阻塞状态Sc下一对非任意源操作的匹配pairn时,详细步骤包括:判断每个进程i的通信序列Seqi中是否存在未匹配的栅栏同步操作Barrier,如果成立则返回该栅栏同步操作Barrier匹配;否则按照进程编号i的升序扫描通信序列Seqi,首先判断通信序列Seqi中是否存在等待操作Wait(r)且句柄r所对应的非阻塞通信操作已经完成,如果成立则返回该阻塞等待操作Wait(r)匹配,否则继续判断通信序列Seqi中是否存在能够匹配的消息发送操作send(j)且通信序列Seqj中存在能够匹配的消息接收操作recv(i),如果成立则返回消息发送操作send(j)、消息接收操作recv(i)两者匹配;否则,返回空的匹配。
可选地,步骤6.4)获取给定进程i中任意源接收操作recv(*)的所有匹配的步骤为扫描其他所有进程中已流出且能够匹配的通信操作,检查通信动作是否为send(i),如果是则将该匹配对加入到PSw中。
此外,本发明还提供一种面向死锁检查的非阻塞MPI程序符号执行系统,包括计算机设备,该计算机设备被编程或配置以执行所述面向死锁检查的非阻塞MPI程序符号执行方法的步骤。
此外,本发明还提供一种面向死锁检查的非阻塞MPI程序符号执行系统,包括计算机设备,该计算机设备的存储介质上存储有被编程或配置以执行所述面向死锁检查的非阻塞MPI程序符号执行方法的计算机程序。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行所述面向死锁检查的非阻塞MPI程序符号执行方法的计算机程序。
此外,本发明还提供一种面向死锁检查的非阻塞MPI程序符号执行系统,包括:
输入程序单元,用于输入MPI程序、运行进程个数N和符号化变量集合Sym;
状态初始化程序单元,用于初始化待探索状态集合Worklist为全局初始化状态init,所述全局初始化状态init为所有进程初始状态的组合;
遍历状态选择程序单元,用于按照给定搜索策略(默认深度优先策略)从待探索状态集合Worklist中选择一个尚未处理的全局状态Sc来探索;
进程调度程序单元,用于按照轮询调度策略,选取待探索状态Sc下的活跃进程i,其状态包括变量映射关系Mi、下一条执行语句Stati、进程路径条件PCi和进程运行状态F;
语句符号执行程序单元,用于在全局状态Sc下对进程i的待执行语句Stati进行符号执行,并更新进程的符号化状态;
消息匹配和死锁检查程序单元,用于在全局阻塞状态下对通信行为进行匹配、更新待探索状态集合Worklist和检查探索路径是否发生死锁。
本发明基于符号执行技术自动化检测包含非阻塞和非确定性通信操作的实际MPI程序是否存在死锁,且MPI语句符号执行能够精确刻画不同类型语句执行所对应的符号化状态迁移,阻塞驱动消息匹配策略能够有效获取MPI程序符号执行过程中所有可能的消息匹配情况。基于语句执行方法和阻塞驱动匹配策略,给出了面向死锁检查的MPI程序符号执行方式,能够自动化检测实际MPI程序中的死锁错误。
和现有技术相比,本发明具有下述优点:本发明是第一个面向非阻塞MPI程序的既能覆盖程序输入也能覆盖进程调度策略的符号执行方法,能够有效检查程序是否存在死锁。针对非阻塞MPI程序的异步性和非确定性,本发明通过为通信操作的不同消息匹配情况和不同交叠执行情况创建不同的待探索状态来确保符号执行能够系统遍历MPI程序的路径空间。发明框架中的语句符号执行方法能精确刻画不同类型语句执行所对应的符号化状态迁移,阻塞驱动匹配策略能够有效获取符号执行过程中通信行为所有可能的匹配情况。
附图说明
图1为MPI基本通信操作示意图。
图2为MPI示例程序。
图3为示例C程序及其符号执行树。
图4为本发明实施例方法的基本流程示意图。
图5为本发明实施例中语句符号执行的流程示意图。
图6为本发明实施例中阻塞驱动匹配的流程示意图。
图7为本发明实施例中工具原型图。
具体实施方式
如图4所示,本实施例面向死锁检查的非阻塞MPI程序符号执行方法的实施步骤包括:
1)输入MPI程序(本实施例中以MP表示)、运行进程个数N和符号化变量集合Sym;
2)初始化待探索状态集合Worklist为全局初始化状态init,所述全局初始化状态init为所有进程初始状态的组合,全局初始化状态init中所有进程路径条件均为true,待执行语句均为初始语句,变量被映射为无约束符号变量或者实际值,可表示为:Worklist←{init};
3)按照状态空间搜索策略(默认为深度优先策略)从待探索状态集合Worklist中选择一个尚未处理的全局状态作为当前全局状态Sc,可表示为:Sc←Select(worklist),其中选择当前全局状态Sc的方法可以根据需要采用各种不同的状态空间搜索策略,例如深度优先搜索DFS或者宽度优先搜索BFS等;
4)按照轮询调度策略,选取待探索状态Sc下的活跃进程i来执行,其中进程i的符号化状态包括该进程的变量映射关系Mi(描述变量取值情况)、下一条执行语句Stati、路径条件PCi(描述从程序入口执行到当前状态,符号化输入变量所产生的约束集合)和进程运行状态F(包含终止、阻塞和活跃三种情况),可表示为(Mi,Stati,PCi,F)←Scheduler(Sc);
5)基于全局状态Sc对进程i的待执行语句Stati进行语句符号执行,可表示为Execute(Sc,Stati,PCi,Sym),根据语句符号执行方法更新进程i的符号执行状态,并判断Sc中所有进程运行状态是否都阻塞或者终止,如果是则继续执行步骤6),否则继续执行步骤4);
6)在全局阻塞状态Sc下进行通信行为的匹配(记为Matching(Sc)),为通信操作的不同消息匹配情况和不同交叠执行情况创建待探索状态,并加入到Worklist中;根据通信操作的匹配情况更新进程的运行状态及进行死锁检查;
7)判断是否发生死锁、超时或者待探索状态集合Worklist为空,如果是则终止分析,否则,跳转执行步骤3)。
由于MPI进程拥有独立的存储空间,不同进程之间局部计算语句的执行顺序对于死锁没有影响。为了减少符号执行需要探索的路径空间,本发明提出的轮询进程调度策略会选取待探索全局状态Sc中进程编号最小的活跃进程执行,该进程会一直执行直到阻塞,然后切换到下一个进程号最小的活跃进程执行,直到Sc中所有进程都阻塞或者终止,然后进行消息匹配。
当对运行N个进程的MPI程序符号执行时,一个符号执行全局状态Sc由各个并行MPI进程的局部状态si构成,即Sc=<s0,s1,...si,...>(0≤i<N)。对于i号进程,其状态si是一个四元组(Mi,Stati,PCi,F),其中Mi表示该进程当前的变量取值映射关系,Stati表示该进程下一条要执行的语句,PCi为该进程当前的路径条件,F表示该进程的运行状态(F∈{active,blocked,terminated},分别表示活跃、阻塞和终止状态)。此外,为了能够获取消息匹配的所有可能情况,每个进程都配有一个存储序列Seqi(i为进程号)来记录该进程流出的通信操作序列。符号执行任意一个进程的一条语句都会更新全局状态。
步骤5)中Execute方法给出了符号执行在全局状态Sc下执行i号活跃进程Proci的语句Stati所带来的符号化状态迁移。根据语句Stati的不同类型,符号执行采取不同动作来更新i号进程的状态si。详细步骤包括:
5.1)判断下一条执行语句Stati的类型,如果下一条执行语句Stati为非阻塞通信操作(ISend、IRecv或无限系统缓存模式下的Send)则执行步骤5.2);如果下一条执行语句Stati为阻塞通信操作(Barrier、Wait、Ssend或Recv)则跳转执行步骤5.3);否则,下一条执行语句Stati为非通信语句,跳转执行步骤5.4);
5.2)通过通信序列Seqi来记录进程流出的通信序列,将新流出的通信操作拼接在之前流出的操作序列尾部,可表示为:Seqi←Seqi·<Stati>;返回继续执行后续语句,且保持进程Proci的运行状态仍为活跃;
5.3)通过通信序列Seqi来记录该进程流出的通信序列,且将新流出的通信操作拼接在之前流出的操作序列尾部,可表示为:Seqi←Seqi·<Stati>;更新进程Proci的运行状态为阻塞,可表示为si.F←blocked;当所有进程都阻塞或者终止,使得到达全局阻塞状态时,在全局状态Sc下进行匹配通信操作执行消息的过程并更新通信操作所对应进程的运行状态及进行死锁检查;
5.4)按照传统符号执行方法执行语句,且保持进程Proci的运行状态仍为活跃。
步骤5.4)实际涉及的是处理非通信语句,即按照传统符号执行方法执行该类型语句。对于分支语句c,会调用约束求解器判定在当前路径条件PCi下真分支和假分支是否可行,即PCi∧c和是否可满足,然后为可行分支创建新的符号执行状态,并将状态的路径条件更新为原路径条件与分支条件的与;对于非分支语句,会将语句计算转换为符号表达式上的相关操作,即更新映射关系Mi。
为了保证MPI程序符号执行方法的可靠性,本实施例提出了一种阻塞驱动匹配方法来获取通信行为的所有可能匹配情况。该方法的主要想法是在MPI语义规则下尽可能晚地匹配任意源接收操作。由于非阻塞通信操作的存在,消息的配对可能乱序完成。因此,在MPI语义下优先匹配非任意源操作能够有助于找到任意源接收操作的可能匹配发送操作。
基于MPI标准给出的通信操作完成依赖关系,ready(α,si)描述了操作α在进程i的符号化状态si下能够被匹配的条件:
当α为Wait(r)时,要求si流出的通信操作序列Seqi中句柄r所对应的非阻塞通信操作已被匹配执行完成;
当α为send(k)时,要求Seqi中位于α之前的send(k)操作已被匹配。
当α为recv(k)时,要求Seqi中位于α之前的recv(k)和recv(*)已被匹配。
当α为recv(*)时,一方面,要求Seqi中位于α之前的recv(*)已被匹配;另一方面,如果存在α之前流出的未匹配IRecv(k,r),要求recv(*)不能匹配来自进程k的消息。
给定进程状态si和操作α,通过扫描Seqi序列中操作的匹配状态,能够确定操作α是否能够被匹配,即ready(α,si)是否满足。
本实施例中步骤6)在全局阻塞状态Sc下进行通信操作匹配、匹配对的执行和死锁检查。图6给出了该过程的流程图,详细步骤包括:
6.1)初始化用于记录任意源接收操作匹配情况的集合PSW为空,可表达为PSw←φ;
6.2)匹配获取全局阻塞状态Sc下一对非任意源操作的匹配pairn,可表达为pairn←matchN(Sc);
6.3)如果匹配pairn为非空,执行消息匹配pairn并创建新状态Sc’,其中新状态Sc’对应于基于Sc执行消息匹配pairn所带来的状态变化,更新Sc’中匹配对pairn所包含阻塞通信动作所在进程的运行状态为活跃,将新状态Sc’加入到Worklist中并返回;否则,执行步骤6.4);
6.4)针对全局状态Sc匹配任意源接收操作,将匹配结果加入集合PSW,可表达为PSw←matchw(Sc);如果集合PSW非空,则为集合PSW中的每一种任意源操作的匹配pairw基于全局状态Sc创建一个相应的新状态Sc’,其中Sc’表示状态Sc执行消息匹配pairw所迁移到的状态,添加新状态Sc’到待探索状态集合Worklist中,可表达为Sc′←fork(Sc,pairw)和Worklist.insert(Sc′),并返回;否则,执行步骤6.5);
6.5)在该全局阻塞状态下检查是否仍有未终止的进程,若有则报告产生死锁,否则返回。
本实施例中,步骤6.2)匹配获取全局状态Sc下一对非任意源操作的匹配pairn时采用的函数为matchn函数,针对每个进程i进行匹配的详细步骤包括:判断通信序列Seqi中存在栅栏同步操作Barrier且栅栏同步操作Barrier未匹配(且Barrier未匹配)是否成立,如果成立则返回该栅栏同步操作Barrier作为匹配;否则按照升序扫描通信序列Seqi,首先判断通信序列Seqi中是否存在等待操作Wait(r)且句柄r所对应的非阻塞通信操作已经完成(且ready(Wait(r),si)),如果成立则返回该阻塞等待操作Wait(r)匹配,否则继续判断通信序列Seqi中是否存在能够匹配的消息发送操作send(j) 且通信序列Seqj中存在能够匹配的消息接收操作recv(i) 如果成立则返回消息发送操作send(j)、消息接收操作recv(i)两者匹配;否则,返回空的匹配。本实施例中,步骤6.4)中针对集合PSW中的每一对匹配任意源操作的匹配pairw具体采用函数matchw实现,具体是指对于进程i的任意源接收操作recv(*),获取其他所有进程中流出的且能够匹配的send(i)。函数matchw返回当前状态下任意源接收操作的匹配情况,对于进程i的任意源接收操作recv(*),函数matchw的基本思想是获取其他所有进程中流出的且能够匹配的send(i),函数matchw的匹配集合的计算公式为{b∈Seqj,ready(a,si)∧ready(b,sj)∧match(a,b)∧b=recv(*)},其中ready(a,si)∧ready(b,sj)表示流出的消息发送和通信操作在MPI语义下能够被匹配pairw。为了保证符号执行不漏掉可能的进程调度策略,对于函数matchw返回的匹配集合PSw中的每一种匹配,通过状态创建操作fork都会为其创建一个相应的状态(fork(Sc,pairw)),并将其添加到符号执行待探索的状态集合worklist中(Worklist.insert(Sc′))。当Sc状态下存在多个任意源接收操作可以被匹配时,符号执行会为它们之间的每一种匹配顺序创建一个状态。最终,考虑到消息匹配发生在全局阻塞状态,因此当Matching方法不能获取任何匹配情况时(pairn和PSw均为空),表示死锁发生,此时符号化分析会终止并报告死锁。
本实施例面向死锁检查的非阻塞MPI程序符号执行方法基于符号执行平台Cloud9对MPI程序符号执行方法进行了实现,本发明所实现的工具原型如图7所示;MPI C程序通过编译器Clang得到LLVM字节码,然后结合MPI库Azequia和进程数N一起输入符号执行引擎以执行本实施例面向死锁检查的非阻塞MPI程序符号执行方法,最终输出死锁分析结果。Cloud9是一个并行开源符号执行引擎,能够支持POSIX环境和多线程程序。为了有效利用Cloud9对于多线程程序的支持,本发明所实现的符号执行引擎采用多线程MPI库Azequia来作为符号执行的外部MPI环境模型(提供MPI程序中所调用通信API的模拟实现),并且实现了对线程全局变量的支持。符号执行引擎系统地遍历程序的路径空间,当检测到死锁时,会终止路径空间探索,并生成能够触发该死锁的测试用例。测试用例包括程序的输入和MPI进程执行的调度策略。我们已经将所实现的工具原型应用于实际MPI C程序的死锁检查分析,目前能够支持万行级MPI C程序运行数十个并行进程的自动化死锁检查。
此外,本实施例还提供一种面向死锁检查的非阻塞MPI程序符号执行系统,包括计算机设备,该计算机设备被编程或配置以执行本实施例前述面向死锁检查的非阻塞MPI程序符号执行方法的步骤。
此外,本实施例还提供一种面向死锁检查的非阻塞MPI程序符号执行系统,包括计算机设备,该计算机设备的存储介质上存储有被编程或配置以执行本实施例前述面向死锁检查的非阻塞MPI程序符号执行方法的计算机程序。
此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行本实施例前述面向死锁检查的非阻塞MPI程序符号执行方法的计算机程序。
此外,本实施例还提供一种面向死锁检查的非阻塞MPI程序符号执行系统,包括:
输入程序单元,用于输入MPI程序、运行进程个数N和符号化变量集合Sym;
状态初始化程序单元,用于初始化待探索状态集合Worklist为全局初始化状态init,所述全局初始化状态init为所有进程初始状态的组合;
遍历状态选择程序单元,用于按照给定搜索策略(默认深度优先策略)从待探索状态集合Worklist中选择一个尚未处理的全局状态Sc来探索;
进程调度程序单元,用于按照轮询调度策略,选取待探索状态Sc下的活跃进程i,其状态包括变量映射关系Mi、下一条执行语句Stati、进程路径条件PCi和进程运行状态Fi;
语句符号执行程序单元,用于在全局状态Sc下对进程i的待执行语句Stati进行符号执行,并更新进程的符号化状态;
消息匹配和死锁检查程序单元,用于在全局阻塞状态下对通信行为进行匹配、更新待探索状态集合Worklist和检查探索路径是否发生死锁。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种面向死锁检查的非阻塞MPI程序符号执行方法,其特征在于实施步骤包括:
1)输入MPI程序、运行进程个数N和符号化变量集合Sym;
2)初始化待探索状态集合Worklist为全局初始化状态init,所述全局初始化状态init为所有进程初始状态的组合;
3)按照状态空间搜索策略从待探索状态集合Worklist中选出一个尚未处理的全局状态作为当前全局状态Sc;
4)按照轮询调度策略,选取待探索状态Sc下的活跃进程i来执行,其中进程i的符号化状态包括该进程的变量映射关系Mi、待执行语句Stati、路径约束条件PCi和进程运行状态F;
5)基于全局状态Sc对进程i的待执行语句Stati进行语句符号执行,根据语句符号执行方法更新进程i的符号执行状态,并判断是否进入全局阻塞状态,即Sc中所有进程运行状态是否都阻塞或者终止,如果是则跳转至步骤6),否则继续执行步骤4);
6)在全局阻塞状态下进行通信行为的匹配,为通信操作的不同消息匹配情况和不同交叠执行情况创建待探索状态,并加入到Worklist中;根据通信操作的匹配情况更新进程的运行状态及进行死锁检查;
7)判断是否发生死锁、超时或者待探索状态集合Worklist为空,如果是则终止分析,否则,跳转执行步骤3);
步骤6)中在全局阻塞状态Sc下进行消息匹配和死锁检查,其详细步骤包括:
6.1)初始化用于记录任意源接收操作匹配情况的集合PSW为空;
6.2)匹配获取全局阻塞状态Sc下一对非任意源操作的匹配pairn;
6.3)如果匹配pairn为非空,执行消息匹配pairn并创建新状态Sc’,其中新状态Sc’对应于基于Sc执行消息匹配pairn所带来的状态变化,更新Sc’中匹配对pairn所包含阻塞通信动作所在进程的运行状态为活跃,将新状态Sc’加入到Worklist中并返回;否则,执行步骤6.4);
6.4)针对全局状态Sc匹配任意源接收操作,将匹配结果加入集合PSW;如果集合PSW非空,则基于全局状态Sc为集合PSW中的每一种任意源操作的匹配pairw创建一个相应的新状态Sc’,其中Sc’表示状态Sc执行消息匹配pairw所迁移到的状态,添加新状态Sc’到待探索状态集合Worklist中并返回;否则,执行步骤6.5);
6.5)在该全局阻塞状态下检查是否仍有未终止的进程,若有则报告产生死锁,否则返回。
2.根据权利要求1所述的面向死锁检查的非阻塞MPI程序符号执行方法,其特征在于,步骤5)中符号执行活跃进程i的待执行语句Stati的详细步骤包括:
5.1)判断待执行语句Stati的类型,如果Stati为非阻塞通信操作则执行步骤5.2);如果Stati为阻塞通信操作则跳转执行步骤5.3);否则跳转执行步骤5.4);
5.2)通过序列Seqi来记录进程i流出的通信操作序列,记录方法为将新流出的通信操作拼接在之前流出的操作序列尾部,且保持进程i的运行状态仍为活跃;
5.3)通过序列Seqi来记录进程i流出的通信操作序列,记录方法为将新流出的通信操作拼接在之前流出的操作序列尾部;更新进程i的运行状态为阻塞;
5.4)按照传统符号执行方法执行语句,且保持进程i的运行状态仍为活跃。
3.根据权利要求1所述的面向死锁检查的非阻塞MPI程序符号执行方法,其特征在于,步骤6.2)匹配获取全局阻塞状态Sc下一对非任意源操作的匹配pairn,详细步骤包括:判断每个进程i的通信序列Seqi中是否存在未匹配的栅栏同步操作Barrier,如果成立则返回该栅栏同步操作Barrier作为匹配;否则按照进程编号i的升序扫描通信序列Seqi,首先判断通信序列Seqi中是否存在等待操作Wait(r)且句柄r所对应的非阻塞通信操作已经完成,如果成立则返回该阻塞等待操作Wait(r)作为匹配,否则继续判断通信序列Seqi中是否存在能够匹配的消息发送操作send(j)且通信序列Seqj中存在能够匹配的消息接收操作recv(i),如果成立则返回消息发送操作send(j)和消息接收操作recv(i)作为匹配;否则,返回空的匹配。
4.根据权利要求1所述的面向死锁检查的非阻塞MPI程序符号执行方法,其特征在于,步骤6.4)中匹配获取全局阻塞状态Sc下任意源接收操作的匹配集合,对于一个给定任意源接收操作,会扫描所有其他进程流出的通信序列来获取MPI语义下能够与之匹配的发送操作,当全局阻塞状态Sc下存在多个任意源接收操作可以被匹配时,符号执行会为它们之间的每一种匹配顺序创建一个待探索状态。
5.一种面向死锁检查的非阻塞MPI程序符号执行系统,包括计算机设备,其特征在于,该计算机设备被编程或配置以执行权利要求1-4中任意一项所述面向死锁检查的非阻塞MPI程序符号执行方法的步骤。
6.一种面向死锁检查的非阻塞MPI程序符号执行系统,包括计算机设备,其特征在于,该计算机设备的存储介质上存储有被编程或配置以执行权利要求1-4中任意一项所述面向死锁检查的非阻塞MPI程序符号执行方法的计算机程序。
7.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程或配置以执行权利要求1-4中任意一项所述面向死锁检查的非阻塞MPI程序符号执行方法的计算机程序。
8.一种面向死锁检查的非阻塞MPI程序符号执行系统,其特征在于包括:
输入程序单元,用于输入MPI程序、运行进程个数N和符号化变量集合Sym;
状态初始化程序单元,用于初始化待探索状态集合Worklist为全局初始化状态init,所述全局初始化状态init为所有进程初始状态的组合;
遍历状态选择程序单元,用于按照给定搜索策略从待探索状态集合Worklist中选择一个尚未处理的全局状态Sc来探索;
进程调度程序单元,用于按照轮询调度策略,选取待探索状态Sc下的活跃进程i,其状态包括变量映射关系Mi、下一条执行语句Stati、进程路径条件PCi和进程运行状态Fi;
语句符号执行程序单元,用于在全局状态Sc下对进程i的待执行语句Stati进行符号执行,并更新进程的符号化状态;
消息匹配和死锁检查程序单元,用于在全局阻塞状态下对通信行为进行匹配、更新待探索状态集合Worklist和检查探索路径是否发生死锁;
语句符号执行程序单元在全局阻塞状态Sc下进行消息匹配和死锁检查的详细步骤包括:
6.1)初始化用于记录任意源接收操作匹配情况的集合PSW为空;
6.2)匹配获取全局阻塞状态Sc下一对非任意源操作的匹配pairn;
6.3)如果匹配pairn为非空,执行消息匹配pairn并创建新状态Sc’,其中新状态Sc’对应于基于Sc执行消息匹配pairn所带来的状态变化,更新Sc’中匹配对pairn所包含阻塞通信动作所在进程的运行状态为活跃,将新状态Sc’加入到Worklist中并返回;否则,执行步骤6.4);
6.4)针对全局状态Sc匹配任意源接收操作,将匹配结果加入集合PSW;如果集合PSW非空,则基于全局状态Sc为集合PSW中的每一种任意源操作的匹配pairw创建一个相应的新状态Sc’,其中Sc’表示状态Sc执行消息匹配pairw所迁移到的状态,添加新状态Sc’到待探索状态集合Worklist中并返回;否则,执行步骤6.5);
6.5)在该全局阻塞状态下检查是否仍有未终止的进程,若有则报告产生死锁,否则返回。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910838017.7A CN110554925B (zh) | 2019-09-05 | 2019-09-05 | 面向死锁检查的非阻塞mpi程序符号执行方法、系统及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910838017.7A CN110554925B (zh) | 2019-09-05 | 2019-09-05 | 面向死锁检查的非阻塞mpi程序符号执行方法、系统及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110554925A CN110554925A (zh) | 2019-12-10 |
CN110554925B true CN110554925B (zh) | 2022-02-08 |
Family
ID=68739208
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910838017.7A Active CN110554925B (zh) | 2019-09-05 | 2019-09-05 | 面向死锁检查的非阻塞mpi程序符号执行方法、系统及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110554925B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115617533B (zh) * | 2022-12-14 | 2023-03-10 | 上海登临科技有限公司 | 异构计算中进程切换管理方法及计算装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8966453B1 (en) * | 2010-11-24 | 2015-02-24 | ECOLE POLYTECHNIQUE FéDéRALE DE LAUSANNE | Automatic generation of program execution that reaches a given failure point |
CN104536877A (zh) * | 2014-11-28 | 2015-04-22 | 江苏苏测软件检测技术有限公司 | 一种基于混合策略的测试数据生成方法 |
-
2019
- 2019-09-05 CN CN201910838017.7A patent/CN110554925B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8966453B1 (en) * | 2010-11-24 | 2015-02-24 | ECOLE POLYTECHNIQUE FéDéRALE DE LAUSANNE | Automatic generation of program execution that reaches a given failure point |
CN104536877A (zh) * | 2014-11-28 | 2015-04-22 | 江苏苏测软件检测技术有限公司 | 一种基于混合策略的测试数据生成方法 |
Non-Patent Citations (3)
Title |
---|
Combining Symbolic Execution and Model Checking to Verify MPI Programs;Hengbiao Yu;《2018 ACM/IEEE 40th International Conference on Software Engineering:Companion Proceedings》;20180830;全文 * |
Symbolic Verification of Regular Properties;Hengbiao Yu,Zhenbang Chen,Ji Wang,Zhendong Su,Wei Dong;《2018 ACM/IEEE 40th International Conference on Software Engineering》;20180903;全文 * |
基于符号执行的MPI程序分析与验证技术研究;傅先进;《中国博士学位论文全文数据库》;20171215(第12期);正文第2-3章 * |
Also Published As
Publication number | Publication date |
---|---|
CN110554925A (zh) | 2019-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426723B (zh) | 使用释放后内存的检测方法、系统、设备及存储介质 | |
EP2420931B1 (en) | Solving hybrid constraints to generate test cases for validating a software module | |
EP2407887B1 (en) | Solving hybrid constraints to validate specification requirements of a software module | |
EP2420932B1 (en) | Solving hybrid constraints to validate a security software module for detecting injection attacks | |
US8516443B2 (en) | Context-sensitive analysis framework using value flows | |
EP2128769B1 (en) | Method, apparatus, and system for automatic test generation from statecharts | |
Zheng et al. | Z3str2: an efficient solver for strings, regular expressions, and length constraints | |
De Leoni et al. | A holistic approach for soundness verification of decision-aware process models | |
Deligiannis et al. | Asynchronous programming, analysis and testing with state machines | |
US8380483B2 (en) | Inter-procedural dataflow analysis of parameterized concurrent software | |
Holzmann | Explicit-state model checking | |
US20220335135A1 (en) | Vulnerability analysis and reporting for embedded systems | |
Lopez et al. | Multiverse debugging: Non-deterministic debugging for non-deterministic programs | |
CN110554925B (zh) | 面向死锁检查的非阻塞mpi程序符号执行方法、系统及介质 | |
CN110543353B (zh) | 结合符号执行和路径模型检验的mpi程序验证方法、系统及介质 | |
US11934835B2 (en) | Computer system and method for validation of parallelized computer programs | |
Křena et al. | Automated formal analysis and verification: an overview | |
Weng et al. | Argus: Debugging performance issues in modern desktop applications with annotated causal tracing | |
US11321218B1 (en) | Automated generation of source code models from machine code for code analysis | |
Derevenetc | Robustness against relaxed memory models | |
Deniz et al. | Verification and coverage of message passing multicore applications | |
US8572594B2 (en) | Invasion analysis to identify open types | |
Torres Lopez et al. | Multiverse Debugging: Non-deterministic Debugging for Non-deterministic Programs | |
Mohamed et al. | A control flow representation for component-based software reliability analysis | |
Albert et al. | A CLP heap solver for test case generation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |