验证方法及装置以及相关产品转让专利

申请号 : CN201910759870.X

文献号 : CN110457070B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 不公告发明人

申请人 : 安徽寒武纪信息科技有限公司

摘要 :

本公开涉及一种验证方法及装置以及相关产品。所述产品包括控制模块,所述控制模块包括:指令缓存单元、指令处理单元和存储队列单元;所述指令缓存单元,用于存储所述人工神经网络运算关联的计算指令;所述指令处理单元,用于对所述计算指令解析得到多个运算指令;所述存储队列单元,用于存储指令队列,该指令队列包括:按该队列的前后顺序待执行的多个运算指令或计算指令。通过以上方法,本公开可以提高验证相关产品的效率。

权利要求 :

1.一种验证方法,其特征在于,所述方法应用于处理器,所述处理器包括多个处理单元,所述方法包括:根据指令序列中预设的多个指令同步点,确定所述指令序列的多个同步域,其中,各指令同步点用于指示所述指令序列中通过一个或多个处理单元执行的多条指令之间的同步关系,各同步域用于指示相邻的指令同步点之间的指令子序列;

通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果;

在所述第一执行结果存在错误时,确定所述第一执行结果中错误的第一数据以及对所述第一数据有操作的第一指令;

根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,以定位导致所述第一执行结果错误的指令,其中,所述一组同步域包括被同一个指令同步点控制的一个或多个同步域。

2.根据权利要求1所述的方法,其特征在于,通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果,包括:根据各同步域之间的依赖关系,通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果。

3.根据权利要求1所述的方法,其特征在于,根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,包括:判断第一指令依赖树中是否存在与所述第一指令来自不同的同步域的第二指令;

在所述第一指令依赖树中存在与所述第一指令来自不同的同步域的第二指令时,将所述第二指令以及与所述第二指令有数据竞争的指令确定为触发错误的第三指令。

4.根据权利要求3所述的方法,其特征在于,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,其中,根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,还包括:在所述第一指令依赖树中不存在与所述第一指令来自不同的同步域的第二指令时,判断所述第一数据是否均来自所述第二同步域;

在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。

5.根据权利要求1所述的方法,其特征在于,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,所述第一执行结果包括所述第一同步域的指令同步点的机器状态快照,所述第一执行结果的错误类别包括状态快照异常;

根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,包括:在所述第一执行结果的错误类别为状态快照异常时,判断所述第一数据是否均来自所述第二同步域;

在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。

6.根据权利要求4所述的方法,其特征在于,根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,还包括:在所述第一数据不都来自所述第二同步域时,根据所述第一数据以及所述第一指令所在的同步域,确定第二指令依赖树;

根据所述第二指令依赖树,确定触发错误的第三指令。

7.根据权利要求3所述的方法,其特征在于,所述第一执行结果的错误类别包括环境错误;

根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,还包括:在第一指令依赖树中的指令均来自同一个同步域,且所述第一执行结果的错误类别为环境错误时,将所述第一指令依赖树确定为触发错误的第三指令所在的第二指令依赖树;

根据所述第二指令依赖树,确定触发错误的第三指令。

8.根据权利要求3至7中任意一项所述的方法,其特征在于,所述方法还包括:确定所述第一指令依赖树的根节点,所述根节点中存储有与所述第一数据对应的存储地址以及对所述第一数据有操作的第一指令;

确定所述根节点的子节点,所述子节点中存储有与所述第一指令的操作数对应的存储地址以及对所述操作数有操作的指令;

在满足预设条件的情况下,根据所述根节点及各个子节点,确定所述第一指令依赖树。

9.根据权利要求6或7所述的方法,其特征在于,根据所述第二指令依赖树,确定触发错误的第三指令,包括:将所述第二指令依赖树的各个节点中的指令分别作为结束指令,得到多个指令子序列;

通过一个或多个处理单元执行各个指令子序列,得到第二执行结果;

在所述第二执行结果存在错误时,将与所述第二执行结果对应的结束指令确定为第四指令;

将各个指令子序列中最先执行的第四指令确定为第三指令。

10.根据权利要求1所述的方法,其特征在于,所述方法还包括:在所述第一执行结果正确时,执行下一级的至少一组同步域的指令子序列。

11.根据权利要求5或7所述的方法,其特征在于,状态快照异常是指所述指令同步点的机器状态快照与预设的模型状态快照之间存在数据差异,环境错误是指在当前的至少一组同步域的执行过程中验证环境报告的错误信息。

12.一种验证装置,其特征在于,所述装置应用于处理器,所述处理器包括多个处理单元,所述装置包括:同步域确定模块,用于根据指令序列中预设的多个指令同步点,确定所述指令序列的多个同步域,其中,各指令同步点用于指示所述指令序列中通过一个或多个处理单元执行的多条指令之间的同步关系,各同步域用于指示相邻的指令同步点之间的指令子序列;

同步域执行模块,用于通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果;

数据及指令确定模块,用于在所述第一执行结果存在错误时,确定所述第一执行结果中错误的第一数据以及对所述第一数据有操作的第一指令;

错误指令确定模块,用于根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,以定位导致所述第一执行结果错误的指令,其中,所述一组同步域包括被同一个指令同步点控制的一个或多个同步域。

13.根据权利要求12所述的装置,其特征在于,所述装置应用于UVM验证环境。

14.一种电子设备,其特征在于,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为调用所述存储器存储的指令,以执行权利要求1至11中任意一项所述的方法。

15.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现权利要求1至11中任意一项所述的方法。

说明书 :

验证方法及装置以及相关产品

技术领域

[0001] 本公开涉及计算机技术领域,特别是涉及一种验证方法及装置以及相关产品。

背景技术

[0002] 随着计算机技术的发展,相关的系统设计越来越复杂。在使用指令序列验证多核系统时,由于指令之间的关系十分复杂,且存在验证环境不能实时检测正确性的指令(其导致的错误可能会在指令序列中传播),验证人员需要花费大量的时间来对出现的错误进行分析及定位,从而使得验证工作复杂且耗时。

发明内容

[0003] 基于此,有必要针对上述技术问题,提供一种能够尽早发现验证过程中的错误的验证方法及装置以及相关产品。
[0004] 根据本公开的一方面,提供了一种验证方法,所述方法应用于处理器,所述处理器包括多个处理单元,所述方法包括:根据指令序列中预设的多个指令同步点,确定所述指令序列的多个同步域,其中,各指令同步点用于指示所述指令序列中通过一个或多个处理单元执行的多条指令之间的同步关系,各同步域用于指示相邻的指令同步点之间的指令子序列;通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果;在所述第一执行结果存在错误时,确定所述第一执行结果中错误的第一数据以及对所述第一数据有操作的第一指令;根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,以定位导致所述第一执行结果错误的指令。
[0005] 根据本公开的另一方面,提供了一种验证装置,所述装置应用于处理器,所述处理器包括多个处理单元,所述装置包括:同步域确定模块,用于根据指令序列中预设的多个指令同步点,确定所述指令序列的多个同步域,其中,各指令同步点用于指示所述指令序列中通过一个或多个处理单元执行的多条指令之间的同步关系,各同步域用于指示相邻的指令同步点之间的指令子序列;同步域执行模块,用于通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果;数据及指令确定模块,用于在所述第一执行结果存在错误时,确定所述第一执行结果中错误的第一数据以及对所述第一数据有操作的第一指令;错误指令确定模块,用于根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,以定位导致所述第一执行结果错误的指令。
[0006] 根据本公开的另一方面,提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行上述验证方法。
[0007] 根据本公开的另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述验证方法。
[0008] 根据本公开的实施例,通过设置指令同步点将指令序列划分为多个同步域,在至少一组同步域的指令子序列的执行结果错误时,确定出错误的数据以及对该数据有操作的指令,并根据错误的数据以及对该数据有操作的指令,执行与错误类别对应的处理,定位出导致错误的指令,从而能够使得系统验证分阶段进行,便于尽早发现验证过程中的错误。
[0009] 根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。

附图说明

[0010] 包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
[0011] 图1示出根据本公开实施例的验证方法的应用环境的示意图。
[0012] 图2示出根据本公开实施例的验证方法的流程示意图。
[0013] 图3示出根据本公开实施例的同步域的示意图。
[0014] 图4示出根据本公开实施例的依赖关系的示意图。
[0015] 图5示出根据本公开实施例的同步域可能的并行域的存储结构的示意图。
[0016] 图6示出根据本公开实施例的第一指令依赖树的示意图。
[0017] 图7示出根据本公开实施例的验证方法的应用场景的示意图。
[0018] 图8示出根据本公开实施例的验证方法的应用场景的示意图。
[0019] 图9示出根据本公开实施例的验证装置的框图。
[0020] 图10示出根据本公开实施例的一种电子设备的框图。

具体实施方式

[0021] 下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0022] 应当理解,本公开的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
[0023] 还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
[0024] 如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0025] 根据本公开实施例的验证方法可应用于处理器中,该处理器可以是通用处理器,例如CPU(Central Processing Unit,中央处理器),也可以是用于执行人工智能运算的人工智能处理器(IPU)。人工智能运算可包括机器学习运算或类脑运算等。其中,机器学习运算包括神经网络运算、k-means运算、支持向量机运算等。该人工智能处理器可包括GPU(Graphics Processing Unit,图形处理单元)、NPU(Neural-Network Processing Unit,神经网络处理单元)、DSP(Digital Signal Process,数字信号处理单元)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)芯片中的一种或组合。本公开对处理器的具体类型不作限制。
[0026] 在一种可能的实现方式中,本公开中所提及的处理器可包括多个处理单元,每个处理单元可以独立运行所分配到的各种任务,如:卷积运算任务、池化任务或全连接任务等。本公开对处理单元及处理单元所运行的任务不作限制。
[0027] 图1示出根据本公开实施例的验证方法的应用环境的示意图。如图1所示,本公开的验证方法的应用环境包括验证环境100和作为验证对象的处理器(DUT)200。其中,验证环境100用于提供验证所需的运行及支持环境,例如UVM(Universal  Verification Methodology)验证环境;处理器200可以包括多个处理单元201以及存储单元202,多个处理单元201用于执行指令序列,存储单元202用于存储数据,其可包括随机存储器(RAM,Random Access Memory)和寄存器堆。处理器200中的多个处理单元201既可共用部分存储空间,例如共用部分RAM存储空间和寄存器堆,又可同时拥有各自的存储空间。可选地,作为待验证对象的处理器可以是人工智能芯片或板卡等,此处不做具体限定。
[0028] 图2示出根据本公开实施例的验证方法的流程示意图。如图2所示,该验证方法包括:
[0029] 步骤S21,根据指令序列中预设的多个指令同步点,确定所述指令序列的多个同步域。
[0030] 其中,指令序列中的指令可包括实时检测指令和非实时监测指令。实时检测指令是指在执行过程中验证环境能实时检测执行结果的正确性的指令,非实时检测指令是指在执行过程中验证环境不能实时检测执行结果的正确性的指令。例如,指令序列中的控制指令(不输出执行结果)、难以获取执行结果的指令或实时验证会增加复杂度的指令,可作为非实时检测指令。
[0031] 可选地,各指令同步点可用于指示所述指令序列中通过一个或多个处理单元执行的多条指令之间的同步关系。可选地,指令同步点用于指示指令序列中多个处理单元执行的多条指令之间的同步关系,此时处理器的一个或多个处理单元执行多条指令时,先到达指令同步点的处理单元暂停执行,等待被该指令同步点控制的其他处理单元均到达指令同步点后,再继续执行指令。指令同步点可以是一条指令或一个操作,本公开对指令同步点的具体内容不作限制。
[0032] 可选地,指令同步点也可以用于指示指令序列中通过一个处理单元执行的多条指令之间的同步关系,即该指令同步点还可以用于实现单个处理单元执行的多条指令之间的同步。此时,处理器的处理单元可以在该指令同步点之前的指令均执行完成之后,再执行该指令同步点之后的其他指令。
[0033] 可选地,指令序列中可包括多个预设的指令同步点。指令同步点可根据指令序列中已经存在的同步点进行设置,也可根据验证需要进行设置。例如,需要对一个指令的执行结果进行观察时,可将该指令设置为指令同步点,还可将验证需要与指令序列中已经存在的同步点相结合来设置指令同步点,或采用其他方式来设置指令同步点。可选地,可将执行指令序列之前的初始点和执行完所有指令序列后的结束点(终止点)也作为指令同步点。应当理解,本公开对指令同步点的具体数量以及设置方式均不作限制。
[0034] 在一种可能的实现方式中,验证环境100可根据指令序列中预设的多个指令同步点,确定指令序列的多个同步域。其中,各同步域可用于指示相邻的指令同步点之间的指令子序列。也就是说,对于一个处理单元,可以将一个处理单元中两个相邻指令同步点之间的指令子序列作为一个同步域。可选地,验证环境可将同步域的起始点和结束点分别确定为同步域的下界和上界,通过同步域的下界和上界可确定出该同步域的指令子序列。
[0035] 步骤S22,通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果。
[0036] 在一种可能的实现方式中,根据至少一个指令同步点以及多个同步域,可确定至少一组同步域。其中,一组同步域可包括被同一个指令同步点控制的一个或多个同步域。本公开对一组同步域中包括的同步域的数量不作限制。
[0037] 进一步地,一个或多个处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果。其中,第一执行结果可包括指令序列中至少一个指令的执行结果以及至少一个存储单元(例如RAM和寄存器堆)中的数据,如,该数据可以是机器状态快照等。本公开对第一执行结果的具体内容不做限制。
[0038] 步骤S23,在所述第一执行结果存在错误时,确定所述第一执行结果中错误的第一数据以及对所述第一数据有操作的第一指令。
[0039] 在一种可能的实现方式中,在第一执行结果存在错误时,可确定出第一执行结果中出现错误的一个或多个第一数据,然后根据第一数据的存储地址,确定对第一数据有操作的第一指令。其中,第一数据的存储地址可以是RAM中的一段存储区间或一些寄存器,对第一数据有操作的第一指令可包括第一指令的操作数的存储地址与第一数据的存储地址完全相同的指令,或者第一指令的操作数的存储地址与第一数据的存储地址存在部分重叠的指令。
[0040] 步骤S24,根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,以定位导致所述第一执行结果错误的指令。
[0041] 其中,错误类别可用于指示第一执行结果中出现的错误所属的类别,例如,根据错误的性质,错误类别可包括软件错误(例如指令、数据等错误)和硬件错误;根据错误信息的来源,错误类别可包括验证环境报告的错误和在指令同步点发现的错误。本领域技术人员可根据实际情况对错误类别进行设置,本公开对此不作限制。
[0042] 在一种可能的实现方式中,第一执行结果的错误类别不同时,对应的处理方法可以不同。验证环境可根据出现错误的第一数据以及对第一数据有操作的第一指令,确定该第一执行结果的错误对应的错误类别,然后执行与该错误类别对应的处理,以定位导致该第一执行结果错误的指令。例如,在第一执行结果的错误类别为指令同步点发现的错误时,可首先确定导致错误的指令所在的同步域,再根据该同步域定位导致第一执行结果错误的指令。
[0043] 根据本公开的实施例,通过设置指令同步点将指令序列划分为多个同步域,在至少一组同步域的指令子序列的执行结果错误时,确定出错误的数据以及对该数据有操作的指令,并根据错误的数据以及对该数据有操作的指令,执行与错误类别对应的处理,定位出导致错误的指令,从而能够使得系统验证分阶段进行,便于尽早发现验证过程中的错误。并且,根据本公开的实施例,能够通过在出现错误时先定位导致错误的指令所在的同步域,再根据该同步域确定出导致错误的指令,从而减少定位错误指令耗费的时间,提高系统验证的效率。
[0044] 图3示出根据本公开实施例的同步域的示意图。如图3所示,图中示出4个指令序列:指令序列31、指令序列32、指令序列33和指令序列34。该四个指令序列可以包括多个指令同步点:指令同步点35、指令同步点36、指令同步点37和指令同步点38。可选地,各个指令序列的初始点和执行完所有指令序列后的结束点(终止点)也作为指令同步点。验证环境根据同一条指令序列中相邻的同步点,将4个指令序列划分为多个同步域,其中,指令序列31被划分为同步域A1、同步域A2和同步域A3,指令序列32被划分为同步域B1、同步域B2、同步域B3和同步域B4,指令序列33被划分为同步域C1、同步域C2和同步域C3,指令序列34被划分为同步域D1和同步域D2。
[0045] 在确定出同步域后,可根据同步域的起始点和结束点分别确定同步域的下界和上界,然后通过同步域的下界和上界确定同步域的指令子序列。例如,同步域A2的下界为指令同步点35,上界为指令同步点37,可通过指令同步点35和指令同步点37确定同步域A2的指令子序列。
[0046] 在一种可能的实现方式中,可使用如图3中所示的4个指令序列来验证包括4个处理单元的处理器,各个处理单元分别执行一个指令序列,可通过4个指令同步点来同步不同处理单元的指令序列的执行。其中,每个指令同步点可用于同步至少一个处理单元的指令序列的执行。例如,同步域A1和同步域B1被指令同步点35控制,当同步域A1中的指令比同步域B1中的指令先到达指令同步点35时,同步域A1在其指令执行完成后需在指令同步点35处等待同步域B1中的指令执行完成,反之,当同步域B1中的指令比同步域A1中的指令先到达指令同步点35时,同步域B1在其指令执行完成后需在指令同步点35处等待同步域A1中的指令执行完成。同理,指令同步点36可以控制同步域C1和D1,指令同步点37可以控制同步域A2和B2,指令同步点38可以控制同步域B3和C2。
[0047] 在一种可能的实现方式中,可将多个同步域中指令子序列的结束点被同一个指令同步点控制的同步域确定为一组同步域。如图3所示,被指令同步点35控制的同步域A1和同步域B1为一组同步域,被指令同步点36控制的同步域C1和同步域D1为一组同步域,被指令同步点37控制的同步域A2和B2为一组同步域,被指令同步点38控制的同步域B3和同步域C2位一组同步域,被所有指令序列的结束点控制的同步域A3、同步域B4、同步域C3和同步域D2为一组同步域。
[0048] 在一种可能的实现方式中,一组同步域可包括多个同步域,即一个指令同步点可控制多个相邻或不相邻的同步域。图3中一个指令同步点可以同步两个指令序列的两个同步域,在其他实施例中,一个指令同步点还可以同步两个以上的指令序列的同步域。例如,同步域A1、B1、C1可以为一组同步域,同步域A3、B3、C2、D2也可以为一组同步域,不相邻的指令序列中的同步域A1、B1、D1也可以为一组同步域。具体的同步域可以根据各个指令同步点进行划分,此处不做具体限定。
[0049] 在一种可能的实现方式中,步骤S22,可包括:根据各同步域之间的依赖关系,通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果。
[0050] 其中,各同步域之间的依赖关系可用于表示各同步域之间的相关性,可包括顺序执行关系和并行执行关系。依赖关系为顺序执行关系的多个同步域需按照先后顺序依次执行;依赖关系为并行执行关系的多个同步域可在不同的处理单元上并行执行。本公开可将与一个同步域存在并行执行关系的其他同步域称为该同步域并行域。
[0051] 在一种可能的实现方式中,验证环境100可根据各指令同步点以及各同步域,确定各同步域之间的依赖关系,即确定各同步域的执行顺序以及各同步域可能的并行域。之后,验证环境可以根据同步域之间的依赖关系,确定至少一组同步域。
[0052] 进一步地,在确定同步域可能的并行域时,可使用链表来存储同步域的可能并行域,链表头为该同步域,链表可称为该同步域可能的并行域链表。本公开还可使用其他方式来存储同步域可能的并行域,本公开对此不作限制。本公开通过存储同步域可能的并行域,可提高查找并行域的速度。更进一步地,本公开可根据各同步域之间的依赖关系,通过一个或多个处理单元执行所述至少一组同步域的指令子序列,得到第一执行结果。
[0053] 在本实施例中,能够根据各同步域之间的依赖关系在多个同步域中确定出至少一组同步域,并通过处理单元执行后,得到第一执行结果,从而可以简单准确地确定并执行至少一组同步域,提高系统验证的效率。
[0054] 图4示出根据本公开实施例的依赖关系的示意图。如图4所示,箭头所指的同步域在箭尾所指的同步域之后执行。例如,同步域B2在同步域A1或同步域B1之后执行,同步域A3在同步域A2或同步域B2之后执行。
[0055] 进一步地,本公开可以根据同步域的划分确定指令依赖关系图,在两个同步域之间存在一条通路时,通路上的同步域为顺序执行关系。例如,同步域A1至同步域C3之间存在一条通路,则通路上的同步域A1、B2、B3、C3为顺序执行关系。
[0056] 更进一步地,当两个同步域之间不存在通路时,这两个同步域可能为并行执行关系,可认为一个同步域可能是另一个同步域的并行域。例如,同步域A1与同步域C2之间不存在通路,则同步域A1与同步域C2可能为并行执行关系,同步域C2可能是同步域A1的并行域,同步域A1也可能是同步域C2的并行域。图5示出根据本公开实施例的同步域可能的并行域的存储结构的示意图。根据上述指令依赖关系图找到所述同步域可能的并行域,如图5所示,当前同步域为A1,其可能的并行域包括同步域B1、同步域C1、同步域C2、同步域D1、同步域D2,即图4中与同步域A1之间不存在通路的其他同步域。
[0057] 更进一步地,由于箭头所指的同步域在箭尾所指的同步域之后执行,根据如图4所示的依赖关系图,可将箭头指向同一个同步域的箭尾所指的同步域确定为一组同步域,从而确定出至少一组同步域。例如,有两个箭头指向同步域C1,这两个箭头的箭尾所指的同步域分别为同步域A1和B1,因此,可将同步域A1和B1确定为一组同步域。通过同样的方法可确定出同步域C1和D1为一组同步域,同步域A2和B2为一组同步域。然后可使用包括4个处理单元的处理器来执行其中可并行执行的两组同步域(A1和B1,C1和D1)的指令子序列,得到第一执行结果。
[0058] 在一种可能的实现方式中,步骤S24可包括:
[0059] 判断第一指令依赖树中是否存在与所述第一指令来自不同的同步域的第二指令;
[0060] 在所述第一指令依赖树中存在与所述第一指令来自不同的同步域的第二指令时,将所述第二指令以及与所述第二指令有数据竞争的指令确定为触发错误的第三指令。
[0061] 其中,数据竞争可用于表示多个指令对同一数据地址进行操作,且所述多个指令的操作中至少包括一个写操作。可选地,数据竞争可包括写后写操作、读后写操作以及写后读操作。对于写后写操作,有数据竞争的两条指令位于第一指令依赖树的同一个节点中;对于读后写操作或写后读操作,有数据竞争的两条指令位于第一指令依赖树中的一组父子节点中,例如,其中的一条指令位于第一指令依赖树中的一个父节点中而另一条指令位于该父节点的子节点中。
[0062] 本实施例中,第一指令依赖树可以包含至少一条指令,该至少一条指令可以是来自第一指令所在的当前同步域和/或当前同步域的并行域的指令,其中,当前同步域的并行域的确定可以参见上文,可在当前同步域的并行域链表中查找当前同步域的并行域。当确定第一指令依赖树中存在与第一指令来自不同的同步域的第二指令时,即确定第一指令依赖树中存在来自该第一指令所在同步域的并行域的第二指令时,则可能是由于并行域之间的指令存在数据竞争导致第一执行结果错误,从而可以将所述第二指令以及与所述第二指令有数据竞争的指令确定为触发错误的第三指令。
[0063] 在一种可能的实现方式中,在确定出第一执行结果中错误的第一数据以及对第一数据有操作的第一指令后,验证环境可根据第一数据以及第一指令,建立第一指令依赖树。其中,第一指令依赖树是通过树结构来描述与第一数据或第一指令相关的指令之间的依赖关系。指令之间的依赖关系有多种,例如,一条指令的运算结果作为另一条指令的操作数,或多条指令同时对地址区间重叠的数据执行写操作。本公开对指令之间的依赖关系不作限制。
[0064] 在一种可能的实现方式中,验证环境可以从第一数据所在的数据位置开始,根据指令之间的依赖关系,向上追溯指令序列,建立第一指令依赖树。可选地,验证环境可以针对各第一数据分别建立相应的第一指令依赖树。应当理解,本公开对建立第一指令依赖树的具体方法以及第一指令依赖树的具体数量均不作限制。
[0065] 可选地,验证环境根据所述第一数据以及所述第一指令,建立第一指令依赖树,可包括:确定所述第一指令依赖树的根节点,所述根节点中存储有与所述第一数据对应的存储地址以及对所述第一数据有操作的第一指令;确定所述根节点的子节点,所述子节点中存储有与所述第一指令的操作数对应的存储地址以及对所述操作数有操作的指令;在满足预设条件的情况下,根据所述根节点及各个子节点,确定所述第一指令依赖树。
[0066] 在该实现方式中,建立第一指令依赖树时,可首先确定根节点,可将与第一数据对应的存储地址以及对第一数据有操作的第一指令存储在根节点中,即第一指令依赖树的根节点中存储有与第一数据对应的存储地址以及对第一数据有操作的第一指令。其中,与第一数据对应的存储地址可以是RAM中的一段地址区间或者寄存器编号;对第一数据有操作的第一指令可以是第一指令对应的程序计数器的值(即PC值)。其中,各个指令对应的PC值是指各个指令对应的程序计数器的值,程序计数器用于存放和指示的下一条要执行的指令的地址。
[0067] 在确定根节点后,可确定根节点的子节点,可将与第一指令的操作数对应的存储地址以及对该操作数有操作的指令存储在根节点的子节点中,其中,每个操作数对应一个子节点。然后可根据一个节点的子节点中存储的数据包括与该节点中指令的操作数对应的存储地址以及对该操作数有操作的指令的规则,确定该节点的一个或多个子节点。使用这种方式,可不断拓展新的子节点。子节点中的数据以及指令的存储方式与根节点类似,此处不再赘述。
[0068] 在满足预设条件的情况下,可停止拓展子节点,并根据根节点及各个子节点,确定第一指令依赖树。其中,预设条件可用于指示新拓展的子节点中的指令已经被验证是正确的,例如,预设条件可以是新拓展的子节点中的指令是来自与当前同步域存在顺序执行关系的同步域中的指令。由于当前同步域之前执行的同步域在其指令同步点已被验证是正确的,可认为其中不存在触发错误的指令,因此,在满足该预设条件时,可停止拓展子节点。本领域技术人员可根据实际情况对预设条件进行设置,本公开对预设条件的具体内容不作限制。
[0069] 图6示出根据本公开实施例的第一指令依赖树的示意图。如图6所示,根节点61中存储的是第一数据对应的存储地址(地址区间1)以及对第一数据有操作的第一指令M的PC值m;根节点61有节点62和节点63两个子节点,节点62中存储的是第一指令M的一个操作数对应的存储地址(寄存器1)以及对该操作数有操作的指令N的PC值n和指令Q的PC值q,节点63中存储的是第一指令M的另一个操作数对应的存储地址(地址区间2)以及对该操作数有操作的指令R的PC值r和指令S的PC值s;节点62有节点64和节点65两个子节点,节点64中存储的是指令N和/或指令Q的一个操作数对应的存储地址(地址区间3)以及对该操作数有操作的指令T的PC值t和指令X的PC值x,节点65中存储的是指令N和/或指令Q的另一个操作数对应的存储地址(地址区间4)以及对该操作数有操作的指令Y的PC值y;节点63有节点66一个子节点,节点66中存储的是指令R和/或指令S的操作数对应的存储地址(地址区间5)以及对该操作数有操作的指令Z的PC值z。
[0070] 在本实施例中,能够根据第一数据以及第一指令来确定第一指令依赖树的根节点及各个子节点,并在满足预设条件时,根据根节点及各个子节点建立第一指令依赖树,可使得建立的第一指令依赖树能简单、准确地描述指令之间的依赖关系,便于查找触发错误的指令。
[0071] 进一步地,验证环境可在建立第一指令依赖树后,判断第一指令依赖树中是否存在与第一指令来自不同的同步域的第二指令,以定位触发错误的第三指令。本公开可将第一指令所在的同步域作为当前同步域,根据第一指令依赖树中的指令所在的同步域,判断第一指令依赖树中是否存在与第一指令来自不同的同步域的第二指令。当所述第一指令依赖树中存在与第一指令来自不同的同步域的第二指令时,则该第一执行结果的错误可能是由于数据竞争导致的,从而可以将第二指令以及与第二指令存在数据竞争的指令确定为触发错误的第三指令。通过这种方式确定的数据竞争可包括已存在的数据竞争和/或可能存在的数据竞争,由于硬件行为的难预测性,发现执行序列中已存在的数据竞争和/或可能存在的数据竞争,可提高查找错误指令的效率。
[0072] 更进一步地,验证环境可在第一指令依赖树中存在与第一指令来自不同的同步域的第二指令时,进一步确定第一指令依赖树中与第二指令有数据竞争的指令。其中,数据竞争可用于表示多个指令对同一数据地址进行操作,且多个指令的操作中至少包括一个写操作。
[0073] 在一种可能的实现方式中,确定与第二指令有数据竞争的指令时,可首先确定第二指令操作的数据地址,再确定第一指令依赖树中对该数据地址进行操作的第二指令之外的其他指令,且其他指令以及第二指令的操作中至少包括一个写操作,然后将确定出的其他指令确定为与第二指令有数据竞争的指令。可选地,在第一指令依赖树中存在与第一指令来自不同的同步域的多个第二指令时,可分别确定与各个第二指令有数据竞争的指令。再进一步地,验证环境可在第一指令依赖树中存在与第二指令有数据竞争的指令时,将第二指令以及与第二指令有数据竞争的指令确定为触发错误的第三指令。
[0074] 举例来说,本公开可根据第一数据以及第一指令,建立第一指令依赖树,并确定当前同步域为同步域A2,判断同步域A2的第一指令依赖树中是否存在来自其他同步域的第二指令。在第一指令依赖树中存在来自其他同步域(例如同步域B2)中的第二指令时,则可以将第二指令以及与第二指令有数据竞争的指令确定为触发错误的第三指令。
[0075] 在本实施例中,能够根据第一数据以及第一指令,建立第一指令依赖树,并判断第一指令依赖树中是否存在来自其他同步域的第二指令,在存在第二指令时,将第二指令以及与第二指令有数据竞争的指令确定为触发错误的第三指令。通过这种方式,可确定出各同步域有数据竞争的指令,从而减少查找指令之间数据竞争的开销。
[0076] 在一种可能的实现方式中,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,其中,步骤S24,还可包括:
[0077] 在所述第一指令依赖树中不存在与所述第一指令来自不同的同步域的第二指令时,判断所述第一数据是否均来自所述第二同步域;
[0078] 在所述第一数据均来自所述第二同步域时,则执行下一级的至少一组同步域的指令子序列。
[0079] 在一种可能的实现方式中,至少一组同步域可包括一组第一同步域以及与第一同步域并行执行的至少一组第二同步域。其中,第一同步域是指将当前遇到的指令同步点作为上界的同步域。
[0080] 举例来说,如图3中所示的同步域,从指令序列的初始点开始,可执行两组同步域,分别为同步域A1和B1,同步域C1和D1,当前遇到的指令同步点为指令同步点35,那么,以指令同步点35为上界的同步域A1和B1为第一同步域,与第一同步域并行执行的同步域C1和D1为第二同步域,处理单元执行的至少一组同步域包括一组第一同步域(A1和B1)以及与第一同步域并行执行的一组第二同步域(C1和D1);当同步域A1和B1的指令子序列执行完成后,继续执行指令,当前遇到的指令同步点为指令同步点36,那么,以指令同步点36为上界的同步域C1和D1为第一同步域,与第一同步域并行执行的同步域A2和B2为第二同步域,处理单元执行的至少一组同步域包括一组第一同步域(C1和D1)以及与第一同步域并行执行的一组第二同步域(A2和B2)。
[0081] 进一步地,验证环境可在第一指令依赖树中不存在与第一指令来自不同的同步域的第二指令时,判断第一数据是否均来自第二同步域,即判断第一数据所在的同步域是否均为第二同步域。在第一数据均来自第二同步域时,如果第二同步域中各指令均按照指定的地址读写数据且数据正确,可认为错误的第一数据是由于第二同步域的执行进度与参考模型中第二同步域的执行进度不一致导致的,不存在运行错误,可执行下一级的至少一组同步域的指令子序列。如果第二同步域中存在可能的运行错误,由于第二同步域并未执行完成,可继续执行至第二同步域的上界的指令同步点,可能的运行错误可以通过对该指令同步点数据状态的判断被发现,因此在该情况下,可执行下一级的至少一组同步域的指令子序列。
[0082] 在本实施例中,能够在第一指令依赖树中不存在与第一指令来自不同的同步域的第二指令时,判断错误的第一数据是否均来自第二同步域(即第一同步域的并行域),并在第一数据均来自第二同步域时,执行下一级的至少一组同步域的指令子序列,从而可以在第二同步域的执行进度与参考模型不一致或者第二同步域中出现可能的运行错误时,继续执行验证过程。
[0083] 在一种可能的实现方式中,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,所述第一执行结果包括所述第一同步域的指令同步点的机器状态快照,所述第一执行结果的错误类别包括状态快照异常,上述步骤S24可包括:
[0084] 在所述第一执行结果的错误类别为状态快照异常时,判断所述第一数据是否均来自所述第二同步域;在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。
[0085] 在一种可能的实现方式中,第一执行结果可包括第一同步域的指令同步点的机器状态快照。其中,机器状态快照可以是存储验证对象(处理器)的存储单元(例如RAM和寄存器堆)中的各个数值的文件,可按照验证对象的文件组织方式存储在文件目录中。
[0086] 可选地,第一执行结果的错误类别可以包括状态快照异常。其中,状态快照异常可以是指指令同步点的机器状态快照与预设的模型状态快照之间存在数据差异。其中,模型状态快照可以是指参考模型执行多个同步域中的至少一组同步域的指令子序列至指令同步点所获得的机器状态快照,该模型状态快照可按照与验证对象相同的文件组织方式存储在文件目录中。在一个指令同步点,可将获取的机器状态快照与对应的模型状态快照进行比较,当两者之间存在数据差异时,可认为状态快照异常。
[0087] 在一种可能的实现方式中,在第一执行结果的错误类别为状态快照异常时,可判断机器状态快照中出现错误的第一数据是否均来在于第二同步域。在第一数据均来自第二同步域时,如果第二同步域中各指令均按照指定的地址读写数据且数据正确,可认为状态快照异常是由于验证对象中第二同步域的执行进度与参考模型中第二同步域的执行进度不一致导致的,不存在运行错误,可以继续执行下一级的至少一组同步域的指令子序列。如果第二同步域中存在可能的运行错误,由于第二同步域并未执行完成,该可能的运行错误会出现在第二同步域的指令同步点的机器状态快照中,并通过机器状态快照与模型状态快照之间的比较被发现,因此在该情况下,可执行下一级的至少一组同步域的指令子序列。
[0088] 举例来说,如图3中所示的同步域,验证对象执行的至少一组同步域包括一组第一同步域(同步域A1和B1)以及一组第二同步域(同步域C1和D1)。在运行至指令同步点35处时,将指令同步点35的机器状态快照与对应的模型状态快照进行比较,得到第一执行结果。在第一执行结果中出现状态快照异常时,可确定第一执行结果中错误的第一数据以及对第一数据有操作的第一指令,并判断第一数据是否均来自于第二同步域C1和D1。在第一数据均来自于第二同步域C1和D1,且第二同步域C1和D1中各指令均按照指定的地址读写数据且数据正确,可认为状态快照异常是由于第二同步域C1和D1的执行进度与参考模型中第二同步域的执行进度不一致导致的,不存在运行错误,可以执行下一级的至少一组同步域的指令子序列。其中,下一级的至少一组同步域包括以指令同步点36为上界的第一同步域C1和D1以及与第一同步域并行执行的第二同步域A2和B2。
[0089] 在本实施例中,能够在第一执行结果的错误类别为状态快照异常,且第一数据均来自第二同步域时,执行下一级的至少一组同步域的指令子序列,从而可以在出现第二同步域的执行进度不一致导致的状态快照异常,或者第二同步域中存在可能的运行错误时,继续执行验证过程,进而提高系统验证的效率。
[0090] 在一种可能的实现方式中,步骤S24还可包括:在所述第一数据不都来自所述第二同步域时,根据所述第一数据以及所述第一指令所在的同步域,确定第二指令依赖树;根据所述第二指令依赖树,确定触发错误的第三指令。
[0091] 在该实现方式中,在第一执行结果中错误的第一数据不都来自第二同步域时,可认为第一同步域中存在触发错误的指令。在第一同步域中,可根据第一数据以及第一指令所在的同步域,判断第一指令依赖树中的指令所在的同步域是否均与第一数据以及第一指令所在的同步域相同。在两者的同步域相同时,可将该第一指令依赖树确定为触发错误的第三指令所在的第二指令依赖树。
[0092] 进一步地,在确定第二指令依赖树后,可在第二指令依赖树中选取不同的指令作为结束指令,重复执行验证过程,确定触发错误的第三指令。举例来说,确定触发错误的第三指令时,可从第二指令依赖树中选取任一节点,将该节点中的一个指令作为结束指令,从当前同步域的下界开始,通过一个或多个处理单元执行指令子序列,得到执行结果,并判断执行结果中是否存在错误。
[0093] 如果执行结果中不存在错误,可将该节点中的下一个指令作为结束指令,重复执行上述过程。在该节点中的所有指令作为结束指令时的执行结果均正确时,可认为以该节点为根的子树中不包含触发错误的第三指令,该节点为根的子树被剪枝。通过将不包含触发错误的指令的子树从第一指令依赖树中剪枝,可以减少第一指令依赖树的节点,从而缩小查找第三指令的搜索范围。
[0094] 如果执行结果中存在错误,将该结束指令确定为执行结果错误的指令,然后可选取该节点的下一个指令作为结束指令,重复执行上述过程。对选取的节点执行完上述操作后,可选取其子节点或其他节点中的一个指令作为结束指令,重复执行上述过程,直到选取出第二指令依赖树中所有的执行结果错误的指令。在执行结果错误的指令中,将最先执行的指令(即PC值最小的指令)确定为触发错误的第三指令。
[0095] 在一种可能的实现方式中,在确定第二指令依赖树后,可通过探针标记和探针指令,判断第二指令依赖树的各个节点中是否存在触发错误的指令,在存在触发错误的指令时,确定出第二指令依赖树中所有触发错误的指令,并将触发错误的指令中最先执行的指令确定为触发错误的第三指令,其中,探针指令为能够实时获得执行结果的指令。
[0096] 举例来说,可选取第二指令依赖树中的任一节点,将该节点的探针标记设置为需要加入探针指令;然后分别在该节点的各个指令的后面加入探针指令,并以当前同步域的下界为起始点,以探针指令为结束点,确定多个指令子序列;通过一个或多个处理单元执行所述多个指令子序列,得到与各个指令对应的探针指令的执行结果。
[0097] 在与各个指令对应的探针指令的执行结果均为正确时,可认为该节点中不存在触发错误的指令,将该节点的所有子节点的探针标记均设置为无需加入探针指令。在第二指令依赖树中选取未设置探针标记的其他节点,重复执行上述过程。
[0098] 在与各个指令对应的探针指令的执行结果存在错误时,可认为该节点中存在触发错误的指令,确定出与执行结果错误的探针指令对应的指令,并取消各个指令后面的探针指令。然后可将该节点的子节点或其他节点(无子节点时选取的未设置探针标记的节点)的探针标记设置为需要加入探针指令,重复执行上述过程,确定出与执行结果错误的探针指令对应的指令,直到第二指令依赖树中的所有节点均为已设置探针标记的节点,且已对探针标记为需要加入探针指令的节点进行上述处理。
[0099] 在所有与执行结果错误的探针指令对应的指令中,将最先执行的指令(即PC值最小的指令)确定为触发错误的第三指令。
[0100] 举例来说,可将图6中所示的第一指令依赖树确定为第二指令依赖树,根据该第二指令依赖树,确定触发错误的第三指令时,可从根节点61开始,将根节点61的探针标记设置为需要加入探针指令,然后在指令M后面加入探针指令,并以指令M所在同步域的下界为起始点,以探针指令为结束点,确定指令子序列,通过一个或多个处理单元执行该指令子序列,得到执行结果,与指令M对应的探针指令的执行结果错误,然后取消指令M后面的探针指令,将根节点61的两个子节点(子节点62和子节点63)的探针标记均设置为需要加入探针指令,重复执行上述处理(与根节点61类似的处理),分别得到与指令N、指令Q、指令R、指令S对应的探针指令的执行结果,其中,与指令N对应的探针指令的执行结果错误,与其他指令对应的探针指令的执行结果正确,可认为子节点63中不存在触发错误的指令,将其子节点66的探针标记设置为无需加入探针指令;认为子节点62中存在触发错误的指令,将其子节点64和子节点65的探针标记均设置为需要加入探针指令,重复执行上述处理,分别得到与指令T、指令X、指令Y对应的探针指令的执行结果,其中,与指令Y对应的探针指令的执行结果错误,与其他指令对应的探针指令的执行结果正确。在完成对第二指令依赖树中所有节点的标记及处理后,可从与执行结果错误的探针指令对应的指令M、指令N、指令Y中,选取PC值最小的指令(例如指令Y),将其作为触发错误的第三指令。
[0101] 应当理解,在对第二指令依赖树中的各个节点进行标记及处理时,可从根节点开始依次向下,也可根据需要选取节点,本公开对节点的选取不作限制。在从与执行结果错误的探针指令对应的指令中选取最先执行的指令时,可在节点标记及处理过程中边处理边选取,也可以在所有节点标记及处理完成后再进行选取,本公开对此不作限制。
[0102] 在一种可能的实现方式中,在确定触发错误的第三指令之前,可对第二指令依赖树中的指令进行检查,删除其中存储的实时检测指令,这是因为第一执行结果出现错误之前运行的实时检测指令的正确性以及被验证过了。如果一个节点及其子节点中的所有指令都是立即检测指令,那么以该节点为根的子树可被剪枝。通过删除第二指令依赖树中的实时检测指令,可减少第二指令依赖树中的指令。
[0103] 在本实施例中,能够在第一数据不都来自第二同步域时,根据第一数据以及第一指令所在的同步域,确定第二指令依赖树,并根据第二指令依赖树,确定触发错误的指令,从而可以缩小查找触发错误的指令的搜索范围,提高定位触发错误的指令的效率。
[0104] 在一种可能的实现方式中,所述第一执行结果的错误类别包括环境错误,步骤S24,还可包括:
[0105] 在第一指令依赖树中的指令均来自同一个同步域,且所述第一执行结果的错误类别为环境错误时,将所述第一指令依赖树确定为触发错误的第三指令所在的第二指令依赖树;根据所述第二指令依赖树,确定触发错误的第三指令。
[0106] 在一种可能的实现方式中,所述第一执行结果的错误类别可包括环境错误。环境错误是指在当前的至少一组同步域的执行过程中验证环境报告的错误信息。也就是说,在当前的至少一组同步域的执行过程中,当一条实时检测指令的执行结果错误时,验证过程可在该指令处停止,验证环境实时报告该指令执行时出现的错误信息,例如,验证环境实时报告出现错误信息的实时检测指令的程序计数器的值(即PC值),该错误信息即为环境错误。
[0107] 可选地,在第一指令依赖树中的指令均来自同一个同步域,且第一执行结果的错误类别为环境错误时,可认为第一指令依赖树中包括了触发错误的第三指令,可将第一指令依赖树确定为触发错误的第三指令所在的第二指令依赖树,然后根据第二指令依赖树,确定触发错误的第三指令。
[0108] 在本实施例中,能够在第一指令依赖树中的指令均来自同一个同步域,且在第一执行结果的错误类别为环境错误时,将第一指令依赖树确定第二指令依赖树,并根据第二指令依赖树,确定触发错误的第三指令,从而可在出现环境错误时,快速确定触发错误的指令所在的范围,提高定位触发错误的指令的效率。
[0109] 可选地,根据所述第二指令依赖树,确定触发错误的第三指令,可包括:将所述第二指令依赖树的各个节点中的指令分别作为结束指令,得到多个指令子序列;通过一个或多个处理单元执行各个指令子序列,得到第二执行结果;在所述第二执行结果存在错误时,将与所述第二执行结果对应的结束指令确定为第四指令;将各个指令子序列中最先执行的第四指令确定为第三指令。进一步可选地,在当前同步域有多个第二指令依赖树时,可从中任意选取一个第二指令依赖树,然后根据该第二指令依赖树,来确定触发错误的第三指令。
[0110] 在一种可能的实现方式中,可将第二指令依赖树中的各个节点中的指令分别作为结束指令,得到多个指令子序列,其中,指令子序列可以将指令序列的起始点或当前第一同步域的下界(需使用机器状态快照恢复处理单元在下界处的初始状态)作为起始点。然后可通过一个或多个处理单元执行各个指令子序列,得到第二执行结果。
[0111] 在一种可能的实现方式中,得到第二执行结果后,可将第二执行结果的机器状态快照与相应的模型状态快照进行比较,判断第二执行结果是否存在错误。在第二执行结果存在错误时,可将与第二执行结果对应的结束指令确定为第四指令,并将各个指令子序列中最先执行的第四指令,即将PC值最小的第四指令,确定为触发错误的第三指令。
[0112] 举例来说,可将图6中所示的第一指令依赖树确定为第二指令依赖树,根据该第二指令依赖树,确定导致错误的第三指令时,可首先将第二指令依赖树中的各指令(即指令M、指令N、指令Q、指令R、指令S、指令T、指令X、指令Y和指令Z)分别作为结束指令,将上一个执行正确的指令同步点作为起始点,得到多个指令子序列;然后通过一个或多个处理单元执行各个指令子序列,得到第二执行结果,判断第二执行结果是否存在错误,在第二执行结果存在错误时,将与第二执行结果对应的指令确定为第四指令,例如,结束指令分别为指令R、指令S、指令Z的指令子序列的第二执行结果错误,可将指令R、指令S、指令Z确定为第四指令,并将指令R、指令S、指令Z中PC值最小的指令Z确定为触发错误的第三指令。
[0113] 在本实施例中,将第二指令依赖树中的指令作为结束指令,再次执行第一同步域的执行子序列,得到第二执行结果,在第二执行结果出现错误时,将与第二执行结果对应的结束指令作为第四指令,并将最先执行的第四指令确定为第三指令。通过设置不同的结束指令,并重复执行第一同步域的指令子序列,可以在较小的指令范围中(第一同步域的指令子序列中)确定出触发错误的第三指令,从而提高定位错误指令的效率。
[0114] 在一种可能的实现方式中,在定位触发错误的指令时,如果只定位一条触发错误的指令即一次解决一个错误,可使用上述方法对一个第二指令依赖树进行分析,确定触发错误的指令。如果需要定位多条触发错误的指令即同时解决多个错误,可以使用上述方法对多个第二指令依赖树进行分析,确定出多个触发错误的指令。本领域技术人员可以根据实际需要设置要分析的第二指令依赖树的数据,本公开对此不作限制。
[0115] 在一种可能的实现方式中,所述方法还可包括:在所述第一执行结果正确时,执行下一级的至少一组同步域的指令子序列。也就是说,通过指令同步点将指令序列划分为多个同步域后,可确定出多组同步域,在验证过程中,可执行至少一组同步域的指令子序列,得到第一执行结果。在第一执行结果正确时,可执行下一级的至少一组同步域的指令子序列,直到所有同步域的指令子序列执行完成。
[0116] 在本实施例中,在至少一组同步域的指令子序列的执行结果正确时,执行下一级的至少一组同步域的指令子序列,使得验证过程可以分阶段进行,便于尽早发现验证过程中的错误,从而提高系统验证的效率。
[0117] 图7示出根据本公开实施例的验证方法的应用场景的示意图。所述验证方法用于验证包括多个处理单元的处理器。
[0118] 如图7所示,在对处理器进行验证时,可首先在步骤S701中,根据指令序列中预设的指令同步点,确定多个同步域,然后在步骤S702中,通过一个或多个处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果。
[0119] 得到第一执行结果后,可在步骤S703中,判断第一执行结果是否正确。如果第一执行结果出现错误,则执行步骤S704,确定第一执行结果中错误的第一数据以及对第一数据有操作的第一指令,并根据第一数据以及第一指令,建立第一指令依赖树。
[0120] 建立第一指令依赖树后,可在步骤S705中,判断第一指令依赖树中是否存在与第一指令来自不同的同步域的第二指令。如果存在第二指令,则执行步骤S709,确定出有数据竞争的指令,结束本次验证;如果不存在,则执行步骤S706,判断第一数据是否均来自与第一同步域并行执行的第二同步域。
[0121] 在步骤S705中,如果不存在第二指令,则在步骤S706中判断第一数据是否均来自与第一同步域并行执行的第二同步域。如果第一数据均来自第二同步域,则可执行步骤S711,执行下一级的至少一组同步域的指令子序列。
[0122] 在步骤S706中,如果第一数据不都来自第二同步域,则可在步骤S707中,根据第一数据以及第一指令所在的同步域,确定触发错误的第三指令所在的第二指令依赖树,然后在步骤S708中,根据第二指令依赖树,确定触发错误的第三指令,结束本次验证。
[0123] 在步骤703中,如果第一执行结果正确,可执行步骤S710,判断指令序列是否执行完成,如果指令序列未执行完成,则执行步骤S711,执行下一级的至少一组同步域的指令子序列;如果指令序列已执行完成,则结束对处理器的验证。
[0124] 图8示出根据本公开实施例的验证方法的应用场景的示意图。如图8所示,在UVM验证环境中应用所述验证方法时,UVM验证环境800包括分析器801、参考模型802、数据库803、计分板804。
[0125] 分析器801可包括指令分析器和调度信息分析器。其中,指令分析器可用于执行指令分析相关的处理,例如,根据多个指令同步点,将指令序列划分为多个同步域;根据第一数据以及对第一数据有操作的第一指令,建立第一指令依赖树;从第一指令依赖树中确定出符合条件的第二指令依赖树;确定指令之间的数据竞争,以及根据第二指令依赖树确定触发错误的指令等。调度信息分析器可用于执行调度信息相关的处理,例如,分析调度信息生成验证对象或参考模型的配置文件。
[0126] 参考模型802可用于实现与验证对象完全相同的设计。例如,参考模型可使用C++多线程来实现,每个线程运行一个处理单元的指令序列,线程与线程之间可以根据共享的数组来进行通信,参考模型的存储结构、访问权限与验证对象完全一致,同时,参考模型还可根据配置文件来调度多线程来保证每个线程运行与其对应的处理单元相同的指令序列,参考模型还可以从一个特定的模型状态快照启动并重复在某个特定的指令同步点之后的指令子序列执行过程。本公开对参考模型的具体实现方式不作限制。
[0127] 数据库803可用于存储机器状态快照以及模型状态快照。例如,数据库可使用方便保存树状目录结构的Git本地文件系统,可在Git本地文件系统中建立两个分支来分别保存机器状态快照和模型状态快照,在同一个指令同步点新生成的新快照会更新存储在数据库中的旧快照。此外,Git本地文件系统还提供多种操作命令来对数据库中的数据进行操作,例如,git-commit命令可用于保存历史数据,git-checkout命令可用于获取历史数据,git-diff命令可用于比较机器状态快照和模型状态快照的异同。本公开对数据库的具体类型不作限制。
[0128] 计分板804可用于检查实时检测指令执行结果的正确性以及比较同一个指令同步点的机器状态快照和模型状态快照。在进行快照比较后,计分板804还可用于判断是否继续执行验证过程。当机器状态快照和模型状态快照之间存在数据差异时,计分板804可将数据差异所在的RAM地址区间和/或寄存器编号发给分析器801用于建立第一指令依赖树。计分板804可使用传统的UVM计分板来构建,通过该方法构建的计分板可支持UVM断言的检查过程。本公开对计分板的具体实现方式不作限制。
[0129] 根据本公开的实施例,通过设置指令同步点,使得验证过程可以分阶段进行,每个阶段执行至少一组同步域的指令子序列,从而可以尽早地发现验证过程中的错误(例如,实时检测指令执行结果错误引发的环境错误,指令同步点的机器状态快照和模型状态快照存在数据差异的状态快照异常),进而减少查找错误指令耗费的时间,提高系统验证的效率。
[0130] 根据本公开的实施例,还可以通过对第一指令依赖树中的指令所在同步域的判断,尽早发现指令之间的数据竞争,避免了数据竞争出现在执行冗长指令序列中的情况。
[0131] 根据本公开的实施例,指令序列中的实时检测指令和非实时检测指令的执行结果错误时,均可被发现。对于指令序列中的实时检测指令的执行结果错误,可通过环境错误被发现。对于指令序列中的非实时检测指令的执行结果错误,可在当前同步域的上界处(即当前遇到的指令同步点处),将机器状态快照与模型状态快照进行比较的方式被发现;还可在与其存在依赖关系的实时检测指令的执行结果错误时,通过环境报错被发现,在该情况下,触发环境错误的指令可能不是实际触发错误的指令,需建立指令依赖树进行分析,确定出触发错误的指令。此外,如果在非实时检测指令的执行过程中,未遇到与其存在依赖关系的实时检测指令,且指令序列已经执行完,可通过将执行结束点的机器状态快照和模型状态快照进行比较的方式,发现非实时检测指令的执行结果错误。
[0132] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制,因为依据本公开,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本公开所必须的。
[0133] 进一步需要说明的是,虽然各流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,各流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0134] 图9示出根据本公开实施例的验证装置的框图。所述装置应用于处理器,所述处理器包括多个处理单元。如图9所示,所述装置包括:
[0135] 同步域确定模块91,用于根据指令序列中预设的多个指令同步点,确定所述指令序列的多个同步域,其中,各指令同步点用于指示所述指令序列中通过一个或多个处理单元执行的多条指令之间的同步关系,各同步域用于指示相邻的指令同步点之间的指令子序列;
[0136] 同步域执行模块92,用于通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果;
[0137] 数据及指令确定模块93,用于在所述第一执行结果存在错误时,确定所述第一执行结果中错误的第一数据以及对所述第一数据有操作的第一指令;
[0138] 错误指令确定模块94,用于根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,以定位导致所述第一执行结果错误的指令。
[0139] 在一种可能的实现方式中,所述同步域执行模块92,包括:指令序列执行子模块,用于根据各同步域之间的依赖关系,通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果。
[0140] 在一种可能的实现方式中,所述错误指令确定模块94,包括:指令判断子模块,用于判断第一指令依赖树中是否存在与所述第一指令来自不同的同步域的第二指令;第一错误指令确定子模块,用于在所述第一指令依赖树中存在与所述第一指令来自不同的同步域的第二指令时,将所述第二指令以及与所述第二指令有数据竞争的指令确定为触发错误的第三指令。
[0141] 在一种可能的实现方式中,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,其中,所述错误指令确定模块94,还包括:第一同步域判断子模块,用于在所述第一指令依赖树中不存在与所述第一指令来自不同的同步域的第二指令时,判断所述第一数据是否均来自所述第二同步域;第一执行子模块,用于在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。
[0142] 在一种可能的实现方式中,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,所述第一执行结果包括所述第一同步域的指令同步点的机器状态快照,所述第一执行结果的错误类别包括状态快照异常,所述错误指令确定模块94,包括:第二同步域判断子模块,用于在所述第一执行结果的错误类别为状态快照异常时,判断所述第一数据是否均来自所述第二同步域;第二执行子模块,用于在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。
[0143] 在一种可能的实现方式中,所述错误指令确定模块94,还包括:第一指令依赖树确定子模块,用于在所述第一数据不都来自所述第二同步域时,根据所述第一数据以及所述第一指令所在的同步域,确定第二指令依赖树;第二错误指令确定子模块,用于根据所述第二指令依赖树,确定触发错误的第三指令。
[0144] 在一种可能的实现方式中,所述第一执行结果的错误类别包括环境错误,所述错误指令确定模块94,还包括:第二指令依赖树确定子模块,用于在第一指令依赖树中的指令均来自同一个同步域,且所述第一执行结果的错误类别为环境错误时,将所述第一指令依赖树确定为触发错误的第三指令所在的第二指令依赖树;第二错误指令确定子模块,用于根据所述第二指令依赖树,确定触发错误的第三指令。
[0145] 在一种可能的实现方式中,所述装置还包括:根节点确定模块,用于确定所述第一指令依赖树的根节点,所述根节点中存储有与所述第一数据对应的存储地址以及对所述第一数据有操作的第一指令;子节点确定模块,用于确定所述根节点的子节点,所述子节点中存储有与所述第一指令的操作数对应的存储地址以及对所述操作数有操作的指令;指令依赖树建立模块,用于在满足预设条件的情况下,根据所述根节点及各个子节点,确定所述第一指令依赖树。
[0146] 在一种可能的实现方式中,所述第二错误指令确定子模块,用于:将所述第二指令依赖树的各个节点中的指令分别作为结束指令,得到多个指令子序列;通过一个或多个处理单元执行各个指令子序列,得到第二执行结果;在所述第二执行结果存在错误时,将与所述第二执行结果对应的结束指令确定为第四指令;将各个指令子序列中最先执行的第四指令确定为第三指令。
[0147] 在一种可能的实现方式中,所述装置还包括:执行模块,用于在所述第一执行结果正确时,执行下一级的至少一组同步域的指令子序列。
[0148] 在一种可能的实现方式中,状态快照异常是指所述指令同步点的机器状态快照与预设的模型状态快照之间存在数据差异,环境错误是指在当前的至少一组同步域的执行过程中验证环境报告的错误信息。
[0149] 在一种可能的实现方式中,所述装置应用于UVM验证环境。
[0150] 应该理解,上述的装置实施例仅是示意性的,本公开的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
[0151] 在一种可能的实现方式中,还公开了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行上述验证方法。
[0152] 在一种可能的实现方式中,还公开了一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述验证方法。
[0153] 图10示出根据本公开实施例的一种电子设备1900的框图。例如,电子设备1900可以被提供为一服务器。参照图10,电子设备1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。
[0154] 电子设备1900还可以包括一个电源组件1926被配置为执行电子设备1900的电源管理,一个有线或无线网络接口1950被配置为将电子设备1900连接到网络,和一个输入输出(I/O)接口1958。电子设备1900可以操作基于存储在存储器1932的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
[0155] 在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器1932,上述计算机程序指令可由电子设备1900的处理组件1922执行以完成上述方法。
[0156] 另外,若无特别说明,在本公开各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
[0157] 所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,所述人工智能处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random Access Memory)、静态随机存取存储器SRAM(Static Random-Access Memory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。
[0158] 所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0159] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0160] 依据以下条款可更好地理解前述内容:
[0161] 条款A1、一种验证方法,所述方法应用于处理器,所述处理器包括多个处理单元,所述方法包括:
[0162] 根据指令序列中预设的多个指令同步点,确定所述指令序列的多个同步域,其中,各指令同步点用于指示所述指令序列中通过一个或多个处理单元执行的多条指令之间的同步关系,各同步域用于指示相邻的指令同步点之间的指令子序列;
[0163] 通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果;
[0164] 在所述第一执行结果存在错误时,确定所述第一执行结果中错误的第一数据以及对所述第一数据有操作的第一指令;
[0165] 根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,以定位导致所述第一执行结果错误的指令。
[0166] 条款A2、根据条款A1所述的方法,所述通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果,包括:
[0167] 根据各同步域之间的依赖关系,通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果。
[0168] 条款A3、根据条款A1所述的方法,根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,包括:
[0169] 判断第一指令依赖树中是否存在与所述第一指令来自不同的同步域的第二指令;
[0170] 在所述第一指令依赖树中存在与所述第一指令来自不同的同步域的第二指令时,将所述第二指令以及与所述第二指令有数据竞争的指令确定为触发错误的第三指令。
[0171] 条款A4、根据条款A3所述的方法,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,
[0172] 其中,根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,还包括:
[0173] 在所述第一指令依赖树中不存在与所述第一指令来自不同的同步域的第二指令时,判断所述第一数据是否均来自所述第二同步域;
[0174] 在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。
[0175] 条款A5、根据条款A1所述的方法,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,所述第一执行结果包括所述第一同步域的指令同步点的机器状态快照,所述第一执行结果的错误类别包括状态快照异常;
[0176] 根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,包括:
[0177] 在所述第一执行结果的错误类别为状态快照异常时,判断所述第一数据是否均来自所述第二同步域;
[0178] 在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。
[0179] 条款A6、根据条款A4或A5所述的方法,根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,还包括:
[0180] 在所述第一数据不都来自所述第二同步域时,根据所述第一数据以及所述第一指令所在的同步域,确定第二指令依赖树;
[0181] 根据所述第二指令依赖树,确定触发错误的第三指令。
[0182] 条款A7、根据条款A3所述的方法,所述第一执行结果的错误类别包括环境错误;
[0183] 根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,还包括:
[0184] 在第一指令依赖树中的指令均来自同一个同步域,且所述第一执行结果的错误类别为环境错误时,将所述第一指令依赖树确定为触发错误的第三指令所在的第二指令依赖树;
[0185] 根据所述第二指令依赖树,确定触发错误的第三指令。
[0186] 条款A8、根据条款A3至A7中任意一项所述的方法,所述方法还包括:
[0187] 确定所述第一指令依赖树的根节点,所述根节点中存储有与所述第一数据对应的存储地址以及对所述第一数据有操作的第一指令;
[0188] 确定所述根节点的子节点,所述子节点中存储有与所述第一指令的操作数对应的存储地址以及对所述操作数有操作的指令;
[0189] 在满足预设条件的情况下,根据所述根节点及各个子节点,确定所述第一指令依赖树。
[0190] 条款A9、根据条款A6或A7所述的方法,根据所述第二指令依赖树,确定触发错误的第三指令,包括:
[0191] 将所述第二指令依赖树的各个节点中的指令分别作为结束指令,得到多个指令子序列;
[0192] 通过一个或多个处理单元执行各个指令子序列,得到第二执行结果;
[0193] 在所述第二执行结果存在错误时,将与所述第二执行结果对应的结束指令确定为第四指令;
[0194] 将各个指令子序列中最先执行的第四指令确定为第三指令。
[0195] 条款A10、根据条款A1至A9中任意一项所述的方法,所述方法还包括:
[0196] 在所述第一执行结果正确时,执行下一级的至少一组同步域的指令子序列。
[0197] 条款A11、根据条款A5或A7所述的方法,状态快照异常是指所述指令同步点的机器状态快照与预设的模型状态快照之间存在数据差异,环境错误是指在当前的至少一组同步域的执行过程中验证环境报告的错误信息。
[0198] 条款A12、一种验证装置,所述装置应用于处理器,所述处理器包括多个处理单元,所述装置包括:
[0199] 同步域确定模块,用于根据指令序列中预设的多个指令同步点,确定所述指令序列的多个同步域,其中,各指令同步点用于指示所述指令序列中通过一个或多个处理单元执行的多条指令之间的同步关系,各同步域用于指示相邻的指令同步点之间的指令子序列;
[0200] 同步域执行模块,用于通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果;
[0201] 数据及指令确定模块,用于在所述第一执行结果存在错误时,确定所述第一执行结果中错误的第一数据以及对所述第一数据有操作的第一指令;
[0202] 错误指令确定模块,用于根据所述第一数据以及所述第一指令,执行与所述第一执行结果的错误类别对应的处理,以定位导致所述第一执行结果错误的指令。
[0203] 条款A13、根据条款A12所述的装置,所述同步域执行模块,包括:
[0204] 指令序列执行子模块,用于根据各同步域之间的依赖关系,通过一个或多个所述处理单元执行多个同步域中的至少一组同步域的指令子序列,得到第一执行结果。
[0205] 条款A14、根据条款A12所述的装置,所述错误指令确定模块,包括:
[0206] 指令判断子模块,用于判断第一指令依赖树中是否存在与所述第一指令来自不同的同步域的第二指令;
[0207] 第一错误指令确定子模块,用于在所述第一指令依赖树中存在与所述第一指令来自不同的同步域的第二指令时,将所述第二指令以及与所述第二指令有数据竞争的指令确定为触发错误的第三指令。
[0208] 条款A15、根据条款A14所述的装置,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,
[0209] 其中,所述错误指令确定模块,还包括:
[0210] 第一同步域判断子模块,用于在所述第一指令依赖树中不存在与所述第一指令来自不同的同步域的第二指令时,判断所述第一数据是否均来自所述第二同步域;
[0211] 第一执行子模块,用于在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。
[0212] 条款A16、根据条款A12所述的装置,所述至少一组同步域中包括一组第一同步域以及与所述第一同步域并行执行的至少一组第二同步域,所述第一执行结果包括所述第一同步域的指令同步点的机器状态快照,所述第一执行结果的错误类别包括状态快照异常,[0213] 所述错误指令确定模块,包括:
[0214] 第二同步域判断子模块,用于在所述第一执行结果的错误类别为状态快照异常时,判断所述第一数据是否均来自所述第二同步域;
[0215] 第二执行子模块,用于在所述第一数据均来自所述第二同步域时,执行下一级的至少一组同步域的指令子序列。
[0216] 条款A17、根据条款A15或A16所述的装置,所述错误指令确定模块,还包括:
[0217] 第一指令依赖树确定子模块,用于在所述第一数据不都来自所述第二同步域时,根据所述第一数据以及所述第一指令所在的同步域,确定第二指令依赖树;
[0218] 第二错误指令确定子模块,用于根据所述第二指令依赖树,确定触发错误的第三指令。
[0219] 条款A18、根据条款A14所述的装置,所述第一执行结果的错误类别包括环境错误,[0220] 所述错误指令确定模块,还包括:
[0221] 第二指令依赖树确定子模块,用于在第一指令依赖树中的指令均来自同一个同步域,且所述第一执行结果的错误类别为环境错误时,将所述第一指令依赖树确定为触发错误的第三指令所在的第二指令依赖树;
[0222] 第二错误指令确定子模块,用于根据所述第二指令依赖树,确定触发错误的第三指令。
[0223] 条款A19、根据条款A14至A18中任意一项所述的装置,所述装置还包括:
[0224] 根节点确定模块,用于确定所述第一指令依赖树的根节点,所述根节点中存储有与所述第一数据对应的存储地址以及对所述第一数据有操作的第一指令;
[0225] 子节点确定模块,用于确定所述根节点的子节点,所述子节点中存储有与所述第一指令的操作数对应的存储地址以及对所述操作数有操作的指令;
[0226] 指令依赖树建立模块,用于在满足预设条件的情况下,根据所述根节点及各个子节点,确定所述第一指令依赖树。
[0227] 条款A20、根据条款A17或A18所述的装置,所述第二错误指令确定子模块,用于:
[0228] 将所述第二指令依赖树的各个节点中的指令分别作为结束指令,得到多个指令子序列;
[0229] 通过一个或多个处理单元执行各个指令子序列,得到第二执行结果;
[0230] 在所述第二执行结果存在错误时,将与所述第二执行结果对应的结束指令确定为第四指令;
[0231] 将各个指令子序列中最先执行的第四指令确定为第三指令。
[0232] 条款A21、根据条款A12至A20中任意一项所述的装置,所述装置还包括:
[0233] 执行模块,用于在所述第一执行结果正确时,执行下一级的至少一组同步域的指令子序列。
[0234] 条款A22、根据条款A16或A18所述的装置,状态快照异常是指所述指令同步点的机器状态快照与预设的模型状态快照之间存在数据差异,环境错误是指在当前的至少一组同步域的执行过程中验证环境报告的错误信息。
[0235] 条款A23、根据条款A12至A22中任意一项所述的装置,所述装置应用于UVM验证环境。
[0236] 条款A24、一种电子设备,包括:
[0237] 处理器;
[0238] 用于存储处理器可执行指令的存储器;
[0239] 其中,所述处理器被配置为调用所述存储器存储的指令,以执行条款A1至A11中任意一项所述的方法。
[0240] 条款A25、一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现条款A1至A11中任意一项所述的方法。
[0241] 以上对本公开实施例进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本公开的方法及其核心思想。同时,本领域技术人员依据本公开的思想,基于本公开的具体实施方式及应用范围上做出的改变或变形之处,都属于本公开保护的范围。综上所述,本说明书内容不应理解为对本公开的限制。