基于应用逻辑序的并行程序调试方法和装置的制作方法

文档序号:6380811阅读:245来源:国知局
专利名称:基于应用逻辑序的并行程序调试方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,特别涉及一种基于应用逻辑序的并行程序调试方法和装置。
背景技术
当前并行计算已成为很多科研生产领域的重要支撑,成为生产力发展水平的标志,但是并行计算依赖的载体,即并行程序却缺乏有效的软件调试工具,严重影响了高性能计算机利用率和并行计算水平的提高。并行程序目前主要采用串行程序的调试方法,即断点调试,依赖于手工操作,效率低,要求对并行支撑环境的实现原理和细节有相当的理解, 因为这种调试方法最初是计算机程序员提出的方法。非计算机专业的应用领域人员一般采用在程序中加打印的方法进行调试,这种调试方法的缺陷是每个并行任务只能打印自己的数据,无法和系统支撑环境相联系,结果是当发现数据有错时,不知其所以然;而且对于大型复杂并行程序,从很多并行任务的打印信息中分析出错逻辑是一件工作量浩大的事。
有一种逻辑序理论(请参考K. Mani Chandy and Leslie Lamport. Distributedsnapshots determining global states of distributed systems. ACM Trans. Comput. Syst. ,3(1) 63-75,1985.)为确定性再现并行程序的执行过程,缩小问题搜索空间提供了一种思路。计算机人员根据该理论,以并行任务之间的交互事件来确定全局逻辑序,但是在实际应用中,随着并行程序中通信与计算比、程序运行时间的增加,这种逻辑序的信息量快速增长,导致逻辑序的跟踪记录、分析重放的开销很大。同时在缺失程序语义的情况下,这种逻辑序很难分析归纳,难以支持错误定位。
EntusTotalview和gnu gdb是两个应用较广泛的调试工具,除了延用断点调试的方法以外,还提供了一种逆向调试方法以指令级单步的方式执行程序,同时跟踪记录程序的每一条指令对内存和寄存器的修改,然后可以用断点调试的方法跟踪程序逆向执行过程,在逆向执行时倒序恢复每一条指令改写的寄存器和内存单元。但这种方法也不一定适合并行程序,主要缺陷是1.逆向执行逻辑上关联的并行任务比较困难;2.每执行一条指令都暂停一次,程序执行时间大大延长,如果出错逻辑是一个执行时间比较长的过程,那么调试开销会相当大;3.仍然需要长时间占用并行计算资源,进行手工操作调试。发明内容
本发明技术方案要解决的技术问题是如何有效地验证并行程序的语义逻辑的正确性。
为解决上述技术问题,本发明技术方案提供一种基于应用逻辑序的并行程序调试方法,包括
定义数据链{x,y, L,A},其中,X为链号,y定义为应用逻辑序,L表示应用系统对物理量的逻辑行为的集合,L = ILi I i = 0,1,. . .,n},i为逻辑行为出现次序的自然序号, Li = Idj I j = 0,1,. . .,m-1},Li表示并行程序中一个程序模块对该物理量的逻辑行为,Clj为Li对应的逻辑行为涉及的程序变量,j为程序变量的计数;n为逻辑行为的总数,m为Li 对应的逻辑行为中与物理量关联的程序变量的数量,A为正确性验证算法,所述应用逻辑序为迭代步序或数据流序;
按照所述数据链的定义跟踪所述并行程序运行时所述程序变量的数据,以所述正确性验证算法验证所述程序变量的数据并记录验证结果;
在所述并行程序运行结束或异常退出后,重放所记录的验证结果。
可选的,所述Clj = {变量名,数据类型,长度,源程序名,行号},所述调试方法还包括在验证结果揭示所述程序变量的数据为无效数据时,通过所述源程序名和行号定位产生所述无效数据的程序位置。
可选的,所述并行程序的重放调试方法还包括记录所述并行程序运行时所述程序变量的数据;重放所记录的所述程序变量的数据。
可选的,所述物理量与链号一一对应。
为解决上述技术问题,本发明技术方案还提供一种基于应用逻辑序的并行程序调试方法,包括
定义数据链{x,y,L},其中,X为链号,y定义为应用逻辑序,L表示应用系统对物理量的逻辑行为的集合,L = ILi I i = 0,1,. . .,n},i为逻辑行为出现次序的自然序号,Li ={dj I j = 0,1,. . .,m-l},Li表示并行程序中一个程序模块对该物理量的逻辑行为,dj为 Li对应的逻辑行为涉及的程序变量,j为程序变量的计数;n为逻辑行为的总数,m为Li对应的逻辑行为中与物理量关联的程序变量的数量,A为正确性验证算法,所述应用逻辑序为迭代步序或数据流序;
按照所述数据链的定义跟踪并记录所述并行程序运行时所述程序变量的数据;
在所述并行程序运行结束或异常退出后,重放所记录的所述程序变量的数据。
可选的,所述的并行程序的重放调试方法还包括在重放所记录的所述程序变量的数据后,通过正确性验证算法验证所述程序变量的数据。
可选的,所述dj = {变量名,数据类型,长度,源程序名,行号},所述调试方法还包括在验证结果揭示所述程序变量的数据为无效数据时,通过所述源程序名和行号定位产生所述无效数据的程序位置。
可选的,所述物理量与链号一一对应。
与现有技术相比,上述技术方案以迭代步或数据流的自然顺序为逻辑序,以迭代步为序可以跟踪实际物理量随模拟时间的计算过程,以数据流为序可以跟踪模式程序协同并行的执行情况,从而分析相关模式程序之间的相互作用。这种基于应用层面的重放调试方案,由于应用层面是并行计算中最上层最宏观的层面,相比于现有映射到底层的进程或线程之间的交互而需要记录巨量的逻辑序信息,逻辑序信息大大减少,从而节省了存储和分析的开销。
进一步,由于应用层面是并行计算中最上层最宏观的层面,逻辑序的确定和分析是开放的,可以结合程序语义和应用背景定义数据链,并根据跟踪到的逻辑序信息分析逻辑序,因此有利于程序的错误定位。






阅;
图意图
具体实施方式
由于并行程序的语义复杂,不仅包含任务本身的逻辑,还包含并行执行的任务之间、甚至多个并行程序之间的交互逻辑,两种逻辑交织在一起,导致一种逻辑出错后程序可能会继续执行一段时间,在一个似乎不相干的逻辑上报出错误,甚至运行到结束,但是计算结果不正确。所以验证并行程序的正确性必须结合程序的两种逻辑行为。
本发明的技术思路是基于一种描述并行程序两种逻辑的抽象模型,建立应用系统物理量和并行程序变量的关联,结合应用语义有组织地验证程序变量的正确取值,进而验证并行程序的语义逻辑。对并行程序的抽象不能单纯从计算机编程理论出发,这样难以结合应用系统的语义,而且在计算机并行支撑环境层面的交互事件有巨量的逻辑序信息量, 不利于存储和分析。另一方面,当前编译器对并行程序语义进行静态分析的研究遇到不少难解问题,无法准确地描述并行程序的整体语义;现有的重放调试和逆向调试方法开销大, 缺失程序语义,所有这些方法都存在局限性,难以对应用系统的复杂并行程序进行错误分析和定位。
发明人对已有应用课题的编程模型进行了分析,以地学研究中的一个典型课题一区域气象系统模型(CCSM,Community Climate System Model)为例,请参考图I,由4个并行的地学模块(海洋、大气、路面、冰川)在4组不相交的处理器集上,每个迭代步(一次迭代/循环)通过一个耦合器程序交换边界数据,例如洋流、风量等物理量,耦合器用来将边界数据重新映射到不同的处理器集上,图I示例性地描绘了各模块之间的一段时序图, 其中纵向的箭头表示模块之间的数据交换,如果编程正确,那么数据交换引起的相关性将使各处理器集上每步的计算保持协调一致。这种多程序多数据(MPMD, Multiple Program Multiple Data)并行方式是现在并行应用开发的一种趋势,使得各领域分支可以相对较独立地发展。
从并行编程的角度看,很多应用课题可抽象为这样的程序模型时间轴上有一段程序多次迭代(循环执行),如图2所示;空间轴上是有两个层次的交互,高层主要是在不同的模式程序(地学模块)之间交换边界数据,底层是在独立的进程之间同步通信,在同一进程内的共享线程之间进行同步通信。当然实际程序的迭代过程很复杂,随着并行规模的变化,交互的拓扑结构会改变。
现有实验的基于逻辑序的重放中,逻辑序的信息量和信息内容对用户透明,脱离程序语义,由并行库的调试版支持逻辑序的跟踪记录。例如支持重放的消息传递接口(MPI, Message Passing Interface)库调试版,在程序运行时跟踪记录库内部的消息收发事件序,但是用户不熟悉MPI实现,也不可能从MPI内部实现来分析应用课题的正确性。
基于上述分析,发明人提出了一种基于应用逻辑序的重放调试方案,其中,逻辑序是指并行任务(并行程序)之间的相对顺序,应用逻辑序是基于应用层的逻辑序,按照迭代步的顺序(迭代步序)或应用层面的数据交换过程的顺序(数据流序)跟踪并行程序并记录逻辑序信息,这里提出的应用逻辑序以迭代步或数据流的自然顺序为逻辑序,以迭代步为序可以跟踪实际物理量随模拟时间的计算过程,以数据流为序可以跟踪模式程序协同并行的执行情况,从而分析相关模式程序之间的相互作用。这种基于应用层面的重放调试方案,由于应用层面是并行计算中最上层最宏观的层面,相对于现有映射到底层的进程或线程之间的交互而需要记录巨量的逻辑序信息,节省了存储和分析的开销。下面结合实施例对本发明技术方案进行详细说明。
如图3所示的本实施例的基于应用逻辑序的并行程序调试方法,首先执行步骤 S11,定义数据链{x,y,L,A}。
所述数据链抽象描述复杂并行程序的语义逻辑,其中,X为链号,y定义为应用逻辑序,L表示应用系统对某一物理量的逻辑行为的集合,L也称为逻辑分段集合,即L = ILi I i = 0,1,. . .,n},i为逻辑行为出现次序的自然序号A为逻辑分段,表示并行程序中一个程序模块对该物理量的逻辑行为,即Li = {dj I j = 0,1,. . . ,m-l},dj为Li对应的逻辑行为具体涉及的程序变量,j为程序变量的计数,dj无序;n为最后一个逻辑行为的序号,即逻辑行为的总数,m为Li对应的逻辑行为中(与物理量关联的)程序变量的数量。A为正确性验证算法,简单的正确性验证算法可以是对一个变量的判断条件,复杂的正确性验证算法可以是另一个独立的程序,对一组4进行处理,输出一个数据可视化图形。所述应用逻辑序为迭代步序或数据流序;一个并行程序可定义多条数据链,MPMD并行程序可定义跨越多个程序的数据链。
实际应用时,请结合参考图4,首先需要确定逻辑序可以为用户提供一个展示源代码的调试界面,用户通过调试界面定义数据链,选择描述物理量的程序变量,并确定哪种应用逻辑序。为了便于重放和正确性验证,一个物理量定义一条数据链,有一个唯一确定的链号,因此物理量与链号是一一对应。一条数据链分为若干逻辑分段,即L= (Lji = O, I,. . . , n}, Li = {dj I j = O, I,. . . , m-l}, Li对应程序块的逻辑分段,d」对应程序变量,d」= {变量名,数据类型,长度,源程序名,行号}。
例如以图I所示CCSM模型为例,每个独立运行的模块具有各自的物理量集合,它们之间需要通过耦合器进行边界数据交换温度、气压、风、反照波、水蒸汽等信息,耦合器完成两种模块的二维格点网之间的物理量数据变换。为了方便交换,模块在程序设计时约定了一种数据对象bundle,可存储各种并行处理的(向量)数组数据,它含有一个字符串表示数组的变量名称,和一个指针指向数据内容,bundle对象还定义了合并、分解、诊断向量数据的方法。我们发现,各模块之间交换数据有各自的周期,例如模拟时间一周或一天,而且每次迭代交换一批相同的物理量,这为调试软件设计带来了方便。定义大气和海洋之间的一次热通量(heat flux)交换的数据链为{1,数据流序,L,A},
设计一个调试界面,其中显示源码或可视化模式程序的模块结构,给程序块编号,用户选择与物理量相关的编号,定义程序块的逻辑行为,即程序块作用的变量集合
L = {L0, L1, L2, L3I,L0为大气(atm)完成一步模拟计算时的边界数据,L1为耦合器(cpl)接收大气边界数据,L2为耦合器完成变换,L3为海洋(ocn)接收大气边界数据,
L0 = {a2c_lwdn, a2c_rainc, a2c_rainl, a2c_snowc, a2c_snowl, a2c_swndr, a2c_ swvdr, a2c_swndf, a2c_swvdf, a2c_swnet},
L1 = {Con_Xa2c% bundle},
L2= {Con_Xc2o% bundle},
L3 = {c2o_ifrac, c2o_press, c2o_duul0, c2o_taux, c2o_tauy, c2o_swnet, c2o_ lat, c2o_sen, c2o_lwup, c2o_lwdn, c2o_melth, c2o_salt, c2o_prec, c2o_snow, c2o_rain, c2o_evap, c2o_meltw, c2o_roff}。
正确性验证算法A可以根据物理量的实际意义和程序输入来实现,例如,计算各并行任务的变量4的均方差看是否满足精度要求,或者通过4计算得到的物理量是否在有效范围内,或者输出到程序中的另一个函数,按照算法进行计算验证。调试软件需要从并行任务的独立地址空间收集数据,再进行正确性验证。
实际上,数据链是并行程序的语义逻辑的抽象模型,每一条数据链表示一个物理量的用户想特别验证的逻辑,若干数据链就构成了用户想验证其正确性的整个并行程序的逻辑。迭代步序表示任务自身的语义逻辑,数据流序表示并行执行的任务之间的语义逻辑, 目前只有编写移植并行程序的用户才能清楚地描述这个模型,编译器还不能精确地分析出来。有了这个数据链代表的应用模型,就可以结合计算机的编程模型理论,进一步验证程序的正确性,Li的描述建立了一个程序块的若干变量与物理量的联系,基于Li和A,就能够开发软件对这些变量进行局部的预分析,因为一个独立的程序变量很难说有合法的取值,目前基本没有软件调试方法建立这样的模型,它们大多强调对应用系统透明的调试方法,它们分析最底层的事件关系。本发明基于数据链抽象,按物理意义组合最上层的程序变量,然后结合最底层的并行编程理论,开发调试工具从并行执行的任务空间中收集这组变量的数据,这个按照数据链定义收集数据的过程叫数据链的跟踪。基于跟踪信息,结合有物理意义的验证算法A,验证数据链的逻辑,并将跟踪信息和验证结果回放的过程叫重放(replay)。 调试工具的实现与并行编程模型有关,具有独立地址空间的并行任务,对于每一个程序变量,需要以相同的虚地址从不同地址空间收集并整合;对于共享地址空间的并行任务,则从主任务空间获取,因此要开发收集数据的插件,集成在这两种编程库中。
请继续参考图3,接着执行步骤S12,按照所述数据链的定义跟踪所述并行程序运行时所述程序变量的数据,以所述正确性验证算法验证所述程序变量的数据并记录验证结果O
实际实施时,请结合参考图4,为实现跟踪,调试软件将自动在并行程序的主函数入口处插入trace_init函数调用,在1^对应的程序位置(源程序名和行号)后插入跟踪记录的函数调用trace (X, y, Li, A),代入函数时,Li实际上编号(如Lc^LpL2或L3), A是一个函数地址,如果没有验证条件就是空地址,重新编译连接程序生成调试版。在产生可执行程序后,分析出变量的数据类型、地址、长度等调试信息,放在约定的调试信息文件F中,调试信息文件F可以存储在逻辑序信息库中。
程序运行先执行trace_init O,从文件F中读入变量调试信息,得到程序变量dj的地址、长度和类型,在程序执行过程中执行trace函数,收集保存所述并行程序运行时所述程序变量Clj的数据,以正确性验证算法A验证Li的逻辑,并记录验证结果。验证结果可以包括程序变量Clj的数据取值是否有效,如果程序变量Clj的数据能够通过正确性验证算法A的验证,则为有效数据,否则为无效数据;验证结果还可以包括利用正确性验证算法A 对程序变量4的数据进行计算得到的计算结果。验证结果可以记录在逻辑序信息库中,其中,逻辑序信息包括验证结果。
进一步,可以不需要全部记录程序每一次迭代的逻辑信息,因为全部记录的空间开销太大,用户可以设置一个阈值,例如50,这样调试软件的跟踪机制将自动覆盖前面的逻辑信息,仅在信息库中保留最近50步的逻辑序信息和验证结果。
有的物理量可以在跟踪过程中通过正确性验证算法同时分析验证,而有的物理量只能在重放时全面分析相关的数据链,才能验证是否正确有效,因此在这种情况下,在执行步骤S12时,还记录所述并行程序运行时所述程序变量的数据,也就是在跟踪到所述并行程序运行时所述程序变量的数据后,还将跟踪到的程序变量的数据记录在逻辑序信息库中,逻辑序信息还可以包括跟踪到的程序变量的数据。
请继续参考图3,接着执行步骤S13,在所述并行程序运行结束或异常退出后,重放所记录的验证结果。
具体来说,在所述并行程序运行结束或异常退出后,按照用户的要求,从逻辑序信息库读取指定迭代步的逻辑序信息,展示数据链各段逻辑的验证结果和对应的变量内容, 以便最快地找出有逻辑错误的迭代步和程序块。例如先显示记录的最后一步(如第50步) 的数据链,发现Ltl的验证结果有逻辑错误,于是逆向展示第49步、48步的数据链逻辑。
在重放时,可以选择显示其中的某次或某几次迭代步,也可以选择显示其中的某个或某几个数据段,或某个或某几个程序变量。此外,如果步骤S12同时记录了程序变量的数据,则步骤S13还重放所记录的程序变量的数据。
进一步,请参考图4,本实施例的并行程序调试方法还可以包括错误定位,即在验证结果揭示所述程序变量的数据为无效数据(或者说程序变量的数据取值无效)时,通过所述程序变量对应的源程序名和行号定位产生所述无效数据的程序位置。例如最后找到是第35步L2首次产生逻辑错误,是其中dj的数据内容有错,然后在第36步产生Ltl的逻辑错,由于程序变量的定义为4 = {变量名,数据类型,长度,源程序名,行号},因此可以根据无效的程序变量4所对应的源程序名和行号定位到错误的程序语句,这样用户就能够很快地定位第35步L2所在的程序块,从而把一个大而复杂的逻辑问题定位到具体的小块程序和特定的模拟时间段,相对于现有的那些调试工具,用户可能需要对每个任务逐行地执行程序代码,我们这种调试方法可显著提高并行程序调试的成功率。进一步的调试可以转化为第35步出错变量Clj与什么数据有关,这些数据的计算是否正确。也可能用户结合程序块的具体实现和相关专业资料、输入数据,就能推测问题原因。修改程序代码或调整输入数据,再回归测试。重放的过程实际是用户参考验证结果,确定无效数据并进行错误定位的过程。
对应图3所示的并行程序调试方法,本实施例的基于应用逻辑序的并行程序调试装置如图5所示,包括确定单元All,用于定义数据链{x,y, L,A};跟踪和验证记录单元 A12,用于按照所述确定单元All定义的所述数据链跟踪所述并行程序运行时所述程序变量的数据,以所述确定单元All定义的所述正确性验证算法验证所述程序变量的数据并记录验证结果;重放单元A13,用于在所述并行程序运行结束或异常退出后,重放所述跟踪和验证记录单元A12所记录的验证结果。
可选的,所述并行程序调试装置还包括定位单元和数据记录单元(未图示),所述定位单元用于在所述跟踪和验证记录单元记录的验证结果揭示所述程序变量的数据为无效数据时,通过所述程序变量对应的源程序名和行号定位产生所述无效数据的程序位置;所述数据记录单元用于记录所述跟踪和验证记录单元跟踪到的所述并行程序运行时所述程序变量的数据;所述重放单元还用于重放所述数据记录单元所记录的所述程序变量的数据。
所述并行程序调试装置的具体实施可以结合参考上述本实施例的并行程序调试方法的说明,在此不再赘述。
图6为另一实施例的基于应用逻辑序的并行程序调试方法,与图3所示的实施例相比,主要区别在于,本实施例在跟踪过程中不执行正确性验证,只记录程序变量的数据, 并予以重放。
具体地,首先执行步骤S21,定义数据链{x,y,L},其中,X为链号,y定义为应用逻辑序,,L表示应用系统对物理量的逻辑行为的集合,L = ILi I i = 0,1,. . .,n},i为逻辑行为出现次序的自然序号,Li = {dj I j = 0,1,. . .,m-l},Li表示并行程序中一个程序模块对该物理量的逻辑行为,Clj为Li对应的逻辑行为涉及的程序变量,j为程序变量的计数,dj无序;n为逻辑行为的总数,m为Li对应的逻辑行为中与物理量关联的程序变量的数量,A为正确性验证算法,所述应用逻辑序为迭代步序或数据流序。步骤S21与步骤Sll的区别在于,在数据链的定义中不定义正确性验证算法。
接着执行步骤S22,按照所述数据链的定义跟踪并记录所述并行程序运行时所述程序变量的数据。实际实施时,在并行程序的主函数入口处插入trace_init函数调用,在 Li对应的程序位置(源程序名和行号)后插入跟踪记录的函数调用trace (x,y,Li),重新编译连接。在程序执行过程中执行trace函数,跟踪所述并行程序运行时所述程序变量dj的数据并记录在逻辑序信息库中,其中,逻辑序信息包括跟踪到的程序变量的数据。步骤S22 与步骤S12的区别在于,程序运行过程中,只记录跟踪到的程序变量的数据,不进行正确性验证。
接着执行步骤S23,在所述并行程序运行结束或异常退出后,重放所记录的所述程序变量的数据。步骤S23与步骤S13的区别在于,重放记录在逻辑序信息库中的程序变量的数据。
进一步,请参考图7,本实施例的并行程序调试方法还可以包括分析逻辑序,数据验证和错误定位。具体来说,在重放所述程序变量的数据后,可以对这些数据进行分析, 以进行错误定位;用户可以通过数据验证插件输入正确性验证算法,通过正确性验证算法验证所述程序变量的数据的取值是否有效,在验证结果揭示所述程序变量的数据取值无效时,通过程序变量对应的源程序名和行号进行错误定位;此外,也可以结合分析逻辑序和数据验证进行错误定位。
对应图6所示的并行程序调试方法,本实施例的基于应用逻辑序的并行程序调试装置如图8所示,包括确定单元A21,用于定义数据链;跟踪和数据记录单元A22,用于按照所述确定单元A21定义的数据链跟踪并记录所述并行程序运行时所述程序变量的数据; 重放单元A23,用于在所述并行程序运行结束或异常退出后,重放所述跟踪和数据记录单元 A22所记录的所述程序变量的数据。
可选的,本实施例的并行程序调试装置还包括验证单元和定位单元,所述验证单元用于在所述重放单元重放所记录的所述程序变量的数据后,通过正确性验证算法验证所述程序变量的数据;所述定位单元用于在所述验证单元的验证结果揭示所述程序变量的数据为无效数据时,通过所述程序变量对应的源程序名和行号定位产生所述无效数据的程序位置。
所述并行程序调试装置的具体实施可以结合参考上述本实施例的并行程序调试方法的说明,在此不再赘述。
本领域技术人员可以理解,上述实施例的全部或部分是可以通过程序(例如调试程序)来指令相关的硬件来完成,所述的程序可以存储于计算机可读存储介质中,所述存储介质可以是ROM、RAM、磁碟、光盘等。
综上所述,本发明技术方案具有如下优点
设计了一种对复杂应用课题语义进行正确性验证的抽象模型,提供了一种结合程序语义逻辑和并行编程理论的并行程序调试方案,该方案通过定义数据链来分解一个大的正确性验证问题,使并行调试回避了应用课题自身的复杂计算流程,为应用领域人员屏蔽了计算机并行编程的细节,直接为领域人员提供了与并行程序行为关联的数据和自动化的错误定位。
逻辑序的确定和分析是开放的,可以结合程序语义和应用背景定义数据链,并根据跟踪到的逻辑序信息分析并行程序的逻辑,因此有利于并行程序的错误定位。
逻辑序信息的跟踪和重放的实现可以是彼此独立的,也与底层并行库的版本无关,不需要附加的硬件支撑,因此可移植性好。
跟踪分析的逻辑序信息都是针对应用领域的,便于用户理解程序行为,排除了计算机并行编程层面的逻辑序信息,从而节省了存储和分析的开销。
用户可以在对程序出错进行初步分析之后,选择部分物理量定义数据链,提高错误定位和问题查找的针对性;可以根据折半查找的原理,从粗到细定义数据链的段数,逐步追I 示出错根源,完善错误定位。
可以选择在对程序影响最小的位置定义跟踪程序变量,由此降低调试对并行程序实际运行的干扰。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
权利要求
1.一种基于应用逻辑序的并行程序调试方法,其特征在于,包括 定义数据链{X,1,L,A},其中,X为链号,y定义为应用逻辑序,L表示应用系统对物理量的逻辑行为的集合,L = ILi I i = O,1,. . .,n},i为逻辑行为出现次序的自然序号,Li =Idj I j = O,1,. . .,m-1},Li表示并行程序中一个程序模块对该物理量的逻辑行为,dj为Li对应的逻辑行为涉及的程序变量,j为程序变量的计数;n为逻辑行为的总数,m为Li对应的逻辑行为中与物理量关联的程序变量的数量,A为正确性验证算法,所述应用逻辑序为迭代步序或数据流序; 按照所述数据链的定义跟踪所述并行程序运行时所述程序变量的数据,以所述正确性验证算法验证所述程序变量的数据并记录验证结果; 在所述并行程序运行结束或异常退出后,重放所记录的验证结果。
2.如权利要求I所述的并行程序调试方法,其特征在于,所述4={变量名,数据类型,长度,源程序名,行号},所述调试方法还包括在验证结果揭示所述程序变量的数据为无效数据时,通过所述源程序名和行号定位产生所述无效数据的程序位置。
3.如权利要求I所述的并行程序调试方法,其特征在于,还包括记录所述并行程序运行时所述程序变量的数据;重放所记录的所述程序变量的数据。
4.如权利要求I所述的并行程序调试方法,其特征在于,所述物理量与链号一一对应。
5.一种基于应用逻辑序的并行程序调试方法,其特征在于,包括 定义数据链{X,y,L},其中,X为链号,y定义为应用逻辑序,L表示应用系统对物理量的逻辑行为的集合,L = ILi I i = O,1,. . .,n},i为逻辑行为出现次序的自然序号,Li = {dj | j= 0,1,... ,m-1},Li表示并行程序中一个程序模块对该物理量的逻辑行为,Clj为Li对应的逻辑行为涉及的程序变量,j为程序变量的计数;n为逻辑行为的总数,m为Li对应的逻辑行为中与物理量关联的程序变量的数量,A为正确性验证算法,所述应用逻辑序为迭代步序或数据流序; 按照所述数据链的定义跟踪并记录所述并行程序运行时所述程序变量的数据; 在所述并行程序运行结束或异常退出后,重放所记录的所述程序变量的数据。
6.如权利要求5所述的并行程序调试方法,其特征在于,还包括在重放所记录的所述程序变量的数据后,通过正确性验证算法验证所述程序变量的数据。
7.如权利要求6所述的并行程序调试方法,其特征在于,所述4={变量名,数据类型,长度,源程序名,行号},所述调试方法还包括在验证结果揭示所述程序变量的数据为无效数据时,通过所述源程序名和行号定位产生所述无效数据的程序位置。
8.如权利要求5所述的并行程序调试方法,其特征在于,所述物理量与链号一一对应。
9.一种基于应用逻辑序的并行程序调试装置,其特征在于,包括 确定单元,用于定义数据链{X,1,L, A},其中,X为链号,y定义为应用逻辑序,L表示应用系统对物理量的逻辑行为的集合,L = ILi I i = 0,1,. . .,n},i为逻辑行为出现次序的自然序号,Li = {dj I j = 0,1,. . .,m-1},Li表示并行程序中一个程序模块对该物理量的逻辑行为,dj为Li对应的逻辑行为涉及的程序变量,j为程序变量的计数;n为逻辑行为的总数,m为Li对应的逻辑行为中与物理量关联的程序变量的数量,A为正确性验证算法,所述应用逻辑序为迭代步序或数据流序; 跟踪和验证记录单元,用于按照所述数据链的定义跟踪所述并行程序运行时所述程序变量的数据,以所述正确性验证算法验证所述程序变量的数据并记录验证结果; 重放单元,用于在所述并行程序运行结束或异常退出后,重放所记录的验证结果。
10.如权利要求9所述的并行程序调试装置,其特征在于,所述4={变量名,数据类型,长度,源程序名,行号},所述重放调试装置还包括定位单元,用于在验证结果揭示所述程序变量的数据为无效数据时,通过所述源程序名和行号定位产生所述无效数据的程序位置。
11.如权利要求9所述的并行程序调试装置,其特征在于,还包括数据记录单元,用于记录所述并行程序运行时所述程序变量的数据;所述重放单元还用于重放所记录的所述程序变量的数据。
12.一种基于应用逻辑序的并行程序调试装置,其特征在于,包括 确定单元,用于定义数据链{X,y,L},其中,X为链号,y定义为应用逻辑序,L表示应用系统对物理量的逻辑行为的集合,L = ILi I i = 0,1,. . .,n},i为逻辑行为出现次序的自然序号,Li = {dj I j = 0,1,. . .,m-1},Li表示并行程序中一个程序模块对该物理量的逻辑行为,七为Li对应的逻辑行为涉及的程序变量,j为程序变量的计数;n为逻辑行为的总数,m为Li对应的逻辑行为中与物理量关联的程序变量的数量,A为正确性验证算法,所述应用逻辑序为迭代步序或数据流序; 跟踪和数据记录单元,用于按照所述数据链的定义跟踪并记录所述并行程序运行时所述程序变量的数据; 重放单元,用于在所述并行程序运行结束或异常退出后,重放所记录的所述程序变量的数据。
13.如权利要求12所述的并行程序调试装置,其特征在于,还包括验证单元,用于在重放所记录的所述程序变量的数据后,通过正确性验证算法验证所述程序变量的数据。
14.如权利要求13所述的并行程序调试装置,其特征在于,所述4={变量名,数据类型,长度,源程序名,行号},所述重放调试装置还包括定位单元,用于在验证结果揭示所述程序变量的数据为无效数据时,通过所述源程序名和行号定位产生所述无效数据的程序位置。
全文摘要
一种基于应用逻辑序的并行程序调试方法和装置。所述并行程序调试方法包括定义数据链,抽象描述复杂并行程序的语义逻辑,所述数据链包括应用逻辑序、逻辑分段集合和正确性验证算法,所述应用逻辑序为迭代步序或数据流序;按照所述数据链的定义跟踪所述并行程序运行时所述程序变量的数据,以所述正确性验证算法验证所述程序变量的数据并记录验证结果;在所述并行程序运行结束或异常退出后,重放所记录的验证结果。本发明基于并行应用系统语义逻辑的重放调试方案有利于并行程序的错误定位,并且减少了逻辑序信息量,节省了存储和分析的开销。
文档编号G06F11/36GK102929780SQ20121044199
公开日2013年2月13日 申请日期2012年11月6日 优先权日2012年11月6日
发明者王敬宇, 陈华蓉, 冯赟龙, 王雯霞 申请人:无锡江南计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1