验证方法、装置以及相关产品与流程

文档序号:19350063发布日期:2019-12-06 21:17阅读:187来源:国知局
验证方法、装置以及相关产品与流程

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



背景技术:

随着计算机技术的发展,相关的系统设计越来越复杂。并行体系结构通过增加芯片的并行性来达到更高的任务处理性能,并行性提高了系统的复杂度,系统复杂度的提高对于功能验证的要求也在不断提高。



技术实现要素:

本公开提供一种能够加速芯片的设计和验证流程的并行系统的验证方法、装置以及相关产品。

根据本公开的一方面,提供了一种并行系统的验证方法,所述方法包括:

针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,得到运行结果;

将所述运行结果和所述并行系统的仿真结果进行比较,以对所述并行系统的功能进行验证;

其中,所述并行系统的仿真结果为所述并行系统并行运行所述多个部分的结果。

根据本公开的另一方面,提供了一种并行系统的验证装置,所述装置包括:

模拟运行模块,用于针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,得到运行结果;

验证模块,用于将所述运行结果和所述并行系统的仿真结果进行比较,以对所述并行系统进行验证;

其中,所述并行系统的仿真结果为所述并行系统并行运行所述多个部分的结果。

根据本公开的另一方面,提供了一种电子设备,包括:

处理器;

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

其中,所述处理器被配置为执行指令时实现上述方法。

根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述方法。

通过采用多个线程模拟并行系统执行指令的过程,根据本公开上述实施方式的验证方法、装置及相关产品,相比于相关技术中采用单线程串行模拟实现并行系统的功能验证的过程,可以提高验证效率,加速验证和设计的过程。

根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。

附图说明

包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。

图1示出根据本公开实施例的验证方法的应用环境的示意图;

图2示出根据本公开一实施例的验证方法的流程图;

图3示出根据本公开一实施例的验证方法的流程图;

图4示出根据本公开一实施例的验证方法的流程图;

图5示出根据本公开一实施例的验证方法的流程图;

图6示出根据本公开一实施例的验证环境的结构示意图;

图7示出根据本公开一实施例的主进程和子进程之间交互信息的示意图;

图8示出根据本公开一实施例的对同步功能的验证方法的流程图;

图9示出根据本公开一实施例的验证装置的框图;

图10示出根据本公开一实施例的验证装置的框图;

图11是根据一示例性实施例示出的一种用于并行系统的验证的装置的框图。

具体实施方式

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

应当理解,本公开的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。

随着计算机体系结构的发展,并行体系结构越发流行。并行体系结构通过增加芯片的并行性来达到更高的任务处理性能。应用程序通常有数据级并行和任务级并行两种并行方法。数据级并行可以同时操作多个数据项,任务级并行则创建了一些能单独执行但能大规模采用并行化方式处理的工作任务。

硬件主要有三种方式来开发这两种并行方法:

1.指令级并行:采用流水线、多发射等方法提高指令执行的并行性。

2.数据流并行:一条指令可以操作多个数据项,实现多条数据流间的并行。

3.线程级并行(下文中为了区分硬件的线程和参考模型中的线程,将此处的线程级并行统一称作任务级并行):每一条线程执行一个工作任务或多个线程合作完成一个工作任务中可以并行的部分,线程之间可以交互。

在芯片设计中,架构人员广泛地采用这三种并行化方法,加速任务的执行过程,但并行化程度的增高也提高了芯片的设计和验证的难度。

为了解决上述技术问题,针对不同的并行化,本公开可以采用不同的方法予以模拟并进行验证。

对于指令级并行,每条指令的运行可以看做一条流水线,多条指令的并行也就是多条流水线的并行,可以采用多线程方式实现多条流水线,每条流水线可以有取指、译码、执行、访存和写回等步骤。取指是将指令从指令存储单元中取回至译码模块。译码是指译码模块将指令翻译成微指令或控制信号并送往执行单元。对寄存器的读取操作一般在译码阶段完成。执行单元接收到来自译码单元的微指令或控制信号指令执行该指令所指定的操作。如果该指令需要到存储单元中取得操作数,那么还需要一个访存的操作。在执行完指令之后,执行单元应将指令执行结果写回寄存器或存储单元。

在多流水线的场景下,指令之间的相互依赖关系也变得十分复杂。常见的相关关系有数据相关、控制相关和组件相关。数据相关指两条指令中至少有一条是写操作时,两条指令访问了存储单元中的同一个位置或同一个寄存器,这可能会发生三种相关的情况,即读后写、写后读和写后写相关。控制相关是指控制指令如跳转指令或分支指令会影响指令流的执行,许多指令的执行受这些控制指令的影响。组件相关是指不同的指令使用了同一个组件,它们只能分开执行。解除相关的关键在于确定可能并行执行的指令的先后执行顺序,并按顺序执行。

对于数据流并行,由于实现对多个数据的同一操作之间并不存在数据依赖关系,可以将待处理数据切分为合适的大小,为每一块数据分配一条线程,该线程对数据执行指令指定的操作,并将结果写回。在实现数据流并行时,因为指令往往为不同的写回数据分配了不同的地址,多线程写回的结果一般是不会发生地址重叠的,所以不用担心相关的问题。

对于任务级并行,芯片上多个核执行多个不同的任务或者执行同一任务中可以并行的几个子任务时,可以采用一个线程执行一个任务或一个线程执行一个任务中并行的子任务对应的指令序列,可以采用同步指令模拟多核的同步机制,用线程间通信或文件消息传递模拟核间通信的过程等等。

对于支持上文提到的不同并行方式的并行系统,本公开的实施例提供了同步功能以及硬件保序机制的模拟和验证,并提供了验证过程中的调试功能和文件启动功能,从而加速芯片的设计和验证流程。

具体地,本公开提出了一种并行系统的功能验证方法,该方法可以用于验证并行系统的功能。本公开的并行系统可以是指采用以上三种并行方式中的一种或多种的系统,可以是单核系统也可以是多核系统,本公开对此不作限定。

举例来说,根据本公开实施例的验证方法可用于对作为处理器的芯片的功能进行验证,该处理器可以是通用处理器,例如cpu(centralprocessingunit,中央处理器),也可以是用于执行人工智能运算的人工智能处理器(ipu)。人工智能运算可包括机器学习运算,类脑运算等。其中,机器学习运算包括神经网络运算、k-means运算、支持向量机运算等。该人工智能处理器可例如包括gpu(graphicsprocessingunit,图形处理单元)、npu(neural-networkprocessingunit,神经网络处理单元)、dsp(digitalsignalprocess,数字信号处理单元)、现场可编程门阵列(field-programmablegatearray,fpga)芯片中的一种或组合。本公开对处理器的具体类型不作限制。

在一种可能的实现方式中,本公开中所提及的处理器可包括多个处理单元,或者说,芯片可以包括多个核。每个处理单元可以独立运行所分配到的各种任务,如:卷积运算任务、池化任务或全连接任务等。本公开对处理单元及处理单元所运行的任务不作限制。

图1示出根据本公开实施例的验证方法的应用环境的示意图。如图1所示,本公开的验证方法的应用环境包括验证环境100和作为验证对象的处理器(dut)200,验证对象是可以支持指令级并行、数据流并行和任务级并行中的一种或者多种的并行系统。其中,验证环境100用于提供验证所需的运行及支持环境,例如uvm(universalverificationmethodology)验证环境;处理器200可以包括一个或多个处理单元201,以及存储单元202,处理单元201用于执行指令序列,存储单元202用于存储数据,其可包括随机存储器(ram,randomaccessmemory)和寄存器堆。处理器200中的多个处理单元201既可共用部分存储空间,例如共用部分ram存储空间和寄存器堆,又可同时拥有各自的存储空间。可选地,作为待验证对象的处理器可以是人工智能芯片或板卡等,此处不做具体限定。

本公开建立了一种参考模型,并提供了一种通过该参考模型进行并行系统的功能验证方法。参考模型可以运行在图1所示的验证环境100中,参考模型中线程的数量可以根据以下方式确定:对于指令级并行,参考模型中线程数目不少于流水线的数目;对于数据流并行,参考模型中线程数目不少于运算部件的数目,每个线程模拟一个运算部件,运算部件可以是指处理器中的一个算术逻辑运算单元等,一个核可以包括多个运算部件;对于任务级并行,参考模型中线程的数目不少于并行系统中核的数目。

验证环境负责提供芯片和参考模型运行所需要的输入,即验证激励,然后验证环境负责在并行系统仿真过程中和/或仿真结束后抓取仿真过程中的内部信号、或者中间内部状态,即仿真结果,将仿真结果与参考模型提供的运行结果进行比较,以实现对并行系统功能的验证,具体过程参见下文的介绍。

图2示出根据本公开一实施例的验证方法的流程图,如图2所示,所述方法可以包括:

步骤s11,针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,得到运行结果;

步骤s12,将所述运行结果和所述并行系统的仿真结果进行比较,以对所述并行系统的功能进行验证。

上述并行运行的多个部分,可以是并行运行的流水线,或者并行处理的数据流,或者并行处理的任务或子任务等等。验证环境可以将验证激励分别输入到参考模型和并行系统中,可以采用参考模型中的一个线程执行一部分得到运行结果,并行系统采用并行的方式运行多个部分得到仿真结果,将运行结果和仿真结果进行比较可以实现对并行系统的功能的验证,其中,所述参考模型的运行结果认为是正确的。

通过采用多个线程模拟并行系统执行指令的过程,根据本公开上述实施方式的验证方法,相比于相关技术中采用单线程串行模拟实现并行系统的功能验证的过程,可以提高验证效率,加速验证和设计的过程。示例1指令级并行

本公开的参考模型提供了对指令级并行的验证方法,所述每条指令的运行可以看做一条流水线,多条指令并行可看做多条流水线并行。图3示出根据本公开一实施例的验证方法的流程图,如图3所示,本公开的验证方法可以包括:

步骤s31,对于多条流水线中的任一条流水线,采用一个线程运行该任一条流水线所运行的指令,以得到运行结果。

其中,所述多条流水线所运行的指令可以是一个核中的核内指令,也可以是核与核之间的核间指令,可选地,所述一个线程也可以看作是运行该任一条流水线所运行的指令所对应的功能函数,所述功能模拟函数可以是指,根据对应的流水线运行的指令的功能,采用高级语言编写的函数。高级语言可以是java,c,c++,c#,pascal,python,lisp,prolog,foxpro等中的任意一种,本公开对此不作限定。

举例来说,在一种可能的实现方式中,参考模型可使用c++多线程来实现,每个线程运行一条流水线对应的指令序列或其对应的功能模拟函数,参考模型的存储结构、访问权限与验证对象完全一致。此时,流水线对应的功能模拟函数也可以采用c++实现。参考模型还可根据配置文件来调度多线程来保证每个线程运行与其对应的流水线相同的指令序列的功能模拟函数。本公开对参考模型的具体实现方式不作限制。

一个线程可以运行一条流水线所运行的指令或其对应的功能模拟函数,从而模拟一条流水线对应的指令实现的功能。也就是说,有几条流水线,可以采用与流水线的条数对应个数的线程实现上述过程。

步骤s32,将运行结果与并行系统运行上述多条流水线得到的仿真结果进行比较,从而实现功能的验证。

其中,并行系统可以是如前文所述的芯片等,比如采用芯片实现的如图1所示的处理器200。并行系统可以运行上述多条流水线得到仿真结果,如图1所示,验证环境可以读取仿真结果,从而将运行结果和仿真结果进行比较,实现功能的验证。

举例来说,一个具有两条流水线的并行系统:一条io指令流水线、一条计算指令流水线,其中,两条流水线可以并行执行,采用本公开的验证方法可以用两个线程并行来模拟这两条流水线并行,一个线程运行io指令也可以看作io指令对应的功能模拟函数,一个线程运行计算指令也可以看做计算指令对应的功能模拟函数,可将运行结果输出到数组中,然后存储至文件中,通过这些文件可以与芯片的仿真结果进行比对,实现在芯片功能的验证。

示例2数据流并行

本公开的验证方法还可以实现对数据流并行的模拟和验证。由于实现对多个数据的同一操作(指令)之间并不存在数据依赖关系,因此,可以将待处理数据切分为合适的大小,为每一块数据分配一条线程,该线程对这块数据执行指令指定的操作,并将结果写回。其中,对多个数据的同一操作可以是指单指令流多数据流,单指令流多数据流(simd)是一种实现数据级并行的技术,其典型代表是向量处理器(vectorprocessor)和阵列处理器(arrayprocessor),举例来说,要实现两个向量之间相加的操作,如果有多个运算部件进行处理的话,可以将两个向量按照相同的方式拆分为多个部分,分别由多个运算部件完成相加的操作,即可得到最终的结果。

以上对于单指令流多数据流的举例仅仅是一个示例,不以任何方式限制本公开。单指令流多数据流也可以包括对标量数据处理的情况,比如说,一条指令要实现对一组数据中的一部分求和、一部分求乘积,然后在对和与乘积进行处理,这种情况下,可以将求和与求乘积的部分分别拆出来,由不同的运算部件进行计算。

针对上述数据流并行,图4示出根据本公开一实施例的验证方法的流程图,如图4所示,本公开的验证方法可以包括:

步骤s41,根据并行处理数据的运算部件的数目将输入数据拆分为多个部分;

在一种可能的实现方式中,每个运算部件可以运行多个部分中的一个部分的输入数据,也就是说,将输入数据拆分为与运算部件的数目相等个数部分,举例来说,芯片设置有3个运算部件,那么可以将输入数据拆分为3部分。在一种可能的实现方式中,拆分出来的输入数据的部分的数目也可以小于或大于运算部件的数目,例如,以上述示例为例,可以将输入数据拆分为2部分或4部分,本公开对输入数据拆分的方式不作具体限定。

步骤s42,采用一个线程调用一个运算部件处理相应部分的输入数据,得到运行结果。其中,在采用一个线程调用一个运算部件处理相应部分的输入数据时,可以看做是采用一个线程调用一个运算部件对应的功能模拟函数处理相应部分的输入数据,运算部件对应的功能模拟函数可以是指,根据运算部件执行的指令对应的功能,采用高级语言编写的函数。

线程对对应部分的输入数据执行指令指定的操作,并将运行结果写回,在实现数据流并行时,多线程写回的运行结果一般是不会发生地址重叠的,所以不用担心写后写相关的问题。

步骤s43,将运行结果与并行系统的仿真结果进行比较,从而实现数据流并行的验证。

对于数据流并行,同样可以通过步骤s12将运行结果与并行系统的仿真结果进行比较,从而实现数据流并行的验证。其中并行系统的仿真结果可以是,并行系统的多个运算部件运行根据对数据的拆分方式对输入指令进行变换后的多个并行指令得到的。

示例3任务级并行

在本实施例中,所述并行系统可以包括多个核,支持任务级并行。图5示出根据本公开一实施例的验证方法的流程图。如图5所示,该验证方法可以包括:

步骤s51,采用参考模型中的一个线程执行一个核所运行的指令序列,以得到运行结果。

步骤s52,将所述运行结果和所述并行系统的仿真结果进行比较,以对所述并行系统的功能进行验证。

在该示例中,假如对于一个在四核处理器上执行的任务,在四个核上各执行一个子任务对应的指令序列,本公开的验证方法用四个线程分别去执行这四个指令序列得到运行结果。同样的,四核处理器可以执行对应的指令序列得到仿真结果。将运行结果和仿真结果进行比较,可以实现对线程级并行的功能的验证。可选地,所述四核处理器也可以运行四个可以并行的任务,在四个核上各执行一个任务对应的指令序列。本公开的验证方法用四个线程分别去执行这四个指令序列得到运行结果。同样的,四核处理器可以执行对应的指令序列得到仿真结果。将运行结果和仿真结果进行比较,可以实现对线程级并行的功能的验证。

本公开的参考模型以及验证方法还提供了调试功能。在一种可能的实现方式中,可以在输入到参考模型的验证激励中埋设调试断点,这样,本公开的验证方法还可以包括:

在任一线程运行到调试断点时,保存当前的执行进度到第一文件中;

在接收到启动请求时,启动所述第一文件以获取当前的执行进度,并根据当前的执行进度开始继续运行所述任一线程。

其中,调试断点指的是程序运行需要中止的位置,所述调试断点可以是设计人员根据需要设置的,也可以根据运行的任务需要进行设置,本公开对此不做限制,第一文件可以是可读写文件,本公开对第一文件的具体格式不作限定。在一种可能的实现方式中,调试人员可以通过调试界面触发继续运行的条件(继续运行的条件可以是调试人员触发打开上述第一文件的控件)发出的指令,验证环境接收到指令后,向参考模型发出启动请求,控制参考模型启动第一文件以获取当前的执行进度,并根据当前的执行进度开始继续运行所述任一线程。

在另一种可能的实现方式中,也可以通过设置主进程和子进程的方式实现调试的过程。图6示出根据本公开一实施例的验证环境100的结构示意图,如图6所示,在一种可能的实现方式中,在验证环境100中可以设置主进程和子进程,其中,主进程可以用于运行调试系统,调试系统可以是面向验证人员的系统,例如调试系统可以通过验证环境100的交互界面与验证人员进行交互,获取验证人员输入的参数或者向验证人员展示信息等等。子进程可以用于运行上述参考模型以实现对芯片的功能的模拟以及验证。主进程和子进程之间可以通信以交换信息。图7示出根据本公开一实施例的主进程和子进程之间交互信息的示意图。

如图7所示,调试功能可以包括以下过程:在任一线程运行到调试断点时,保存当前的执行进度,并通过子进程将调试信息传递给主进程。

通过主进程对调试信息进程处理;在处理完所述调试信息后,通过主进程向子进程发送应答消息。

在子进程接收到主进程发送的应答消息时,控制子进程从所述执行进度开始继续运行所述任一线程。在一种可能的实现方式中,验证人员可以通过调试系统设置调试断点,因此,主进程可以通过验证环境100获取调试断点,主进程可以将获取的调试断点发送给子进程,因此,在子进程中运行参考模型遇到调试断点时,停止运行并控制子进程将调试信息传递给主进程。同时,验证环境100还可以控制子进程保存参考模型当前的执行进度以便于恢复执行时可以从调试断点继续运行参考模型,保存的参考模型当前的执行进度可以包括内部存储状态信息等,可以以文件的形式保存当前的执行进度,也可以将当前的执行进度保存在子进程的内存空间中,本公开对此不作限定。

上述调试信息可以包括参考模型的内部存储状态信息、中间结果等。主进程在接收到子进程发送的调试信息后,对调试信息的处理可以包括:展示所述调试信息或者对调试信息进行其他处理,例如保存、与芯片的仿真结果(同样的仿真到调试断点处的仿真结果)比较等,本公开对此不作限定。

举例来说,主进程可以通过交互界面展示调试信息,以使验证人员可以观察、分析调试信息等。验证环境100还可以控制主进程抓取处理器执行与参考模型相同的指令时,在调试断点的仿真结果,将调试信息与调试断点处的仿真结果进行比较,实现验证。

如前文所述,主进程在接收到调试信息后,可以进行打印输出调试信息到交互界面上等处理,在主进程处理完调试信息后,可以控制主进程向子进程发送应答消息。在子进程接收到应答消息后,确定可以继续执行指令,因此,验证环境100可以控制子进程从调试断点处开始继续运行参考模型。

根据本公开上述实施方式的验证方法,通过建立参考模型,以主进程和子进程交互的方式传递调试断点以及调试信息,提供调试功能,允许验证人员观测运行的状态,从而实现对芯片的功能的验证。

通过本实施方式的验证方法,为验证人员提供了灵活的调试接口,可选地,提供了单步调试功能,即每执行一条指令就可以停下来,允许验证人员观测存储状态。

本公开的参考模型还支持文件启动功能,即验证人员还可以将存储状态和配置信息保存起来,例如写在文件中,或者如上所述可将当前的执行进度保存到文件中,参考模型读取这些文件并从文件指定的状态开始从指令序列中指定的指令开始执行。断点调试功能和文件启动功能结合起来可以实现完整的断点与复现功能,当复现错误时,可以从断点处开始运行指令序列,而不用从开始运行指令序列,便于复现错误,加速验证过程。

需要说明的是,上述实施方式的调试过程可以与本申请上文(指令级并行、数据流并行或者线程级并行等的示例)以及下文中的所有实施方式结合,通过调试的方式使得验证人员观察运行的状态,实现完整的断点与复现功能,可以从断点处开始运行指令序列,便于复现错误。

如果多条流水线之间存在需要同步的同步指令,本公开的验证方法还可以实现对同步指令的模拟和验证,图8示出根据本公开一实施例的对同步功能的验证方法的流程图。在介绍对同步功能的验证方法之前,需要对为了实现同步功能的模拟和验证过程而进行的适应性的设置进行说明。

参考模型中设置了第一计数器以及第一计数器对应的锁;根据需要同步的同步指令的数量,可以设置第一计数器的第一临界值。将对所述第一计数器进行自增一操作的代码放在临界区中,其中,所述临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。其中,第一计数器用来记录当前执行到同步指令的线程的数量,第一计数器对应的锁通过抢锁用来保证每次只有一个线程改变计数器的值,用来控制对第一计数器进行加一操作的线程的数量。第一临界值可以为一组同步指令中同步指令的个数,所述一组同步指令指的是可以并行的一组线程所对应的同步指令。

如图8所示,步骤s11可以包括以下过程:

步骤s111,如果任一线程执行到同步指令,控制所述任一线程抢所述同步指令对应的锁;

步骤s112,在所述任一线程抢到所述锁时,控制所述任一线程对所述同步指令对应的第一计数器执行加一操作后释放锁并等待;

步骤s113,在所述第一计数器的值到达第一临界值时,控制各所述同步指令所在的线程执行所述同步指令之后的指令。

步骤s114,若锁为被占用状态,则抢锁失败,该任一线程等待并继续抢所述同步指令对应的锁。

其中,两个以上同步指令组成一组同步指令。在实际的应用环境中可能有多组需要同步的同步指令,本公开的实施方式为每组同步指令分配了一个标识信息,例如id(identitydocument,身份标识号),一组同步指令对应的锁、第一计数器以及条件信号量都与该组同步指令具有相同的标识信息。

在具有多组需要同步的同步指令的实施方式中,上述步骤s111中的同步指令对应的锁是指该锁具有与所述同步指令相同的标识信息(id),步骤s112中的同步指令对应的第一计数器具有与所述同步指令相同的标识信息(id),步骤s113中的各所述同步指令所在的线程是指具有与运行该同步指令的线程。

在一种可能的实现方式中,可以以数组的形式保存同一组同步指令以及该组同步指令对应的锁、第一计数器以及条件信号量之间的关联关系,如下表1所示:

表1

任一线程在执行到同步指令时,若要对第一计数器进行加1操作,需要先抢锁,若抢到锁则可以对同步指令对应的第一计数器执行加一操作,执行完加一操作后需要释放锁,从而通过锁机制保证对第一计数器执行加一操作的独占性,也即每次只能有一个线程改变第一计数器的值。锁可以包括两个状态,被占用状态和释放状态,在释放状态,任一线程都可能抢到锁,任一线程抢到锁后可以将锁的状态修改为被占用状态,在被占用状态的锁,其他线程是抢不到锁的,通过这种方式可以保证每次只能有一个线程改变第一计数器的值。

上述第一临界值可以是一组同步指令中同步指令的个数,也可以认为是一组同步指令所在的线程数,也就是需要同步的线程数,则可以将第一计数器的第一临界值设置为相应的数值。举例来说,如表1所示,id1对应的同步指令为3个,那么第一计数器1的第一临界值可以设置为3。条件信号量被触发时表示可以开始同步执行同步指令之后需要同步的指令,在本示例中条件信号量可以是指第一计数器的值是否达到第一临界值,达到第一临界值则触发条件信号量不再阻塞线程,未达到第一临界值则不触发条件信号量,条件信号量阻塞线程,使之等待。这样,在三个同步指令所在的线程都执行到同步指令时,对第一计数器执行的加一操作为3次,第一计数器的值可以达到第一临界值,从而触发条件信号量,表示三条线程可以同步执行这三个同步指令之后的指令了。

在一种可能的实现方式中,对于同步功能的模拟,本公开可以通过以下过程实现,对于一组需要同步的同步指令,为该组同步指令分配id,并设置对应的第一计数器,第一计数器的初始值可以设置为0,将第一计数器自增一的操作对应的代码放在临界区中,并设置对应的锁,初始时锁的状态为释放状态,根据同步指令的个数设置第一计数器对应的临界值。在完成以上设置后,可以将同步指令、与同步指令对应的锁、第一计数器、条件信号量保存在数组中。

以表1中的id1那组的同步指令为例,对步骤s111-s114的执行过程进行说明,在线程1执行到指令11时,线程1抢锁1,锁1的初始状态为释放状态,此时线程1抢到锁1。需要说明的是,也可能有其他线程同时在抢锁1,比如,线程2同时执行到指令12,线程2也可以抢锁1,多个线程同时抢锁的情况的解决方案可以参见相关现有技术,本公开不作具体展开。

线程1抢到锁1后,锁1的状态被设置为被占用状态,此时其他抢锁1的线程可以等待并继续抢锁。线程1将临界区中的第一计数器1的值加1,然后释放锁1,等待。

线程2在执行到指令12,线程3执行到指令13时都可以进行如上所述的过程将第一计数器1的值加1,然后等待。此时第一计数器1的值被增加至3,达到了第一临界值,触发条件信号量1,线程1、线程2和线程3不再等待,同步执行指令11、指令12和指令13之后的指令。

在一种可能的实现方式中,本公开提供的验证方法可以在模拟上述同步功能的同时对同步功能进行验证。例如,验证人员可以根据需要通过调试系统设置调试断点,例如,可以将调试断点设置在需要同步的指令之后。这样,参考模型在运行到调试断点时可以将调试信息发送给主进程,运行在主进程的调试系统可以将调试信息展示给验证人员,验证人员可以通过观察、分析调试信息能对具有同步功能的并行系统进行功能模拟和验证,可以将调试信息与芯片运行到调试断点时的仿真结果进行比较,验证芯并行系统的同步功能。

通过本公开上述实施方式的验证方法,结合断点调试功能可以实现对同步功能的多核系统进行功能模拟和验证,并且通过模拟同步功能可以保证指令可以按照正确的顺序被执行,例如,对于需要同步的指令,保证指令被同步执行。

对于存在数据相关的多个指令,多个指令的执行结果可能会写入或者读取存储单元的同一位置或同一寄存器中,从而存在写后读、读后写或者写后写相关:对于写后写相关,硬件中常用的做法是使这些指令被乱序执行,但在修改寄存器状态或存储单元中所存储的值时按原有的顺序写回,从而保证寄存器中值的正确性;对于写后读和读后写相关,可以在指令中插入同步指令保证写指令或者读指令的指令顺序,具体的方式将在下文介绍。

(1)写后写相关

本公开的验证方法还可以保存多个指令的执行顺序,例如,可以按照多个指令的执行顺序将指令的pc(programcounter,程序计数器)值保存在数组中或者队列中,pc值指的是:当前正在执行的指令的下一条指令的存储地址。在执行指令时,可以通过多个线程执行多个指令,将多个指令对应的执行结果保存在临时的存储数据结构中,不必关注可以并行执行的多个指令的执行顺序。

在执行完多个指令后,可以按照预先保存的多个指令的执行顺序将多个指令的执行结果写回到参考模型的存储单元中。

根据本公开上述实施方式的验证方法可以模拟硬件保序机制中实现写后写相关的过程,并且结合调试过程可以实现对写后写的验证。

(2)写后读相关或者读后写相关

对于写后读或者读后写,本公开的验证方法可以在具有数据相关的指令前或后插入同步指令,保证指令按照正确的顺序读写数据。

举例来说,以写后读为例,将写入数据的线程称为生产者,读取数据的线程称为消费者,可以在生产者的写指令之后和消费者的读指令之前插入通信同步指令。

在生产者或者消费者执行到所述通信同步指令时,控制所述生产者或者消费者抢所述通信同步指令对应的锁,并对通信同步指令对应的计数器执行加一操作后释放通信同步指令对应的锁;

在通信同步指令对应的计数器的值到达第二临界值时,控制所述生产者或者消费者执行所述通信同步指令之后的指令。

对应读后写来说,可以在消费者的读指令之后和其他生产者的写指令之前插入通信同步指令,其他的过程和写后读相同。此处的其他生产者可以是指不是该消费者的生产者,避免其他生产者污染本消费者要读的数据。

其中,通信同步指令就是一条同步指令,生产者要向消费者传递消息,为了保证访问共享存储空间的时序(写后读的时序),本公开的实施方式通过在生产者的写指令之后和消费者的读指令之前插入同步指令,保证生产者在共享存储空间中写入消息后,消费者从共享存储空间中读取消息。

举例来说,对于上文中提到的io指令流水线和计算指令流水线,当计算指令和io指令之间有数据依赖关系时,可以加入同步指令,具体方法是在生产者之后加入同步指令,消费者之前加入同步指令,以保证消费者能读到生产者产生的数据,如一条计算指令需要读另一条io指令搬运的数据,则在这条计算指令之前加入一条同步指令,在另一条io指令之后加入同id的同步指令,这样即使模拟计算指令流水线的线程先到达这条计算指令之前的同步指令,也会等待模拟io指令流水线的线程执行完io指令并到达具有同id的同步指令之后,再执行这条计算指令,从而保证读到io指令输出的数据。

本公开提供的验证方法可以在模拟硬件保序机制的同时对具有硬件保序机制的并行系统进行功能验证。例如,验证人员可以根据需要通过调试系统设置调试断点,这样,参考模型在运行到调试断点时可以将调试信息发送给主进程,运行在主进程的调试系统可以将调试信息展示给验证人员,验证人员可以通过观察、分析调试信息验证具有硬件保序机制的并行系统的模拟情况。

通过本公开上述实施方式的验证方法,通过模拟硬件保序机制可以保证指令可以按照正确的顺序被执行,结合断点调试功能可以实现对芯片的硬件保序机制的验证。

当核与核之间可以通过共享存储交换数据时,本公开的参考模型可以用数组模拟共享存储,通过不同的线程访问数组来实现对共享存储交换数据过程的功能的模拟,具体过程可以参见前述对存在数据写后读相关的指令运行的模拟过程。需要线程通信的两条线程,一条可以作为生产者,一条可以作为消费者,生产者需要向消费者发送数据,与写后读的过程类似。

当核于核之间可以通过接口直接传递信息时,当信息量较少时可以采用高级语言提供的线程间通信机制来传递信息,当信息量较多时可以用读写文件的方式来交换信息,读写文件的先后顺序用文件锁保证。

对于文件消息传递的方式,可以通过发送信号和文件锁的机制来实现。文件锁可以包括写锁和读锁,控制所述线程之间通过文件消息传递的方式进行通信可以包括:控制第一线程抢第二文件的写锁,在第二文件中写入消息后释放第二文件的写锁;控制第一线程向第二线程发送信号以控制第二线程抢第二文件的读锁;在第二线程抢到第二文件的读锁时,控制第二线程从写入消息的第二文件中读取所述消息。其中,第一线程要向第二线程传递消息。其中的第二文件也是可以读写的文件,本公开不限定第二文件的具体格式。

举例来说,将发出消息的线程称为发送端(第一线程的示例),接收消息的线程称为接收端(第二线程的示例):

1.发送端抢文件锁,在文件中写入消息,并释放文件锁。其中,文件锁可以包括读锁和写锁,发送端可以抢写锁,当发送端抢到了写锁后,其他线程就不可以抢该文件的读锁和写锁,避免造成数据竞争。

2.发送端向接收端发送信号,信号用于提醒接收端抢文件锁。

3.接收端接到信号并抢文件锁,抢到后读取消息,然后释放文件锁。接收端可以抢读锁,接收端抢到读锁后,其他线程也可以抢读锁,但是不可以抢写锁,从而实现了多个线程对文件的并发读操作。

使用文件锁保证了发送端和接收端读写文件的原子性,避免一些意想不到的复杂错误的出现。

结合上文的调试过程,还可以对上述存在数据依赖关系的指令的执行过程,或者多核并行系统的核间通信功能进行验证。例如,可以在消费者的读指令之后设置调试断点,在消费者运行到调试断点时,通过子进程将调试信息传递给主进程,调试人员可以通过主进程展示的调试信息确定指令的执行情况,例如,共享存储空间或者数组的存储状态等等。通过主进程还可以将调试信息与芯片的仿真结果进行比较,以对芯片的功能进行验证。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制,因为依据本公开,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本公开所必须的。

进一步需要说明的是,虽然流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

本公开还提供了一种并行系统的验证装置,图9示出根据本公开一实施例的验证装置的框图,该验证装置可以应用于上文所述的验证环境中,如图9所示,所述验证装置可以包括:

模拟运行模块61,用于针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,得到运行结果;

验证模块62,用于将所述运行结果和所述并行系统的仿真结果进行比较,以对所述并行系统进行验证;

其中,所述并行系统的仿真结果为所述并行系统并行运行所述多个部分的结果。

通过采用多个线程模拟并行系统执行指令的过程,根据本公开上述实施方式的验证装置,相比于相关技术中采用单线程串行模拟实现并行系统的功能验证的过程,可以提高验证效率,加速验证和设计的过程。

图10示出根据本公开一实施例的验证装置的框图,如图10所示,在一种可能的实现方式中,所述并行系统支持多条并行执行的指令流水线;

所述模拟运行模块61,包括:

第一模拟运行单元611,用于对于多条流水线中的任一条流水线,采用一个线程运行该任一条流水线所运行的指令。

在一种可能的实现方式中,所述并行系统包括多个运算部件,支持数据流并行,

所述模拟运行模块61,包括:

拆分单元612,用于根据运算部件的数目将输入数据拆分为多个部分;

第二模拟运行单元613,用于采用一个线程调用一个运算部件处理相应部分的输入数据。

在一种可能的实现方式中,所述并行系统包括多个核,支持任务级并行,

所述模拟运行模块61,包括:

第三模拟运行单元614,用于采用参考模型中的一个线程执行一个核所运行的指令序列。

在一种可能的实现方式中,所述装置还包括:

第一保存模块63,用于在任一线程运行到调试断点时,保存当前的执行进度到第一文件中;

第一启动模块64,用于在接收到启动请求时,启动所述第一文件以获取当前的执行进度,并根据当前的执行进度开始继续运行所述任一线程。

在一种可能的实现方式中,所述装置还包括:

第二保存模块65,用于在任一线程运行到调试断点时,保存当前的执行进度,并通过子进程将调试信息传递给主进程;

处理模块66,用于通过主进程对调试信息进程处理;

应答模块67,用于在处理完所述调试信息后,通过主进程向子进程发送应答消息;

第二启动模块68,用于在子进程接收到主进程发送的应答消息时,控制子进程从所述执行进度开始继续运行所述任一线程。

在一种可能的实现方式中,所述模拟运行模块61还包括:

抢锁单元614,用于如果任一线程执行到同步指令,控制所述任一线程抢所述同步指令对应的锁;

计数单元615,用于在所述任一线程抢到所述锁时,控制所述任一线程对所述同步指令对应的第一计数器执行加一操作后释放锁并等待;

同步单元616,用于在所述第一计数器的值到达第一临界值时,控制各所述同步指令所在的线程执行所述同步指令之后的指令;

所述抢锁单元614还用于若锁为被占用状态,则抢锁失败,该任一线程等待并继续抢所述同步指令对应的锁。

在一种可能的实现方式中,在具有多组同步指令的情况下,所述装置还包括:分配模块69,用于为每组同步指令分配相同的标识信息,且该组同步指令对应的锁、第一计数器以及第一临界值都具有与该组同步指令相同的标识信息。

在一种可能的实现方式中,所述多个部分之间存在数据相关,所述装置还包括:

指令插入模块60,用于对于写后读和读后写相关,在存在数据相关的部分的写指令和读指令的之前或之后插入同步指令,保证指令按照与硬件相同的顺序被执行。

在一种可能的实现方式中,所述装置还包括:

第三保存模块75,用于对于写后写相关,保存多个部分的写指令的执行顺序;

第四保存模块76,用于将多个部分对应的运行结果保存在临时的存储空间;

顺序写入模块77,用于按照所述执行顺序将所述临时的存储空间中的运行结果写入存储单元。

在一种可能的实现方式中,所述并行系统包括多个核,所述装置还包括:

通信模块78,用于通过线程间通信或者文件消息传递模拟核间通信。

在一种可能的实现方式中,所述通信模块78包括:

消息写入单元,用于控制第一线程抢第二文件的写锁,在第二文件中写入消息后释放第二文件的写锁;

信号发送单元,用于控制第一线程向第二线程发送信号以使第二线程抢第二文件的读锁;

消息读取单元,用于在第二线程抢到第二文件的读锁时,控制第二线程从写入消息的第二文件中读取所述消息。

在一种可能的实现方式中,所述通信模块78包括:

共享模拟单元,用于用数组模拟共享存储,通过线程共同访问所述数组交换数据,模拟核间通过共享存储交换数据的过程。

图11是根据一示例性实施例示出的一种用于并行系统的验证的装置1900的框图。例如,装置1900可以被提供为一服务器。参照图11,装置1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。

装置1900还可以包括一个电源组件1926被配置为执行装置1900的电源管理,一个有线或无线网络接口1950被配置为将装置1900连接到网络,和一个输入输出(i/o)接口1958。装置1900可以操作基于存储在存储器1932的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或类似。

在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器1932,上述计算机程序指令可由装置1900的处理组件1922执行以完成上述方法。

本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

应该理解,上述的装置实施例仅是示意性的,本公开的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。

另外,若无特别说明,在本公开各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,所述处理器可以是任何适当的硬件处理器,比如cpu、gpu、fpga、dsp和asic等等。若无特别说明,所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器rram(resistiverandomaccessmemory)、动态随机存取存储器dram(dynamicrandomaccessmemory)、静态随机存取存储器sram(staticrandom-accessmemory)、增强动态随机存取存储器edram(enhanceddynamicrandomaccessmemory)、高带宽内存hbm(high-bandwidthmemory)、混合存储立方hmc(hybridmemorycube)等等。

所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

依据以下条款可更好地理解前述内容:

条款a1,一种并行系统的验证方法,所述方法包括:

针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,得到运行结果;

将所述运行结果和所述并行系统的仿真结果进行比较,以对所述并行系统的功能进行验证;

其中,所述并行系统的仿真结果为所述并行系统并行运行所述多个部分的结果。

条款a2.根据条款a1所述的方法,所述并行系统支持多条并行执行的指令流水线;

针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,包括:

对于多条流水线中的任一条流水线,采用一个线程运行该任一条流水线所运行的指令。

条款a3.根据条款a1所述的方法,所述并行系统包括多个运算部件,支持数据流并行,

针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,包括:

根据运算部件的数目将输入数据拆分为多个部分;

采用一个线程调用一个运算部件处理相应部分的输入数据。

条款a4.根据条款a1所述的方法,所述并行系统包括多个核,支持任务级并行,

针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,包括:

采用参考模型中的一个线程执行一个核所运行的指令序列。

条款a5.根据条款a1-a4任意一项所述的方法,所述方法还包括:

在任一线程运行到调试断点时,保存当前的执行进度到第一文件中;

在接收到启动请求时,启动所述第一文件以获取当前的执行进度,并根据当前的执行进度开始继续运行所述任一线程。

条款a6.根据条款a1-a4任意一项所述的方法,所述方法还包括:

在任一线程运行到调试断点时,保存当前的执行进度,并通过子进程将调试信息传递给主进程;

通过主进程对调试信息进程处理;

在处理完所述调试信息后,通过主进程向子进程发送应答消息;

在子进程接收到主进程发送的应答消息时,控制子进程从所述执行进度开始继续运行所述任一线程。

条款a7.根据条款a1-a6任意一项所述的方法,针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,得到运行结果,包括:

如果任一线程执行到同步指令,控制所述任一线程抢所述同步指令对应的锁;

在所述任一线程抢到所述锁时,控制所述任一线程对所述同步指令对应的第一计数器执行加一操作后释放锁并等待;

在所述第一计数器的值到达第一临界值时,控制各所述同步指令所在的线程执行所述同步指令之后的指令;

若锁为被占用状态,则抢锁失败,该任一线程等待并继续抢所述同步指令对应的锁。

条款a8.根据条款a7所述的方法,在具有多组同步指令的情况下,所述方法还包括:为每组同步指令分配相同的标识信息,且该组同步指令对应的锁、第一计数器以及第一临界值都具有与该组同步指令相同的标识信息。

条款a9.根据条款a1-a8任意一项所述的方法,所述多个部分之间存在数据相关,所述方法还包括:

对于写后读和读后写相关,在存在数据相关的部分的写指令和读指令的之前或之后插入同步指令,保证指令按照与硬件相同的顺序被执行。

条款a10.根据条款a9所述的方法,所述方法还包括:

对于写后写相关,保存多个部分的写指令的执行顺序;

将多个部分对应的运行结果保存在临时的存储空间;

按照所述执行顺序将所述临时的存储空间中的运行结果写入存储单元。

条款a11.根据条款a1-a10任意一项所述的方法,所述并行系统包括多个核,所述方法还包括:

通过线程间通信或者文件消息传递模拟核间通信。

条款a12.根据条款a11所述的方法,通过文件消息传递模拟核间通信,包括:

控制第一线程抢第二文件的写锁,在第二文件中写入消息后释放第二文件的写锁;

控制第一线程向第二线程发送信号以使第二线程抢第二文件的读锁;

在第二线程抢到第二文件的读锁时,控制第二线程从写入消息的第二文件中读取所述消息。

条款a13.根据条款a11所述的方法,通过线程间通信模拟核间通信,包括:

用数组模拟共享存储,通过线程共同访问所述数组交换数据,模拟核间通过共享存储交换数据的过程。

条款a14.一种并行系统的验证装置,所述装置包括:

模拟运行模块,用于针对并行系统中并行运行的多个部分,分别采用参考模型的一个线程执行所述多个部分中的一部分,得到运行结果;

验证模块,用于将所述运行结果和所述并行系统的仿真结果进行比较,以对所述并行系统的功能进行验证;

其中,所述并行系统的仿真结果为所述并行系统并行运行所述多个部分的结果。

条款a15.根据条款a14所述的装置,所述并行系统支持多条并行执行的指令流水线;

所述模拟运行模块,包括:

第一模拟运行单元,用于对于多条流水线中的任一条流水线,采用一个线程运行该任一条流水线所运行的指令。

条款a16.根据条款a14所述的装置,所述并行系统包括多个运算部件,支持数据流并行,

所述模拟运行模块,包括:

拆分单元,用于根据运算部件的数目将输入数据拆分为多个部分;

第二模拟运行单元,用于采用一个线程调用一个运算部件处理相应部分的输入数据。

条款a17.根据条款a14所述的装置,所述并行系统包括多个核,支持任务级并行,

所述模拟运行模块,包括:

第三模拟运行单元,用于采用参考模型中的一个线程执行一个核所运行的指令序列。

条款a18.根据条款a14-a17任意一项所述的装置,所述装置还包括:

第一保存模块,用于在任一线程运行到调试断点时,保存当前的执行进度到第一文件中;

第一启动模块,用于在接收到启动请求时,启动所述第一文件以获取当前的执行进度,并根据当前的执行进度开始继续运行所述任一线程。

条款a19.根据条款a14-a17任意一项所述的装置,所述装置还包括:

第二保存模块,用于在任一线程运行到调试断点时,保存当前的执行进度,并通过子进程将调试信息传递给主进程;

处理模块,用于通过主进程对调试信息进程处理;

应答模块,用于在处理完所述调试信息后,通过主进程向子进程发送应答消息;

第二启动模块,用于在子进程接收到主进程发送的应答消息时,控制子进程从所述执行进度开始继续运行所述任一线程。

条款a20.根据条款a14-a19任意一项所述的装置,所述模拟运行模块还包括:

抢锁单元,用于如果任一线程执行到同步指令,控制所述任一线程抢所述同步指令对应的锁;

计数单元,用于在所述任一线程抢到所述锁时,控制所述任一线程对所述同步指令对应的第一计数器执行加一操作后释放锁并等待;

同步单元,用于在所述第一计数器的值到达第一临界值时,控制各所述同步指令所在的线程执行所述同步指令之后的指令;

所述抢锁单元还用于若锁为被占用状态,则抢锁失败,该任一线程等待并继续抢所述同步指令对应的锁。

条款a21.根据条款a20所述的装置,在具有多组同步指令的情况下,所述装置还包括:分配模块,用于为每组同步指令分配相同的标识信息,且该组同步指令对应的锁、第一计数器以及第一临界值都具有与该组同步指令相同的标识信息。

条款a22.根据条款a14-a21任意一项所述的装置,所述多个部分之间存在数据相关,所述装置还包括:

指令插入模块,用于对于写后读和读后写相关,在存在数据相关的部分的写指令和读指令的之前或之后插入同步指令,保证指令按照与硬件相同的顺序被执行。

条款a23.根据条款a22所述的装置,所述装置还包括:

第三保存模块,用于对于写后写相关,保存多个部分的写指令的执行顺序;

第四保存模块,用于将多个部分对应的运行结果保存在临时的存储空间;

顺序写入模块,用于按照所述执行顺序将所述临时的存储空间中的运行结果写入存储单元。

条款a24.根据条款a14-a23任意一项所述的装置,所述并行系统包括多个核,所述装置还包括:

通信模块,用于通过线程间通信或者文件消息传递模拟核间通信。

条款a25.根据条款a24所述的装置,所述通信模块包括:

消息写入单元,用于控制第一线程抢第二文件的写锁,在第二文件中写入消息后释放第二文件的写锁;

信号发送单元,用于控制第一线程向第二线程发送信号以使第二线程抢第二文件的读锁;

消息读取单元,用于在第二线程抢到第二文件的读锁时,控制第二线程从写入消息的第二文件中读取所述消息。

条款a26.根据条款a24所述的装置,所述通信模块包括:

共享模拟单元,用于用数组模拟共享存储,通过线程共同访问所述数组交换数据,模拟核间通过共享存储交换数据的过程。

以上对本公开实施例进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本公开的方法及其核心思想。同时,本领域技术人员依据本公开的思想,基于本公开的具体实施方式及应用范围上做出的改变或变形之处,都属于本公开保护的范围。综上所述,本说明书内容不应理解为对本公开的限制。

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