一种同步多线程用例生成方法及系统与流程

文档序号:16997907发布日期:2019-03-02 01:31阅读:182来源:国知局
一种同步多线程用例生成方法及系统与流程

本发明涉及计算机处理器技术领域,尤其涉及一种同步多线程用例生成方法及系统。



背景技术:

传统的cpu在某一时间只能处理一个指令序列,通常我们把它称为一个线程。在线程处理的过程中cpu的处理单元需要不断调入指令与数据进行处理。随着cpu技术的发展,cpu的主频与性能不断提高,需要调入指令和数据的速度不断提高。但是内存技术的发展并没有跟上cpu发展的速度,内存通常无法提供足够的指令和数据给cpu进行处理。受限于指令间的相关性,因此,为了提高处理器的性能,则采用同步多线程(smt);其中,同步多线程(smt)是一种在一个cpu的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上同步多线程是一种将线程级并行处理(多cpu)转化为指令级并行处理的方法。同步多线程是单个物理处理器从多个硬件线程上下文同时分派指令的能力。同时,由于每个线程相对独立,因此线程间资源竞争,以及单个线程的控制对其他线程的影响,也成为多线程验证的重中之重。

但是,市面上的用例生成器虽然生成单线程的成功率很高,并且操作简单。但是用例生成器的同步多线程用例成功率极低,即使用例生成成功,用例的指令数却很少,因此,使用用例工具生成同步多线程资源竞争用例成功率低,并且用例的质量和数量都无法达到充分验证同步多线程要求的问题。



技术实现要素:

本发明提供的同步多线程用例生成方法及系统,能够通过多个单线程用例数据块进行脚本拼接形成多样化同步多线程用例,可以更快速的生成具有高随机性的同步多线程用例,减少时间开销,并且通过开发脚本高效生成同步多线程用例,进而提高生成同步多线程用例的成功率。

第一方面,本发明提供一种同步多线程用例生成方法,包括:

生成至少两条单线程用例数据块;

将至少两条单线程用例数据块进行脚本拼接,得到完整的数据块并形成同步多线程用例。

可选地,所述生成至少两条单线程用例数据块包括:

添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块;

添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块。

可选地,在添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块后,还包括:

判断第一单线程用例数据块是否成功生成,如果第一单线程用例数据块成功生成,则将第一单线程用例数据块储存在用例库内;如果第一单线程用例数据块没有成功生成,则继续添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块。

可选地,在添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块后,还包括:

判断第二单线程用例数据块是否成功生成,如果第二单线程用例数据块成功生成,则将第二单线程用例数据块储存在用例库内;如果第二单线程用例数据块没有成功生成,则继续添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块。

可选地,所述生成至少两条单线程用例数据块包括:

直接从用例库中调取至少两个单线程用例数据块并分别作为第一单线程用例数据块和第二单线程用例数据块。

可选地,在生成至少两条单线程用例数据块之前,还包括:

对各单线程配置系统寄存器;

对各单线程划分主存物理地址以使各单线程对应工作在不同的物理地址区间内。

可选地,所述单线程用例数据块包括系统的环境变量及路径、主存初始值、系统寄存器的初始值、寄存器的初始值、指令序列、主存最终值、系统寄存器的最终值和寄存器的最终值中一种或者任意组合。

可选地,所述将至少两条单线程用例数据块进行脚本拼接,得到完整的数据块并形成同步多线程用例,包括:

保留一份系统的环境变量及路径作为同步多线程用例数据块中的系统的环境变量及路径;

对应获取各单线程用例数据块中的主存初始值并合并形成同步多线程用例数据块中的主存初始值;

对各单线程用例对应赋予处理器id,以及对应获取各单线程用例数据块中的指令序列、系统寄存器的初始值、寄存器的初始值、系统寄存器的最终值和寄存器的最终值,并将处理器id、指令序列、系统寄存器的初始值、寄存器的初始值、系统寄存器的最终值和寄存器的最终值对应捆绑并按设定顺序进行拼接形成同步多线程用例数据块中的指令序列和寄存器信息;

对应获取各条单线程用例数据块中的主存最终值并合并形成同步多线程用例数据块中的主存最终值;

将同步多线程用例数据块中的系统的环境变量及路径、主存初始值、指令序列和寄存器信息和主存最终值进行处理得到完整的数据块并形成同步多线程用例。

第二方面,本发明提供一种同步多线程用例生成系统,包括:

数据生成单元,用于生成单线程用例数据块;

脚本拼接单元,用于将至少两条单线程用例数据块进行脚本拼接,得到完整数据块并形成同步多线程用例。

可选地,所述数据生成单元包括:

第一添加模块,用于添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块;

第一判断模块,用于判断第一单线程用例数据块是否成功生成。

可选地,所述数据生成单元还包括:

第二添加模块,用于添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块。

第二判断模块,用于第二单线程用例数据块是否成功生成。

可选地,所述系统还包括:

用例库,用于储存单线程用例数据块;

用例调取单元,用于直接从用例库中调取至少两个单线程用例数据块并分别作为第一单线程用例数据块和第二单线程用例数据块。

可选地,所述系统还包括:

配置单元,用于对各单线程配置系统寄存器;

划分单元,用于对各单线程划分主存物理地址以使各单线程对应工作在不同的物理地址区间内。

可选地,所述脚本拼接单元包括:

保留模块,用于保留一份系统的环境变量及路径作为同步多线程用例数据块中的系统的环境变量及路径;

第一合并模块,用于对应获取各单线程用例数据块中的主存初始值并合并形成同步多线程用例数据块中的主存初始值;

拼接模块,用于对各单线程用例对应赋予处理器id,以及对应获取各单线程用例数据块中的指令序列、系统寄存器的初始值、寄存器的初始值、系统寄存器的最终值和寄存器的最终值,并将处理器id、指令序列、系统寄存器的初始值、寄存器的初始值、系统寄存器的最终值和寄存器的最终值对应捆绑并按设定顺序进行拼接形成同步多线程用例数据块中的指令序列和寄存器信息;

第二合并模块,用于对应获取各条单线程用例数据块中的主存最终值并合并形成同步多线程用例数据块中的主存最终值;

处理模块,用于将同步多线程用例数据块中的系统的环境变量及路径、主存初始值、指令序列和寄存器信息和主存最终值进行处理得到完整的数据块并形成同步多线程用例。

本发明实施例提供的同步多线程用例生成方法及系统,解决了使用用例工具生成同步多线程资源竞争用例成功率低,并且用例的质量和数量都无法达到充分验证同步多线程要求的问题。本实施例中为了达到同步多线程的充分验证的要求,主要是提高在同步多线程资源竞争验证时场景与场景的匹配率,以及场景之间的覆盖率。因此,本实施例中首先通过数据生成单元生成至少两条单线程用例数据块,并将各单线程用例数据块通过脚本拼接形成同步多线程用例,本实施例中通过多个单线程用例进行复用形成多样化同步多线程用例,进而能够根据验证需求全面覆盖验证点,同时,本实施例中通过对多种不同的单线程用例进行脚本拼接并生成大量交错的同步多线程用例,提高了同步多线程用例的随机性,并使得遍历空间更大。

综上所述,第一方面,本实施例所述方法通过将各单线程用例进行脚本拼接可以更快速的生成同步多线程用例,减少时间开销,并且通过开发脚本高效生成同步多线程用例还可减少人力开销;第二方面,本实施例所述方法通过增加指令条数并对应生成多条单线程用例数据块,增加同步多线程用例的复杂性并触及更多的验证场景;第三方面,本实施例所述方法提高生成同步多线程用例的成功率,以及生成同步多线程用例的效率。

附图说明

图1为本发明一实施例同步多线程用例生成方法的流程图;

图2为本发明另一实施例同步多线程用例生成方法的流程图;

图3为本发明一实施例同步多线程用例生成系统的结构示意图;

图4为本发明另一实施例数据生成单元的结构示意图;

图5为本发明另一实施例脚本拼接单元的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种同步多线程用例生成方法,如图1所示,所述方法包括:

s11、生成至少两条单线程用例数据块;

s12、将至少两条单线程用例数据块进行脚本拼接,得到完整的数据块并形成同步多线程用例。

本发明实施例提供的同步多线程用例生成方法解决了使用用例工具生成同步多线程资源竞争用例成功率低,并且用例的质量和数量都无法达到充分验证同步多线程要求的问题。本实施例中为了达到同步多线程的充分验证的要求,主要是提高在同步多线程资源竞争验证时场景与场景的匹配率,以及场景之间的覆盖率。因此,本实施例中首先通过生成至少两条单线程用例数据块,并将各单线程用例数据块形成同步多线程用例,本实施例中通过多个单线程用例进行复用形成多样化同步多线程用例,进而能够根据验证需求全面覆盖验证点,同时,本实施例中通过对多种不同的单线程用例进行脚本拼接并生成大量交错的同步多线程用例,一方面提高了同步多线程用例的随机性,并使得遍历空间更大;另一方面还可积极响应中后期的回归验证。

同时,通过统计分析当采用传统的用例生成方法生成同步多线程用例时,每12小时可成功生成7条用例。当采用本实施例所述方法中首先生成多个单线程用例,然后将各单线程用例数据块进行脚本拼接形成同步多线程用例时,每12小时可成功生成70条用例。

因此,第一方面,所述方法通过将各单线程用例进行脚本拼接可以更快速的生成同步多线程用例,减少时间开销,并且通过开发脚本高效生成同步多线程用例还可减少人力开销;第二方面,所述方法通过增加指令条数并对应生成多条单线程用例数据块,增加同步多线程用例的复杂性并触及更多的验证场景;第三方面,所述方法提高生成同步多线程用例的成功率,以及生成同步多线程用例的效率。

可选地,如图2所示,所述生成至少两条单线程用例数据块包括:

s110、添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块;

s120、添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块。

具体的,对于同步多线程资源竞争的用例,本实施例中所述方法通过分别添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块,形成一定向单线程用例,其中,占用定点运算资源线程包括定点运算单元,访存单元,分支运算单元中一种或者任意的组合;和添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块,形成随机单线程用例,进而生成至少两条单线程用例数据块;其中,所述方法一方面主要是通过去观察一个占用定点运算资源的定向单线程用例,对另外至少一个随机单线程用例的影响,从而验证寄存器传输级的功能正确性;另一方面,所述方法通过定向单线程用例和各种随机单线程用例进行复用,进而增加同步多线程用例的复杂性并触及更多的验证场景,同时,还可以根据验证场景需求,产生多种不同的随机单线程用例并与定向单线程用例进行组合复用形成覆盖率高的同步多线程用例,进而具有针对性增加了所述同步多线程用例的复杂性并触及更多的验证场景,提高了场景与场景的匹配率,以及场景之间的覆盖率。

可选地,在添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块后,还包括:

s13、判断第一单线程用例数据块是否成功生成,如果第一单线程用例数据块成功生成,则将第一单线程用例数据块储存在用例库内;如果第一单线程用例数据块没有成功生成,则继续添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块。

可选地,在添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块后,还包括:

s14、判断第二单线程用例数据块是否成功生成,如果第二单线程用例数据块成功生成,则将第二单线程用例数据块储存在用例库内;如果第二单线程用例数据块没有成功生成,则继续添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块。

具体的,本实施例中所述方法在单线程用例生成后,还需判断单线程用例是否生成成功,进一步的提高了生成同步多线程用例的效率和稳定性。

可选地,所述生成至少两条单线程用例数据块包括:

直接从用例库中调取至少两个单线程用例数据块并分别作为第一单线程用例数据块和第二单线程用例数据块。

具体的,本实施例中所述方法还能够通过对用例库的调用可以更快速的生成同步多线程用例,减少时间开销,并且,提高所述用例生成方法的处理能力。

可选地,在生成至少两条单线程用例数据块之前,还包括:

s00、对各单线程配置系统寄存器;

s10、对各单线程划分主存物理地址以使各单线程对应工作在不同的物理地址区间内。

具体的,本实施例所述方法首先需要根据验证场景的需求对单线程用例进配置,首先是针对在测试不同的场景时,将各单线程配置到系统寄存器所对应的合理值。例如,当处理器工作在不同的层级时,则根据单线程用例需求修改例外层级;当遇到浮点类指令为避免其发生例外时,将对单线程用例配置相应的系统寄存器。然后对各单线程划分主存物理地址以使各单线程对应工作在不同的物理地址区间内,因此,所述方法可通过系统寄存器的配置和主存物理地址的划分提高所述单线程用例的效率,进而提高生成同步多线程用例的成功率,以及生成同步多线程用例的效率。

可选地,所述单线程用例数据块包括系统的环境变量及路径、主存初始值、系统寄存器的初始值、寄存器的初始值、指令序列、主存最终值、系统寄存器的最终值和寄存器的最终值中一种或者任意组合。

具体的,本实施例中所述系统寄存器用于暂存系统的指令、数据和地址并根据验证场景,对各单线程配置到系统寄存器所对应的合理值;例如,当处理器工作在不同的层级时,则根据单线程用例需求修改例外层级;当遇到浮点类指令为避免其发生例外时,将对单线程用例配置相应的系统寄存器。同时,所述寄存器用于暂存用例中的指令、数据和地址。

可选地,所述将至少两条单线程用例数据块进行脚本拼接,得到完整的数据块并形成同步多线程用例,包括:

s121、保留一份系统的环境变量及路径作为同步多线程用例数据块中的系统的环境变量及路径;

s122、对应获取各单线程用例数据块中的主存初始值并合并形成同步多线程用例数据块中的主存初始值;

s123、对各单线程用例对应赋予处理器id,以及对应获取各单线程用例数据块中的指令序列、系统寄存器的初始值、寄存器的初始值、系统寄存器的最终值和寄存器的最终值,并将处理器id、指令序列、系统寄存器的初始值、寄存器的初始值、系统寄存器的最终值和寄存器的最终值对应捆绑并按设定顺序进行拼接形成同步多线程用例数据块中的指令序列和寄存器信息;

s124、对应获取各条单线程用例数据块中的主存最终值并合并形成同步多线程用例数据块中的主存最终值;

s125、将同步多线程用例数据块中的系统的环境变量及路径、主存初始值、指令序列和寄存器信息和主存最终值进行处理得到完整的数据块并形成同步多线程用例。

具体的,本实施例中所述方法主要是通过使用脚本将各单线程生成的用例数据块进行拼接。其中,具体是将系统中环境变量及路径保留一份,将各单线程用例数据块中的主存初始值合并在一起,由于各单线程用例数据块生成时都可以设置处理器的id,则可将各单线程用例数据块赋予不同的处理器id,并将处理器id和用例数据块中的指令序列以及寄存器信息捆绑在一起,然后将指令序列以及寄存器信息中的内容顺序拼接。最终将各单线程用例数据块中的主存最终值合并,即得到完整的数据块并形成同步多线程用例。综上所述,本实施例所述方法通过简单的脚本拼接,不仅快速的生成同步多线程用例,减少时间开销,还提高了生成同步多线程用例的成功率,以及生成同步多线程用例的效率。

本发明实施例还提供一种同步多线程用例生成系统,如图3所示,所述系统包括:

数据生成单元14,用于生成单线程用例数据块;

脚本拼接单元15,用于将至少两条单线程用例数据块进行脚本拼接,得到完整数据块并形成同步多线程用例。

本发明实施例提供的同步多线程用例生成系统为了达到同步多线程的充分验证的要求,主要是提高在同步多线程资源竞争验证时场景与场景的匹配率,以及场景之间的覆盖率。因此,本实施例中首先通过数据生成单元生成至少两条单线程用例数据块,并通过脚本拼接单元将各单线程用例数据块通过脚本拼接形成同步多线程用例,本实施例所述系统能够通过脚本拼接单元将多个单线程用例进行复用形成多样化同步多线程用例,进而能够根据验证需求全面覆盖验证点,同时,本实施例中所述装置通过数据生成单元生成多种不同的单线程用例并由脚本拼接单元进行脚本拼接并生成大量交错的同步多线程用例,不仅可以更快速的生成同步多线程用例,减少时间开销,并且通过开发脚本高效生成同步多线程用例还可减少人力开销;还能通过数据生成单元增加指令条数并对应生成多条单线程用例数据块,增加同步多线程用例的复杂性并触及更多的验证场景;进而提高所述系统生成同步多线程用例的成功率,以及生成同步多线程用例的效率。

可选地,如图4所示,所述数据生成单元14包括:

第一添加模块41,用于添加一用于生成占用定点运算资源线程的定向序列指令序列并生成第一单线程用例数据块;

第一判断模块42,用于判断第一单线程用例数据块是否成功生成。

可选地,所述数据生成单元还包括:

第二添加模块43,用于添加至少一用于生成干扰线程的随机指令序列并对应生成至少一个用于第二单线程用例数据块。

第二判断模块44,用于判断第二单线程用例数据块是否成功生成。

可选地,所述系统还包括:

用例库17,用于储存单线程用例数据块;

用例调取单元16,用于直接从用例库中调取至少两个单线程用例数据块并分别作为第一单线程用例数据块和第二单线程用例数据块。

可选地,所述系统还包括:

配置单元12,用于对各单线程配置系统寄存器;

划分单元13,用于对各单线程划分主存物理地址以使各单线程对应工作在不同的物理地址区间内。

可选的,所述系统还包括:

控制单元11,分别与配置单元12、划分单元13、数据生成单元14、脚本拼接单元15、用例调取单元16和用例库17连接并用于控制协调上述各单元的工作。

可选地,如图5所示,所述脚本拼接单元15包括:

保留模块51,用于保留一份系统的环境变量及路径作为同步多线程用例数据块中的系统的环境变量及路径;

第一合并模块52,用于对应获取各单线程用例数据块中的主存初始值并合并形成同步多线程用例数据块中的主存初始值;

拼接模块53,用于对各单线程用例对应赋予处理器id,以及对应获取各单线程用例数据块中的指令序列、系统寄存器的初始值、寄存器的初始值、系统寄存器的最终值和寄存器的最终值,并将处理器id、指令序列、系统寄存器的初始值、寄存器的初始值、系统寄存器的最终值和寄存器的最终值对应捆绑并按设定顺序进行拼接形成同步多线程用例数据块中的指令序列和寄存器信息;

第二合并模块54,用于对应获取各条单线程用例数据块中的主存最终值并合并形成同步多线程用例数据块中的主存最终值;

处理模块55,用于将同步多线程用例数据块中的系统的环境变量及路径、主存初始值、指令序列和寄存器信息和主存最终值进行处理得到完整的数据块并形成同步多线程用例。

本实施例的系统,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1