基于调度序列约简的并行程序测试方法

文档序号:10724799阅读:278来源:国知局
基于调度序列约简的并行程序测试方法
【专利摘要】本发明研究并行程序的调度序列约简方法,期望基于已有的测试数据集,依约简后的调度序列执行程序,能够覆盖目标语句,从而减少程序执行的代价,提高并行程序测试的效率。所提方法的思想是:首先,基于调度序列与目标语句执行之间的关系,确定影响目标语句的调度序列;然后,根据目标语句执行的情况是否相同,将影响目标语句的调度序列分成若干等价类;最后,针对等价类中每一调度序列,计算两个性能指标值,并选择综合指标值最小的,作为约简之后的调度序列。当需要覆盖目标语句时,基于该调度序列执行被测程序。
【专利说明】
基于调度序列约简的并行程序测试方法
技术领域
[0001] 本发明涉及计算机软件测试领域,设计了一种针对并行程序的调度序列约简方 法,可用于提高该类程序测试的效率。
【背景技术】
[0002] 软件测试是保证软件正确性的重要方法。由于软件测试非常耗时,使得软件测试 的成本大大增加。已有统计结果表明,软件测试占整个软件开发成本的50%以上。随着软件 测试的广泛应用,对高性能软件测试方法的需求将越来越强烈。鉴于此,采用合适的方法, 减少软件测试所需的时间,是十分必要的。
[0003] 并行程序是指,含有两个或两个以上并行执行进程的程序。在诸多大型科学和工 程计算中,往往采用并行程序实现,如能源勘探、医学、军事等。在众多并行程序中,消息传 递并行程序是一种应用广泛的并行程序。该程序基于FORTRAN和C语言,并提供了函数调用 接口库,具有移植性好、功能强大、效率高等优点,此外,几乎所有的并行计算厂商都提供对 该类程序的支持。
[0004] 在软件测试过程中,测试准则非常重要,不但能够引导测试数据的生成,还能够评 价软件测试的充分性。到目前为止,已经提出多种测试准则,其中,语句覆盖是一种常用的 结构覆盖准则。所谓语句覆盖是指,以某一测试数据作为程序的输入运行被测程序,如果能 够执行某一给定的语句(称为目标语句),那么,称该测试数据覆盖了目标语句。
[0005] 对于串行程序而言,判断一个测试数据能否覆盖某一目标语句,只需执行一次被 测程序。消息传递并行程序的执行具有不确定性,使得相同的测试数据,在不同的调度序列 下,可能具有不同的覆盖结果。鉴于此,如果某一测试数据,在某一调度序列下,不能覆盖目 标语句,并不能断定该测试数据不能覆盖目标语句,还需要考察该测试数据在其它调度序 列下的目标语句覆盖情况。因此,与串行程序测试相比,并行程序语句覆盖测试的程序执行 耗时非常大。这说明,研究有效的方法,缩短并行程序语句覆盖的程序执行耗时,是十分必 要的。
[0006] 鉴于此,本发明基于语句覆盖准则,研究消息传递并行程序的调度序列约简问题。 经查阅相关文献,目前还不存在类似方法,这严重影响了并行程序的应用。

【发明内容】

[0007] 本发明研究并行程序的调度序列约简方法,期望基于已有的测试数据集,依约简 后的调度序列执行程序,能够覆盖目标语句,从而减少程序执行的代价,提高并行程序测试 的效率。所提方法的思想是:首先,基于调度序列与目标语句执行之间的关系,确定影响目 标语句的调度序列;然后,根据目标语句执行的情况是否相同,将影响目标语句的调度序列 分成若干等价类;最后,针对等价类中每一调度序列,计算两个性能指标值,并选择综合指 标值最小的,作为约简之后的调度序列。当需要覆盖目标语句时,基于该调度序列执行被测 程序。
[0008] 可以看出,影响目标语句的调度序列确定、调度序列等价类的形成,以及基于综合 指标值的调度序列选择,是密切相关、层层深入的,也是本发明的3个关键技术。
[0009] 步骤1:影响目标语句的调度序列确定
[0010] 与串行程序不同,消息传递并行程序的特点之一是,含有种类繁多的通信语句,如 阻塞通信语句、非阻塞通信语句、组通信语句等等。在这些通信语句中,参数的不同设置,使 得程序的执行具有不确定性。
[0011] -个通信语句,如果其包含的参数取值,使得该语句的消息发送或接收语句是不 确定的,那么,该语句称为不确定通信语句。不确定通信语句,既可以是消息发送语句,也可 以是消息接收语句。正是由于包含不确定通信语句,才使得消息传递并行程序的执行具有 不确定性。
[0012] 消息传递并行程序执行的不确定性,使得对于相同的程序输入,执行不同的进程 顺序,产生的程序输出不同。程序进程执行的顺序,称为一个调度序列。对于一个目标语句 而言,该语句能否执行,不但与程序输入有关,还与调度序列相关。这体现在,对于相同的程 序输入,按照某一序列调度该程序的不同进程,能够执行该语句;而按照另一序列调度这些 进程,却不能够执行该语句。这说明,程序的调度序列影响目标语句的执行。
[0013] 虽然一个消息传递并行程序包含多个调度序列,但是,并不是每一个调度序列,都 影响某一目标语句的执行。为了覆盖该目标语句,寻找影响该目标语句执行的调度序列,是 非常必要的。所谓一个调度序列影响某一目标语句的执行,是指至少存在一个程序输入,依 该序列调度程序的不同进程,能够执行该目标语句。
[0014] 本发明通过动态执行与静态分析相结合的方法,寻找影响目标语句的调度序列。
[0015] 步骤2:目标语句等价调度序列类的形成
[0016] 对于相同的程序输入,不同的调度序列,执行的目标语句不同,但是,这些语句之 间的执行关系并非完全独立的,而是存在某种联系。根据目标语句的执行状况是否相同,将 影响目标语句的调度序列分成若干类,每类中的调度序列均是等价的。
[0017] 考虑并行程序所有调度序列组成的集合,记为S,该程序进程P1的第j个语句$为目 标语句。根据调度序列是否影响6的执行,将集合S分为如下两类:一类为影响$执行的调 度序列组成的集合,记为^ ;另一类为不影响#执行的调度序列组成的集合,记为,那么, S = X LM:。根据任一输入下,巧能否执行,将义进一步分为如下m类:
[0020] 式中,m是等价类的个数,ft是if的第k个等价调度序列类。
[0021] 根据等价调度序列类的定义,本发明利用程序依赖图来寻找等价的调度序列,并 形成相应的等价调度序列类。
[0022] 步骤3:调度序列的选择
[0023] 在等价的调度序列中,只要选择其中一个测试就可以,其它的可以约简。对于等价 的调度序列,虽然执行的目标语句相同,但是,不同的调度序列,程序的执行过程并不完全 相同。此时,如何从等价的调度序列中,选择一个合适的调度序列,以提高测试效率非常重 要。鉴于此,本步将给出一种调度序列选择方法。
[0024] 为了选择调度序列,考虑一个并行程序执行的代价。总体上讲,并行程序执行的代 价可以分为如下2部分:通信代价和计算代价,其中,通信代价与进程之间通信的次数和通 信中传递的数据量等密切相关;计算代价取决于代码行数和运算复杂度等。
[0025] 为了合理的选择调度序列,本发明通过建立一个指标体系,对不同调度序列下,程 序的执行代价进行评价。该指标体系包含如下2个指标,分别是:平均通信代价和Halstead 测度。
[0026] 针对等价类中每一调度序列,计算这两个性能指标值,并选择综合指标值最小的, 作为约简之后的调度序列
[0027] 本发明的主要贡献在于:(1)定义了影响目标语句的调度序列,并给出这些调度序 列的寻找方法;(2)定义了目标语句等价调度序列类,并给出这些类的形成方法;(3)提出了 评价等价调度序列性能的指标体系,并用于选择调度序列。
【附图说明】
[0028]图1本发明的示例程序源代码
[0029]图2图1示例程序的调度序列
[0030]图3示例程序在调度序列881下的程序依赖图
[0031]图4示例程序在调度序列ss2下的程序依赖图
【具体实施方式】
[0032] 下面结合具体附图对本发明所提方法的实施方式进行详细说明。
[0033] 步骤1:影响目标语句的调度序列确定
[0034] 容易知道,一个消息传递并行程序的调度序列不止一个,且不确定通信语句越多, 其调度序列也越多。记一个消息传递并行程序为P,该程序包含t(t>l)个进程,第i(i = 0, 1,...,t_l)个进程为P1,该进程包含N1个不确定通信语句。考虑P 1的第j个不确定通信语句, 与该语句匹配的通信语句有W个,那么,基于P1的不确定通信语句,形成的调度序列最多为 Μ ·瑪·…·巧^个。如果考虑所有t个进程,那么,形成的调度序列会更多。这说明,随着并行 程序进程的增多,形成的调度序列将急剧增加。
[0035] 现在,通过图1的示例程序,说明调度序列与不确定通信语句之间的关系。为了描 述方便,记进程P1的第k个语句为g。由图1知道,进程含有4个不确定通信语句,分别为 ΡΛΡΛΡ^和ΡΛ这些语句均可接收来自消息发送语句?41、?42、?43、?4 4发来的消息,但是,每 次执行,只能接收其中一条语句发送的消息,且接收发送消息的语句是不确定的。通过枚 举,该程序不确定通信语句的消息匹配共有24种情况,产生了 24个调度序列。记程序的第1 个调度序列为sS1,那么,该程序的所有调度序列如图2所列,其中,第1列是调度序列的序 号,第1行是进程P* 3的4个不确定消息接收语句,其余各行代表在相应调度序列下,与消息发 送语句的匹配情况。
[0036] 对于一个目标语句而言,该语句能否执行,不但与程序输入有关,还与调度序列相 关。虽然一个消息传递并行程序包含多个调度序列,但是,并不是每一个调度序列,都影响 某一目标语句的执行。为了覆盖该目标语句,寻找影响该目标语句执行的调度序列,是非常 必要的。本发明提出动态执行与静态分析相结合的方法,寻找这些调度序列。
[0037] 首先,考虑某一程序输入集合。对于该集合中的某一输入,依次执行该程序的每一 调度序列。如果存在某一调度序列,在该输入下能够执行目标语句,那么,该序列即为影响 目标语句执行的调度序列;然后,考虑下一调度序列,并记录该序列是否影响目标语句的执 行,直到所有的调度序列均被执行为止。对于未影响目标语句执行的调度序列,采用新的程 序输入,重复上述过程,直到所有的调度序列均影响目标语句或所有的输入均执行程序为 止。
[0038] 由于上述方法通过执行被测程序,寻找期望的调度序列,因此,称该方法为动态 法。采用动态法,虽然能够找到一些影响目标语句执行的调度序列,但是,该方法是否有效, 与程序输入集合密切相关。如果该集合选取的不合适,那么,将难以找出所有的期望调度序 列。此时,需要通过静态分析与目标语句相关的控制语句,以及控制语句与调度序列的关 系,以确定某调度序列是否影响目标语句的执行,该方法称为静态法。
[0039] 容易知道,通过动态法,能够减少需要进一步寻找的调度序列,从而在一定程度上 减轻了采用静态法导致的分析负担;通过静态法寻找期望的调度序列,能够弥补动态法中 由于集合选择不合适导致的调度序列寻找不全的缺陷。这种动态执行与静态分析相结合的 方法,有助于寻找所有的影响目标语句执行的调度序列。
[0040] 步骤2:目标语句等价调度序列类的形成
[0041] 由上一步可以看出,对于相同的程序输入,不同的调度序列,执行的目标语句不 同,但是,这些语句之间的执行关系并非完全独立的,而是存在某种联系。为此,根据目标语 句的执行状况是否相同,将影响目标语句的调度序列分成若干类,每类中的调度序列均是 等价的。
[0042] 下面,给出等价调度序列类的寻找方法。当目标语句存在于分支或循环结构中时, 必存在一条目标语句所直接控制依赖的语句。为了说明直接控制依赖,假设 81和82是程序的 两个语句,如果s2的执行与否取决于S1,那么,称s 2控制依赖于S1。进一步,如果不存在语句 S3,使得S3位于81到82的路径上且S2控制依赖于S3,那么,称 S2直接控制依赖于81。可以知道, 定是条件语句。称目标语句直接控制依赖的语句,为目标依赖语句。考虑到并行程序的 调度序列,能够通过相应的不确定通信语句及其匹配语句反映,因此,如果影响目标语句对 应目标依赖语句的不确定通信语句及其匹配语句都相同,那么,相应的调度序列就是等价 的。本发明通过程序依赖图,刻画影响该目标依赖语句的不确定通信语句或其匹配语句之 间的关系。直观的讲,程序依赖图是一个有向图,记为G=(N,E),其中,N为顶点集合,每一顶 点对应程序的一或多条语句;E为有向边集合,每一有向边对应语句之间的依赖关系。这种 依赖关系可以是控制依赖,也可以是数据依赖,还可以是通信依赖。鉴于本发明对不同依赖 关系的处理方式相同,因此,不再细分这些依赖关系。根据语句之间的依赖关系,能够得到 相应的程序依赖图。
[0043] 对于图1的示例程序,在调度序列SS1下的程序依赖图如图3所示。
[0044] 根据某一调度序列对应的程序依赖图,从目标语句对应目标依赖语句的顶点出 发,沿着有向边相反的方向,寻找所有对应不确定通信语句及匹配语句的顶点,得到一个顶 点序列。对于不同的调度序列,如果上述顶点序列是相同的,那么,对应的调度序列即为等 价的调度序列。通过上述方法,能够得到多个等价的调度序列。
[0045] 对于图1的示例程序,调度序列SS2下的程序依赖图如图4所示。由图3和4可知,在 这2个调度序列下,目标语句乾对应目标依赖语句是禮,而影响硝的顶点序列均为{ΡΛ Ρ6* 3},因此,这2个调度序列是等价的。
[0046] 如果目标语句处于顺序结构中,那么,该语句的执行,一般不受其它语句的控制, 任一输入在任意调度序列下执行程序时,均能够执行它。这类目标语句只有一个等价调度 序列类,该等价类包含了所有影响它的调度序列。
[0047]步骤3:调度序列的选择 [0048]指标1:平均通信代价
[0049] 对于并行程序,进程之间信息的传递,远大于进程内语句执行所需的时间。由于调 度序列决定进程之间信息的传递,因此,可以通过进程之间通信的代价,反映调度序列的优 劣。
[0050] 消息传递并行程序的通信方式,可以分为如下2类:点到点通信和组通信。如果2个 进程通过点对点通信传输η字节的消息,传输延迟为 〇,传送每一字节所需的时间为Θ,那么, 完成该通信操作需要σ+ηθ个单位时间;鉴于组通信基于点到点通信实现,基于点到点通信 操作需要的时间,通过不同的模型,可以估算不同组通信方式下的通信代价。
[0051] 在消息传递并行程序中,完成一次通信操作,需要2或多个进程通信函数的配合才 能完成。为了避免某次通信代价重复计算,对每个通信函数执行产生的通信代价,做如下规 定:消息发送和消息接收函数配合,完成一次点到点通信,产生σ+ηθ个单位时间的通信开 销,那么,消息发送函数或接收函数的执行,产生的通信代价为
\个单位时间。对于多 个进程的组通信函数共同配合,完成一次通信操作,每个通信函数执行产生的通信代价,为 相应组通信代价与进程个数的比。
[0052]在同一调度序列下,不同的程序输入,执行的通信函数不一定相同,由此产生的通 信代价也不一定相同。鉴于此,以该调度序列下,执行到目标语句通信代价的平均值,反应 该调度序列的通信代价。
[0053]下面,根据通信函数所在程序结构的类型,计算该通信函数的平均通信代价。
[0054]如果某一通信函数处于某一进程的顺序结构中,那么,只要执行该进程,就执行该 通信函数,并产生通信代价。但是,如果该通信函数处于某一进程的分支结构中,那么,该进 程的执行,并不能保证该通信函数也执行。鉴于该通信函数的执行是一个随机事件,因此, 可以采用概率,表示该通信函数执行的可能性。容易知道,该通信函数的执行,与控制其执 行的条件语句谓词表达式的真值密切相关。记谓词表达式为真的概率为Ρ,如果该通信函数 执行的通信代价为α个单位时间,那么,该通信函数的执行,所需的平均通信代价为ρ · α个 单位时间。对于该通信函数处于某一进程循环结构的情况,假设执行循环结构的次数为η, 由于每次循环,均执行该通信函数,因此,该通信函数的执行,所需的平均通信代价为η · α。
[0055]假设某一调度序列包含的通信函数,见,他,犯个分别位于进程的顺序结构、分支结 构和循环结构中,其中,顺序结构中,第i个通信函数的通信代价为αι个时间单位,分支结构 中,第j个通信函数的通信代价为比个时间单位,循环结构中,第k个通信函数的通信代价为 Yk个时间单位,那么,该调度序列的平均通信代价
[0056] 指标2:调度序列的Halstead测度
[0057] 在消息传递并行程序中,存在顺序执行关系的语句可能存在于不同的进程中,称 具有顺序执行关系的一系列语句为一个语句序列。由于并行程序包含的进程不止一个,因 此,该程序的一条路径,往往包含多个语句序列。容易知道,不同语句序列的复杂度是不同 的,而复杂度最大的语句序列往往影响路径的执行。我们称复杂度最大的语句序列为关键 语句序列。为了反映一个语句序列的复杂度,本发明引入Halstead测度。该测度通过操作符 和操作数的个数,估计语句序列的复杂度,其中,操作数是指该语句序列包含的变量和常 量,操作符主要有算术和布尔运算符。
[0058]记一个语句序列为Sq,包含的操作符和操作数的个数分别为Ni(Sq)和N2(Sq),Sq的 Halstead长度为:
[0059] L(Sq) =Ni(Sq)+N2(Sq)
[0060] 对于一条路径包含的所有语句序列,计算每一序列的Halstead长度,那么, Halstead长度最大的语句序列,就是该路径的关键语句序列。对于一个调度序列涉及的多 条路径,求取每一路径的关键语句序列,并将这些语句序列的最大Halstead长度,作为该调 度序列的Halstead测度。
[0061] 对于每一调度序列,求出该序列的平均通信代价和Halstead测度之后,通过对归 一化的值加权求和,能够得到该调度序列的综合指标值。本发明采用Min-max归一化方法, 将指标A的某个值X,通过min-max标准化,映射到区间[0,1 ]的值X ',公式为:
,式中,m i η A和max A分别为指标A的最小和最大值。尽管所提的两个指标对 程序的执行都产生重要的影响,但是,进程之间信息的传递,远大于进程内语句执行所需的 时间,使得归一化后,同样的差别,平均通信代价对程序执行效率的影响比Halstead测度大 的多,因此,平均通信代价的权重取为〇. 8,而Halstead测度的权重取为0.2;最后,从等价的 调度序列中,选择综合指标值最小的调度序列,作为期望的调度序列。
[0062] 应用实例
[0063] 将提出的并行程序调度序列约简方法应用于基准程序测试中,通过一系列实验, 验证如下3个问题,评价本发明:
[0064] (1)采用本发明的方法,能否找到影响目标语句的调度序列,并形成等价调度序列 类?
[0065] (2)采用本发明的方法,约简目标语句的调度序列,能否提高目标语句覆盖的效 率?
[0066] (3)采用本发明提出的指标,从等价调度序列类中选择调度序列,能否减少程序执 行的代价?
[0067] 实验环境的配置如下:硬件配置为Intel Core i5CPU、500G硬盘和4G内存;软件包 括Windows 8.1操作系统、Visual Studio 2013编译器,以及MPI应用软件MPICH。
[0068]选择10个基准程序作为被测程序,这些程序的基本信息如表1所列。程序C〇nveX_ quadr ilateral寻找输入的4个角度值中较小的3个角度值,并判断它们能否构成凸四边形。 Match实现的是字符串匹配功能。程序Server_client具有主从式架构,主进程处理不同子 进程发送的消息。Server_client_communication是基于对Server_client修改得到的程 序。程序Matrix的实现矩阵相乘,并判断矩阵元素之间的关系。Deposit_withdraw是一个存 取款模拟程序。Including用于判断点与多边形之间的位置关系。Creator_consumer是一个 模拟生产消费的程序。Date_ SWich考察输入日期的相关信息。Min程序用于求取多个数的最 小值。
[0069]表1被测程序的基本信息
[0071] (1)验证问题1
[0072] 为了回答该验证问题,对每一被测程序,考察所有的分支结构。对于每一分支结 构,从中任选一条语句,作为目标语句;所有目标语句形成该程序的目标语句集。对于每一 目标语句,采用本发明方法,确定影响该语句的调度序列,并形成调度序列等价类。
[0073] 其结果如表2所列。表中,第1列是被测程序;第2列为程序包含的调度序列个数;第 3列表示目标语句条数;第4列给出影响目标语句的调度序列个数;第5列反映等价调度序列 类的个数;最后一列计算调度序列的约简率。鉴于仅从每一等价调度序列类中选择一个调 度序列,因此,约简后的调度序列个数与等价调度序列类的个数相等,从而约简率为,影响 目标语句的调度序列数与等价调度序列类数的差之后,再与影响目标语句的调度序列数的 比。
[0074] 表2被测程序的调度序列约简结果
[0076] 由表2可知,(1)除了程序Server_client和Server_client_communication,某些 调度序列不影响目标语句之外,对于其它程序,任一调度序列均影响目标语句。这说明,调 度序列对目标语句的影响是非常大的;(2)不同程序的调度序列约简程度是不同的,在这些 程序中,调度序列约简率最高的是Min,高达97 %。这是因为,对于该程序的很多语句,影响 该语句的调度序列,只能形成1个等价调度序列类;对于所有影响目标语句的调度序列,形 成的平均等价类的个数仅为3.5,导致约简了大量的调度序列;最低的调度序列约简率也达 到了 50%,共有5个程序,分别为Convex_quadrilateral、Server_c 1 ient、Server_c 1 ient_ (3〇臟1111;[0&1:;[011、06。08;[1:_¥;[1:11(1抑¥和0&丨6_8¥;[011;(3)对于所有被测程序,调度序列约简率 的平均值为85 %。
[0077] 上述实验结果表明,采用本发明的方法,能够找到影响目标语句的调度序列,并形 成等价调度序列类,从而大大减少了需要执行的调度序列个数。
[0078] (2)验证问题2
[0079] 对于被测程序的每一目标语句,利用同一测试数据集,基于约简和不约简调度序 列,考察覆盖目标语句需要的程序运行时间,以说明目标语句覆盖的效率。本组实验中,约 简的调度序列是从每一等价的调度序列中随机选择的一个。在后面的实验中,将给出采用 本发明的指标,从等价的调度序列中,选择调度序列的优越性。
[0080] 当不约简调度序列时,对于某一测试数据,按照一定的顺序,依次执行每一调度序 列。调度序列约简之后,对于相同的测试数据,按照一定的顺序,依次执行每一约简后的调 度序列。
[0081] 被测程序的目标语句覆盖,所需的程序执行时间如表3所列。表中,第1列是被测程 序;第2列为不约简调度序列,测试数据覆盖目标语句所需的程序执行时间;第3列表示调度 序列约简之后,达到相同的覆盖目标,所需的程序执行时间;最后一列计算时间加速比,为 约简调度序列之后减少的程序执行时间,与不约简调度序列所需执行时间的比。
[0082] 表3被测程序目标语句覆盖所需的程序执行时间
[0084] 由表3可知,(1)覆盖不同程序的目标语句,所需程序执行时间的加速比是不同的, 其中,时间加速比最大的是程序Min,高达98%。这是因为,该程序相当多的目标语句,只有1 个等价的调度序列类,使得同一测试数据,在调度序列约简之前,执行了 120个调度序列;而 在调度序列约简之后,仅执行了一个调度序列;时间加速比最低的程序是Convex_ quadrilateral,即便与此,也达到了32%; (2)对于所有10个被测程序,覆盖这些程序的目 标语句,所需程序执行时间加速比的平均值为81%。这意味着,采用本发明的方法,约简调 度序列,覆盖被测程序的目标语句,所需的程序执行时间能够缩短超过四分之三。
[0085] 上述实验结果表明,采用本发明的方法,约简目标语句的调度序列,能够大大缩短 覆盖目标语句所需的程序执行时间,从而提高了目标语句覆盖的效率。
[0086] (3)验证问题3
[0087] 首先需要计算影响目标语句调度序列的指标值。本发明一共考虑了2个指标,其 中,第一个指标是平均通信代价。
[0088] 计算调度序列的平均通信代价时,需要参数〇和0的值,这里,采用"乒乓法"得到。 基于本发明的实验环境,得到的参数σ和Θ的值分别为 :〇 = 1〇.2,0 = 3.32\1〇-4,8卩:点到点 通信的传输延迟为10.2ys,传送每一字节所需的时间为3.32 X 10_4ys。
[0089] 以程序Including目标语句1的第1个等价调度序列类为例,该等价调度序列类包 含的各调度序列的指标值如表4所列。
[0090] 表4程序Including的调度序列指标值
[0092] 由于指标值越小的调度序列越好,因此,在该等价的调度序列类中,选择第1个调 度序列。对于目标语句1的其它等价的调度序列类,也需要计算所含每一调度序列的指标 值,并选择指标值最小的调度序列。对于其它目标语句,也采用上述方法,选择调度序列。
[0093] 现在,评价本发明所提指标的合理性。为此,从影响目标语句的等价调度序列类 中,采用本发明的方法,选择1个调度序列,计算基于该调度序列,覆盖目标语句所需的程序 执行时间,并与从上述等价类中随机选择一个调度序列比较。
[0094] 对于被测程序,在不同的调度序列选择方式下,目标语句覆盖所需的程序执行时 间平均值如表5所列。表中第1列表示被测程序,第2列表示相应程序的目标语句数目,第3列 为从等价的调度序列类中随机选择一个调度序列,覆盖目标语句所需的程序执行时间;第4 列表示利用本发明的指标选择调度序列,覆盖目标语句所需的程序执行时间;最后一列计 算时间加速比,采用与前面完全相同的方法计算。
[0095] 表5不同调度序列选择方法下的程序执行时间(所有被测程序)
[0096]
[0097] 由表5可知,(1)对于不同的被测程序,采用本发明的方法选择调度序列,覆盖目标 语句所需程序执行时间的加速比不同,其中,时间加速比最大的是程序Server_client_ communication,为81%。这表明,能缩短超过四分之三的程序执行时间;程序Server_ client的时间加速比最小,即便如此,也节省了近四分之一的程序执行时间;(2)对于所选 被测程序,时间加速比的平均值为46%。这意味着,对于那些适用本发明选择方法的语句, 与随机选择调度序列相比,采用本发明的方法选择调度序列,节省的程序执行时间将近一 半。
[0098] 上述实验结果表明,采用本发明提出的指标,从等价调度序列类中选择调度序列, 能够大大减少程序执行的代价。
【主权项】
1. 影响目标语句的调度序列确定,其特征如下 消息传递并行程序包含多个调度序列,但是,并不是每一个调度序列,都影响某一目标 语句的执行;为了覆盖该目标语句,寻找影响该目标语句执行的调度序列,是非常必要的; 所谓一个调度序列影响某一目标语句的执行,是指至少存在一个程序输入,依该序列调度 程序的不同进程,能够执行该目标语句; 本发明通过动态执行与静态分析相结合的方法,寻找影响目标语句的调度序列; 首先,考虑某一程序输入集合;对于该集合中的某一输入,依次执行该程序的每一调度 序列;如果存在某一调度序列,在该输入下能够执行目标语句,那么,该序列即为影响目标 语句执行的调度序列;然后,考虑下一调度序列,并记录该序列是否影响目标语句的执行, 直到所有的调度序列均被执行为止;对于未影响目标语句执行的调度序列,采用新的程序 输入,重复上述过程,直到所有的调度序列均影响目标语句或所有的输入均执行程序为止; 由于上述方法通过执行被测程序,寻找期望的调度序列,因此,称该方法为动态法;采 用动态法,虽然能够找到一些影响目标语句执行的调度序列,但是,该方法是否有效,与程 序输入集合密切相关;如果该集合选取的不合适,那么,将难W找出所有的期望调度序列; 此时,需要通过静态分析与目标语句相关的控制语句,W及控制语句与调度序列的关系,W 确定某调度序列是否影响目标语句的执行,该方法称为静态法; 容易知道,通过动态法,能够减少需要进一步寻找的调度序列,从而在一定程度上减轻 了采用静态法导致的分析负担;通过静态法寻找期望的调度序列,能够弥补动态法中由于 集合选择不合适导致的调度序列寻找不全的缺陷;运种动态执行与静态分析相结合的方 法,有助于寻找所有的影响目标语句执行的调度序列。2. 目标语句等价调度序列类的形成,其特征如下 对于相同的程序输入,不同的调度序列,执行的目标语句不同,但是,运些语句之间的 执行关系并非完全独立的,而是存在某种联系;根据目标语句的执行状况是否相同,将影响 目标语句的调度序列分成若干类,每类中的调度序列均是等价的; 考虑并行程序所有调度序列组成的集合,记为S,该程序进程pi的第j个语句巧为目标语 句;根据调度序列是否影响的执行,将集合S分为如下两类:一类为影响巧/执行的调度序 列组成的集合,记为气.,;另一类为不影响巧执行的调度序列组成的集合,记为與,那么, 及=S;, U义:;根据任一输入下,巧能否执行,将及进一步分为如下m类:式中,m是等价类的个数,是巧的第k个等价调度序列类; 下面,给出等价调度序列类的寻找方法;当目标语句存在于分支或循环结构中时,必存 在一条目标语句所直接控制依赖的语句;称目标语句直接控制依赖的语句,为目标依赖语 句;考虑到并行程序的调度序列,能够通过相应的不确定通信语句及其匹配语句反映,因 此,如果影响目标语句对应目标依赖语句的不确定通信语句及其匹配语句都相同,那么,相 应的调度序列就是等价的;本发明通过程序依赖图,刻画影响该目标依赖语句的不确定通 信语句或其匹配语句之间的关系;运种依赖关系可w是控制依赖,也可w是数据依赖,还可 W是通信依赖;鉴于本发明对不同依赖关系的处理方式相同,因此,不再细分运些依赖关 系;根据语句之间的依赖关系,能够得到相应的程序依赖图; 根据某一调度序列对应的程序依赖图,从目标语句对应目标依赖语句的顶点出发,沿 着有向边相反的方向,寻找所有对应不确定通信语句及匹配语句的顶点,得到一个顶点序 列;对于不同的调度序列,如果上述顶点序列是相同的,那么,对应的调度序列即为等价的 调度序列;通过上述方法,能够得到多个等价的调度序列。3.调度序列的选择,其特征如下 在等价的调度序列中,只要选择其中一个测试就可W,其它的可W约简;对于等价的调 度序列,虽然执行的目标语句相同,但是,不同的调度序列,程序的执行过程并不完全相同; 此时,如何从等价的调度序列中,选择一个合适的调度序列,W提高测试效率非常重要;鉴 于此,本步将给出一种调度序列选择方法; 为了合理的选择调度序列,本发明通过建立一个指标体系,对不同调度序列下,程序的 执行代价进行评价;该指标体系包含如下2个指标,分别是:平均通信代价和化Istead测度; 针对等价类中每一调度序列,计算运两个性能指标值,并选择综合指标值最小的,作为 约简之后的调度序列 指标1:平均通信代价 消息传递并行程序的通信方式,可W分为如下2类:点到点通信和组通信;如果2个进程 通过点对点通信传输η字节的消息,传输延迟为0,传送每一字节所需的时间为Θ,那么,完成 该通信操作需要σ+ηθ个单位时间;鉴于组通信基于点到点通信实现,基于点到点通信操作 需要的时间,通过不同的模型,可W估算不同组通信方式下的通信代价; 在消息传递并行程序中,完成一次通信操作,需要2或多个进程通信函数的配合才能完 成;为了避免某次通信代价重复计算,对每个通信函数执行产生的通信代价,做如下规定: 消息发送和消息接收函数配合,完成一次点到点通信,产生σ+ηθ个单位时间的通信开销,那 么,消息发送函数或接收函数的执行,产生的通信代价为个单位时间;对于多个进程 的组通信函数共同配合,完成一次通信操作,每个通信函数执行产生的通信代价,为相应组 通信代价与进程个数的比; 在同一调度序列下,不同的程序输入,执行的通信函数不一定相同,由此产生的通信代 价也不一定相同;鉴于此,W该调度序列下,执行到目标语句通信代价的平均值,反应该调 度序列的通信代价; 下面,根据通信函数所在程序结构的类型,计算该通信函数的平均通信代价; 如果某一通信函数处于某一进程的顺序结构中,那么,只要执行该进程,就执行该通信 函数,并产生通信代价;但是,如果该通信函数处于某一进程的分支结构中,那么,该进程的 执行,并不能保证该通信函数也执行;鉴于该通信函数的执行是一个随机事件,因此,可W 采用概率,表示该通信函数执行的可能性;容易知道,该通信函数的执行,与控制其执行的 条件语句谓词表达式的真值密切相关;记谓词表达式为真的概率为Ρ,如果该通信函数执行 的通信代价为α个单位时间,那么,该通信函数的执行,所需的平均通信代价为Ρ · α个单位 时间;对于该通信函数处于某一进程循环结构的情况,假设执行循环结构的次数为η,由于 每次循环,均执行该通信函数,因此,该通信函数的执行,所需的平均通信代价为η · α; 假设某一调度序列包含的通信函数,Νι,Ν2,Ν3个分别位于进程的顺序结构、分支结构和 循环结构中,其中,顺序结构中,第i个通信函数的通信代价为αι个时间单位,分支结构中, 第j个通信函数的通信代价为扣个时间单位,循环结构中,第k个通信函数的通信代价为丫 k 个时间单位,那么,该调度序列的平均通信代价为指标2:调度序列的化1 stead测度 在消息传递并行程序中,存在顺序执行关系的语句可能存在于不同的进程中,称具有 顺序执行关系的一系列语句为一个语句序列;由于并行程序包含的进程不止一个,因此,该 程序的一条路径,往往包含多个语句序列;容易知道,不同语句序列的复杂度是不同的,而 复杂度最大的语句序列往往影响路径的执行;我们称复杂度最大的语句序列为关键语句序 列;为了反映一个语句序列的复杂度,本发明引入化Istead测度; 记一个语句序列为Sq,包含的操作符和操作数的个数分别为化(Sq)和的(59),別的 化Istead长度为: L(Sq)=化(Sq)+N2(Sq) 对于一条路径包含的所有语句序列,计算每一序列的化Istead长度,那么,化Istead长 度最大的语句序列,就是该路径的关键语句序列;对于一个调度序列设及的多条路径,求取 每一路径的关键语句序列,并将运些语句序列的最大化Istead长度,作为该调度序列的 化Istead测度; 对于每一调度序列,求出该序列的平均通信代价和化Istead测度之后,通过对归一化 的值加权求和,能够得到该调度序列的综合指标值;本发明将指标A的某个值X,映射到区间 [0,1 ]的值X ',公式为式中,minA和maxA分别为指标A的最小和最大值; 平均通信代价的权重取为0.8,而化1 stead测度的权重取为0.2 ;最后,从等价的调度序列 中,选择综合指标值最小的调度序列,作为期望的调度序列。
【文档编号】G06F11/36GK106095669SQ201610390006
【公开日】2016年11月9日
【申请日】2016年6月3日 公开号201610390006.3, CN 106095669 A, CN 106095669A, CN 201610390006, CN-A-106095669, CN106095669 A, CN106095669A, CN201610390006, CN201610390006.3
【发明人】巩敦卫, 张晨, 王子鸣, 田甜, 姚香娟, 党向盈
【申请人】中国矿业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1