指令处理装置、处理器、芯片、计算设备及相应的方法
技术领域
本公开涉及计算机
技术领域
,尤其涉及芯片技术,具体涉及一种指令处理装置、处理器、芯片、计算设备及相应的方法。背景技术
程序指令的编写质量会影响处理器的计算效率。在采用硬件加速器(例如NPU、GPU、FPGA等专用处理器)来进行神经网络计算的场景中,这种影响尤为明显。硬件加速器一般包括多个协处理单元和内部存储器,每个协处理单元内部集成有大量的并发计算单元,用于对计算任务进行加速处理。在硬件加速器进行计算时,需要通过程序指令来将神经网络算法映射到硬件加速器的并发计算单元上。对于同一个神经网络算法,可能有不同的映射方案。由于硬件加速器内部的结构、计算资源与数据通路的限制,不同的映射方案虽然都能得到正确的计算结果,但计算效率可能有极大的差异。
因此,在一些情况中,用户希望获取处理器在执行某条或某些指令时的执行信息,以便据此评估指令的性能。
在此部分中描述的方法不一定是之前已经设想到或采用的方法。除非另有指明,否则不应假定此部分中描述的任何方法仅因其包括在此部分中就被认为是现有技术。类似地,除非另有指明,否则此部分中提及的问题不应认为在任何现有技术中已被公认。
发明内容
本公开提供了一种指令处理装置、处理器、芯片、计算设备及相应的方法。
根据本公开的一方面,提供了一种指令处理装置,包括:执行单元;至少一个性能寄存器组,用于记录所述执行单元执行待调试指令期间的执行信息;配置寄存器,用于配置调试参数;以及触发电路,被配置为根据所述调试参数来使能所述至少一个性能寄存器组中的一个或多个性能寄存器组以记录所述执行信息。
根据本公开的另一方面,提供了一种处理器,包括至少一个上述的指令处理装置。
根据本公开的另一方面,提供了一种芯片,包括至少一个上述处理器。
根据本公开的另一方面,提供了一种计算设备,包括上述芯片。
根据本公开的另一方面,提供了一种评估指令执行性能的方法,包括:获取待调试指令在被一个或多个上述指令处理装置执行时的执行信息;根据所述执行信息来确定所述待调试指令的性能指标;以及根据所述性能指标来判断所述待调试指令的执行性能是否达到目标。
根据本公开的另一方面,提供了一种评估指令执行性能的装置,包括:信息获取模块,被配置为获取待调试指令在被一个或多个上述指令处理装置执行时的执行信息;指标确定模块,被配置为根据所述执行信息来确定所述待调试指令的性能指标;以及性能判断模块,被配置为根据所述性能指标来判断所述待调试指令的执行性能是否达到目标。
根据本公开的另一方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器。该存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述评估指令执行性能的方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质。该计算机指令用于使计算机执行上述评估指令执行性能的方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序。该计算机程序在被处理器执行时实现上述评估指令执行性能的方法。
根据本公开的一个或多个实施例,通过在指令处理装置中设置配置寄存器、触发电路和至少一个性能寄存器组,能够记录执行单元在执行待调试指令期间的执行信息。
根据本公开的实施例,仅需在指令处理装置中设置少量的寄存器(配置寄存器和至少一个性能寄存器组)和结构简单的触发电路,即可记录待调试指令的执行信息。执行信息的记录和传递可以复用指令处理装置中原有的寄存器读写通路,无需设置额外的数据通路或设置与指令处理装置相连的专用的存储器结构,生产成本和设计成本较低,占用的芯片面积较小。并且,本公开的实施例在记录执行信息时对指令处理装置原本的数据通路和与指令处理装置相连的存储器无侵入,能够准确记录待调试指令的执行信息。
进一步地,根据本公开的实施例,根据待调试指令的执行信息,能够准确评估待调试指令的执行性能,以便对待调试指令进行优化。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
图1示出了根据本公开实施例的指令处理装置的示意图;
图2示出了根据本公开实施例的处理器的示意图;
图3示出了根据本公开实施例的芯片的示意图;
图4示出了根据本公开实施例的评估指令执行性能的方法的流程图;
图5示出了根据本公开实施例的执行时序图的示意图;
图6示出了根据本公开实施例的对执行时间信息进行校准的示意图;
图7示出了根据本公开实施例的指令评估及优化过程的流程图;
图8示出了根据本公开实施例的评估指令执行性能的装置的结构框图;以及
图9示出了能够用于实现本公开的实施例的示例性电子设备的结构框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。
在本公开中对各种所述示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该要素可以是一个也可以是多个。此外,本公开中所使用的术语“和/或”涵盖所列出的项目中的任何一个以及全部可能的组合方式。
在一些情况中,用户希望获取处理器在执行某条或某些指令时的执行信息,以便据此评估指令的性能。
在相关技术中,处理器执行信息的采集方案主要有以下两种:
一种方案是在处理器中增设专门的硬件,来实现处理器执行过程中的执行信息的记录以及传递。为了将处理器中的各个组件(例如处理器核、存储器等)的执行信息记录下来并统一进行处理和传递,需要设置专门的存储模块对信息进行暂存,设计独立的数据通路对各个组件的执行信息进行汇总并统一输出。并且,为了保证输出带宽足够,可能还需要设置专门的数据压缩模块来降低传递数据量,这些设计都需要占用额外的芯片面积,从而增加了芯片的生产成本。同时,增设的硬件也需要额外付出开发和验证代价,从而推高了芯片的设计成本。
另一种方案是,通过复用处理器中已有的存储资源和数据通路来传递和记录相关执行信息。该方案的缺点是执行信息的记录和传递过程对处理器的工作状态有侵入。由于记录的执行信息与处理器工作过程中产生的控制流和数据流共用存储带宽和数据通路,往往导致处理器的工作由于存储和网络带宽被占用而拖慢,从而使最终得到的处理器执行信息并不能真实反应处理器的正常工作状态。尤其对于神经网络处理器而言,由于针对的是高密度、大数据量、高吞吐的神经网络(例如深度卷积神经网络,Convolutional DeepNeural Networks,CDNN)计算,存储和网络带宽在多数情况下是处理器的关键资源,从而进一步加剧了所获得的处理器执行信息的失准程度,导致用户难以根据得到的执行信息获取到关键的指令优化方向和优化点。
为此,本公开实施例提供一种指令处理装置,该指令处理装置能够低成本地、准确地记录执行指令时的执行信息。进一步地,基于指令处理装置记录的指令的执行信息,本公开还提供一种评估指令执行性能的方法及装置,能够基于指令的执行信息来准确评估指令的执行性能,以便对指令进行优化。在本公开的实施例中,将执行指令并记录指令的执行信息的过程记为对指令进行“调试”,相应地,被执行并被记录了执行信息的指令为“待调试指令”。
下面将结合附图详细描述本公开的实施例。
图1示出了根据本公开实施例的指令处理装置100的示意图。指令处理装置100例如可以是单核处理器、多核处理器的处理器核、或者电子系统中的处理元件。应当指出,此处的处理器包括但不限于中央处理器(Central Processing Unit,CPU)、神经网络处理器(Neural-network Processing Unit,NPU)、图形处理器(Graphics Processing Unit,GPU)、张量处理器(Tensor Processing Unit,TPU)、数字信号处理器(Digital SignalProcessor,DSP)等。
如图1所示,指令处理装置100包括:执行单元110;至少一个性能寄存器组122(图1中示出了四个性能寄存器组122-1~122-4),用于记录执行单元110执行待调试指令期间的执行信息;配置寄存器124,用于配置调试参数;以及触发电路130,被配置为根据调试参数来使能上述至少一个性能寄存器组122中的一个或多个性能寄存器组以记录执行信息。
根据本公开的实施例,仅需在指令处理装置中设置少量的寄存器(即配置寄存器和至少一个性能寄存器组)和结构简单的触发电路,即可记录待调试指令的执行信息。执行信息的记录和传递可以复用指令处理装置中原有的寄存器读写通路,无需设置额外的数据通路或设置与指令处理装置相连的专用的存储器结构,生产成本和设计成本较低,占用的芯片面积较小。并且,本公开的实施例在记录执行信息时对指令处理装置原本的数据通路和与指令处理装置相连的存储器无侵入,能够准确记录待调试指令的执行信息。
根据一些实施例,执行单元110包括可操作用于执行指令的电路,其例如可以包括解码器和不同类型的计算单元。
解码器例如可以获取存储器102中的高级机器指令或宏指令形式的指令,并且解码这些指令以生成低级微操作、微代码进入点、微指令或其他低级指令或控制信号。低级指令或控制信号可以通过低级(例如,电路级或硬件级)操作来实现高级指令的操作。解码器可以通过不同的方式来实现,包括但不限于微代码、查找表、硬件实现、可编程逻辑阵列(PLA)等。本公开不受限于实现解码器的方式,任何可以实现解码器的方式均在本公开的保护范围之内。
计算单元根据解码后的指令来执行运算。计算单元包括但不限于算数逻辑单元(Arithmetic and Logic Unit)、乘法器阵列电路、加法器阵列电路、向量处理电路、格式转换(例如将浮点数转换为定点数或者相反)电路等。
根据一些实施例,如图1所示,指令处理装置100包括寄存器单元120,寄存器单元120与执行单元110耦接,执行单元110可以通过预设的寄存器读写通路对寄存器单元120中的寄存器进行读写。寄存器单元120可以包括不同位宽、不同类型、不同数量的寄存器组或寄存器,这些寄存器组或寄存器可以用于存储执行单元110执行指令过程中的控制信息、状态信息、以及指令的操作数等。
在本公开的实施例中,寄存器单元120中包括上述至少一个性能寄存器组122以及配置寄存器124,因此,执行单元110或触发电路130可以通过寄存器单元120原有的寄存器读写通路来读写性能寄存器组122以及配置寄存器124,而无需设置额外的数据通路。
可以理解的,除性能寄存器组122以及配置寄存器124之外,寄存器单元120中还可以包括其他寄存器(例如通用寄存器、向量寄存器等),在此不作过多限制。
根据一些实施例,性能寄存器组包括至少一个时间计数器和/或至少一个事件计数器,其中,时间计数器用于记录第一预设事件发生的时间,事件计数器用于记录第二预设事件发生的次数。根据一些实施例,第一预设事件例如可以包括以下一种或多种:指令开始执行、指令执行完成、读存储器开始、读存储器结束、写存储器开始、写存储器结束。第二预设事件例如可以包括以下一种或多种:使用计算单元、读存储器、读存储器阻塞、写存储器、写存储器阻塞。
例如,如图1所示,性能寄存器122-1包括一个时间计数器122-1A和一个事件计数器122-1B。时间计数器122-1A用于在特定事件(第一预设事件)发生时,将当前的时间记录下来。例如,记录待调试指令开始执行的时间、待调试指令结束执行的时间、待调试指令进出特定模块(例如存储器等)的时间等。事件计数器122-1B用于在特定事件(第二预设事件)发生时,进行自增运算,以记录该特定事件发生的次数。例如,记录访问存储器102的次数、访问外部存储器(外部存储器未在图1中示出)的次数、执行单元110内部各种计算单元(例如乘法器、加法器等)的使用次数等。
配置寄存器124用于配置调试参数。触发电路130被配置为根据配置寄存器124中的调试参数来使能至少一个性能寄存器组122中的一个或多个性能寄存器组以记录待调试指令的执行信息。图1中仅示出了一个触发电路130,但可以理解的,在其他实施例中,也可以设置多个触发电路,每个触发电路被配置为使能一个或多个性能寄存器组。例如,可以设置与性能寄存器组数量相同的触发电路,每个触发电路用于使能相应的一个性能寄存器组。
根据一些实施例,具体地,触发电路130还可以包括一个或多个触发子电路,每个触发子电路用于使能相应性能寄存器中的一个或多个寄存器(时间寄存器或事件寄存器)。
根据一些实施例,配置寄存器124可配置的调试参数包括调试模式,相应地,配置寄存器124包括用于配置调试模式的模式寄存器124A,模式寄存器124A的名称例如可以是TRACE_MODE。调试模式可以有多种,不同的调试模式可以通过模式寄存器124A中的值来区分。例如,调试模式可以包括标记模式和自动模式。当模式寄存器124A中的值为0时,表示当前的调试模式为标记模式;当模式寄存器124A中的值为1时,表示当前的调试模式为自动模式。
在标记模式下,指令处理装置100将目标指令序列中的通过标记指令标记的一条或多条指令作为待调试指令,并记录执行单元110在执行该待调试指令期间的执行信息。例如,标记指令例如包括调试开始标记指令(trace_begin)和调试结束标记指令(trace_end),目标指令序列中的位于调试开始标记指令trace_begin和调试结束标记指令trace_end之间的指令即为待调试指令。与此相应地,根据一些实施例,触发电路130进一步被配置为:在调试模式为标记模式的情况下,识别当前指令(即执行单元110当前执行的指令)是否为标记指令;以及响应于确定当前指令为标记指令,使能至少一个性能寄存器组122中的一个或多个性能寄存器组以记录执行信息。
根据一些实施例,标记指令包括用于指示标记类型的第一字段和用于指示性能寄存器组的第二字段,标记类型包括调试开始和调试结束。例如,当第一字段的值为1时,表示当前标记指令为调试开始标记指令trace_begin;当第一字段的值为0时,表示当前标记指令为调试结束标记指令trace_end。第二字段的值例如可以是性能寄存器组的标识。相应地,触发电路130进一步被配置为:响应于确定当前指令为标记指令,使能第二字段对应的性能寄存器组以记录执行信息。也就是说,标记指令用于开始或结束对待调试指令的调试过程,并且能够指定将调试过程中的执行信息存储至哪个性能寄存器组中。
根据一些实施例,在调试模式为自动模式的情况下,调试参数还包括与自动模式相应的循环参数,相应地,配置寄存器124包括用于配置循环参数的寄存器(例如图1及下文所示的起始寄存器124B、数量寄存器124C、步长寄存器124D、自增寄存器124E等)。循环参数用于对自动模式下的调试过程进行控制。在自动模式下,可以基于已配置的循环参数,将目标指令序列中的部分或全部指令作为待调试指令,并自动记录执行单元110在执行该待调试指令期间的执行信息,而无需用户在目标指令序列中手动设置标记指令。自动模式适用于待调试指令包含的指令数量较多的情形,例如,待调试指令为神经网络的多个卷积层的代码,或ResNet的残差单元的代码等。
具体地,循环参数用于将待调试指令划分为多个指令组,相应地,触发电路130进一步被配置为:在调试模式为自动模式的情况下,循环使能上述至少一个性能寄存器组中的每一个性能寄存器组以分别记录上述多个指令组中的每一个指令组被执行期间的执行信息。根据一些实施例,执行单元110可以基于配置寄存器124中的循环参数,自动为每个指令组生成标记指令(即在每个指令组的前端添加trace_begin指令,在每个指令组的后端添加trace_end指令),标记指令中包括用于指示性能寄存器组的第二字段。相应地,触发电路130可以基于各指令组的标记指令来循环使能相应的性能寄存器组以记录执行信息。
例如,在图1所示的指令处理装置100中,共有4个性能寄存器组122-1~122-4。根据配置寄存器124中存储的循环参数,从待调试指令中划分出9个指令组,即指令组1~9。则在自动模式下,触发电路130先使能性能寄存器组122-1来记录指令组1的执行信息,随后使能性能寄存器组122-2来记录指令组2的执行信息,随后使能性能寄存器组122-3来记录指令组3的执行信息,随后使能性能寄存器组122-4来记录指令组4的执行信息,随后再次使能性能寄存器组122-1来记录指令组5的执行信息,以此类推,直至所有指令组的执行信息均被记录完毕。
根据一些实施例,可以在性能寄存器组122记录了某一指令组的执行信息后,将记录的执行信息传递至存储器102中进行存储(进一步还可以将执行信息从存储器102传递至容量更大的外部存储器,外部存储器未在图1中示出),以避免性能寄存器组122当前存储的指令组的执行信息被下一个指令组的执行信息覆盖而丢失。
根据一些实施例,循环参数包括:起始指令编号,用于指示一次循环中的第一个指令组中的第一条指令的编号;单次调试指令数量,用于指示单个指令组包括的指令的数量;指令间隔,用于指示相邻两个指令组中的第一条指令的编号差;以及循环增量,用于指示一次循环结束后所述起始指令编号增加的值。相应地,配置寄存器124可以包括用于配置起始指令编号的起始寄存器124B、用于配置单次调试指令数量的数量寄存器124C、用于配置指令间隔的步长寄存器124D以及用于配置循环增量的自增寄存器124E。
通过上述多种循环参数,可以灵活配置指令组的划分方式,实现自动模式下的灵活调试。
下表1~表3示出了将模式寄存器124A(寄存器名称为TRACE_MODE,值为0表示标记模式,值为1表示自动模式)、起始寄存器124B(寄存器名称为TRACE_BEGIN)、数量寄存器124C(寄存器名称为TRACE_NUM)、步长寄存器124D(寄存器名称为TRACE_STEP)、自增寄存器124E(寄存器名称为TRACE_OVERHEAD)设置为不同数值时,每次循环中各性能寄存器组(性能寄存器组122-1~122-4)对应调试的指令的情况。
表1
表2
表3
根据一些实施例,指令处理装置100还包括计时器(计时器未在图1中示出),被配置为在待调试指令开始执行时开始计时,以及在待调试指令执行完成时结束计时,以生成调试过程的时间线。当第一预设事件发生时,触发电路130可以使能相应的性能寄存器组,将当前计时器的时间写入相应性能寄存器组的时间计数器中。
计时器例如可以实现为寄存器单元120中的只写(Write-Only,WO)计数器。当待调试指令开始执行时,计时器开始自增计时;当待调试指令执行完成时结束计时,即将计时器中的值清零。
为避免混淆描述,图1中示出了相对简单的指令处理装置100。可以理解的,在其他实施例中,指令处理装置还可以包括其他模块,诸如取指令单元、高速缓存(Cache)等。本公开不受限于指令处理装置100的具体结构。
本公开的指令处理装置可以应用于处理器中,作为处理器中的用于执行特定计算任务的处理器核。相应地,本公开实施例还提供一种处理器,包括至少一个上述指令处理装置。
图2示出了根据本公开实施例的处理器200的示意图。如图2所示,处理器200包括三个指令处理装置210~230,控制单元240、存储器250和DMA(Direct Memory Access,直接存储器访问)260。处理器200例如可以是NPU,指令处理装置210~230可以是NPU中的协处理单元,这些协处理单元具有上文所述的指令处理装置100的特征。控制单元240用于向指令处理装置210~230下发计算任务,协调三者的计算过程。DMA260可以通过片上互联单元202连接至处理器200所在的芯片的其他模块(例如其他处理器、存储器等)。
本公开实施例的处理器可以集成于芯片中,以使该芯片能够提供该处理器所支持的处理功能。相应地,本公开实施例还提供一种芯片,包括至少一个上述处理器。
图3示出了根据本公开实施例的芯片300的示意图。芯片300例如可以是嵌入式芯片。如图3所示,芯片300包括片上互联单元310以及通过片上互联单元310互联的中央处理器(CPU)320、一个或多个协处理器330、存储单元340和显示单元350。协处理器330例如可以是NPU、GPU、TPU等。中央处理器320和协处理器330中的一个或多个可以是集成了本公开实施例的指令处理装置的处理器。存储单元340例如可以是静态随机存取存储器(StaticRandom-Access Memory,SRAM)、高带宽存储器(High Bandwidth Memory,HBM)、图形用双倍数据传输率存储器(Graphics Double Data Rate,GDDR)等。显示单元350用于驱动一个或多个外部显示器。
上述的芯片可以包含在计算设备中,以便在计算设备中实现相应的功能,包括但不限于执行相关控制程序、进行数据分析、运算和处理、网络通信、控制该计算设备的外设等。相应地,本公开实施例还提供一种计算设备,包括上述芯片。该计算设备例如可以是车载设备、工控设备、感测设备、智能家用设备(智能音箱、智能门锁、智能显示设备)等,但不限于此。
如上所述,根据本公开实施例的指令处理装置能够准确记录待调试指令的执行信息。基于已记录的待调试指令的执行信息,本公开实施例开提供一种评估指令执行性能的方法,该方法能够基于待调试指令的执行信息,准确评估待调试指令的执行性能,以便对待调试指令进行优化。
本公开实施例的评估指令性能的方法可以在与指令处理装置耦接的调试主机中执行。例如,可以通过调试接口,例如PCI-e(Peripheral Component Interconnect-express)接口、JTAG(Joint Test Action Group)接口等,来将指令处理装置(或指令处理装置所在的处理器、芯片)与调试主机相连,将指令处理装置记录的待调试指令的执行信息传递至调试主机,然后由调试主机基于执行信息来执行本公开实施例的评估指令性能的方法。调试主机例如可以是桌面式个人计算机、笔记本计算机等。在一些实施例中,调试主机也可以是服务器或移动设备。
图4示出了根据本公开实施例的评估指令执行性能的方法400的流程图。如图4所示,方法400包括:
步骤410,获取待调试指令在被一个或多个指令处理装置执行时的执行信息,一个或多个指令处理装置为根据本发明实施例的指令处理装置(例如图1所示的指令处理装置100);
步骤420,根据执行信息来确定待调试指令的性能指标;以及
步骤430,根据性能指标来判断待调试指令的执行性能是否达到目标。
根据本公开的实施例,根据待调试指令的执行信息,能够准确评估待调试指令的执行性能,以便对待调试指令进行优化。
以下详细描述方法400的各个步骤。
如前所述,指令处理装置可以在执行待调试指令的过程中采集多种执行信息,执行信息包括多种不同的事件发生的时间和次数。步骤410中获取的执行信息可以是指令处理装置采集到的执行信息的全部或部分。
步骤410获取的执行信息的种类可以根据步骤420要计算的性能指标的种类来确定。
根据一些实施例,待调试指令被一个指令处理装置执行,步骤420的性能指标包括单位时间内该指令处理装置从外部存储器读取到的第一数据量和单位时间内该指令处理装置的计算单元计算的第二数据量。与此相应地,步骤430包括:判断第一数据量与第二数据量是否匹配;以及响应于确定第一数据量与第二数据量匹配,判定待调试指令的执行性能达到目标。
根据一些实施例,单位时间内指令处理装置从外部存储器读取到的第一数据量可以按照公式mn/(t2-t1)来计算,其中,m为总线的最大吞吐量(即每次可以读取的最大数据量),n为待调试指令的执行过程中总线上读数据有效信号出现的次数,t1为读外部存储器开始的时间,t2为读外部存储器结束的时间。n、t1、t2为通过步骤410获取的执行信息,m为理论值(不属于需要获取的执行信息)。
根据一些实施例,单位时间内指令处理装置的计算单元计算的第二数据量可以按照公式pq/(t4-t3)来计算,其中,p为指令处理装置的计算单元(例如乘加器)的理论吞吐量(即每次可以计算的最大数据量),q为待调试指令的执行过程中计算单元被占用的总次数,t3为计算单元开始进行计算的时间,t4为计算单元结束计算的时间。q、t3、t4为通过步骤410获取的执行信息,p为理论值(不属于需要获取的执行信息)。
可以理解的,第一数据量和第二数据量是否匹配的判断标准可以根据具体情况来设定。在一些实施例中,从外部存储器中读取到的数据均仅参与了一次运算,在这种情况下,第一数据量与第二数据量匹配可以指第一数据量和第二数据量相等(或大致相等)。在另一些实施例中,从外部存储器中读取到的数据可以分别参与了多次运算,在这种情况下,第一数据量和第二数据量匹配可以指第二数据量是第一数据量的整数倍(或大致是第一数据量的整数倍。
基于上述实施例,第一数据量可以代表待调试指令的访存性能,第二数据量可以代表待调试指令的计算性能。二者越匹配,说明在待调试指令的执行过程中,存储资源和计算资源均得到了充分利用,没有明显的短板,该待调试指令的执行性能越好。若二者不匹配,则可以对待调试指令进行优化,直至二者匹配为止。
在上述实施例中,第一数据量和第二数据量可以用于表征待调试指令的总体性能,因此,可以将二者记为“表征参数”。
根据一些实施例,待调试指令被一个指令处理装置执行,步骤420中的性能指标包括以下至少一种:指令处理装置对外部存储器进行部分写的次数占写外部存储器总次数的第一比例、指令处理装置访问内部存储器被阻塞的次数占访问内部存储器总次数的第二比例、指令处理装置中的计算单元的使用次数占计算单元的可用最大次数的第三比例。与此相应地,步骤430包括:根据性能指标与预设值的相对大小来判断待调试指令的执行性能是否达到目标。
在本公开的实施例中,对存储器进行“部分写”指的是单次写入存储器的数据量小于该存储器的数据位宽。例如,某存储器的数据位宽为4字节,某次写操作写入存储器的数据量为2字节,则该写操作为“部分写”。
根据一些实施例,可以在步骤410中获取指令处理装置对外部存储器(即位于指令处理装置所在的处理器外部的存储器,例如HBM、GDDR等)进行部分写的次数a1,以及写外部存储器总次数b1,相应地,第一比例=a1/b1。如果第一比例过大(大于一预设值),会造成较大的外部存储器性能损失。为了提升性能,可以对待调试指令进行优化,以增加对外部存储器的对齐访问(即单次写入的数据量为外部存储器数据位宽的整数倍),减小第一比例。
根据一些实施例,为了提升内部存储器(即位于指令处理装置所在的处理器内部的存储器)的访问性能,一般将内部存储器的存储空间划分为多块(bank),位于同一块的数据共用数据的读写接口,无法同时被多个指令处理装置访问;位于不同块的数据使用不同的读写接口,可以同时被不同的指令处理装置访问。在待调试指令的执行过程中,如果需要访问的数据位于同一块上,那么就只能通过仲裁的方式依次完成访问,未被仲裁到的请求被暂时阻塞,从而导致访存性能下降。
根据一些实施例,可以在步骤410中获取指令处理装置访问内部存储器被阻塞的次数a2,以及访问内部存储器的总次数b2,相应地,第二比例=a2/b2。如果第二比例过大(大于一预设值),说明内部存储器中的数据分布不合理,容易造成内部存储器阻塞。为了提升性能,可以对待调试指令进行优化,以使数据仅可能分布在内部存储器的不同块中,以减小第二比例,减小发生访问阻塞的可能性。
根据一些实施例,对于NPU、GPU来说,其中的计算单元(例如乘加器)多以阵列(即计算单元阵列)的方式设置,从而获得较强的并行计算能力。但是,某些计算任务的计算规模较小,导致一部分计算单元未被利用,从而造成算力的浪费。
根据一些实施例,可以在步骤410中获取指令处理装置中的计算单元的使用次数a3以及计算单元阵列的使用次数b3,相应地,第三比例=a3/(b3*c),其中,c为计算单元阵列中包括的计算单元的数量。如果第三比例过小(小于一预设值),则说明计算单元未被充分利用,存在较大的资源浪费。为了提升性能,可以对待调试指令进行优化,以增大第三比例,使计算单元得到充分利用。
在上述实施例中,第一比例、第二比例和第三比例可以帮助定位待调试指令中的存在的具体问题,表征具体是哪些因素影响了执行效率,能够向用户提供具体的优化方向。因此,可以将三者记为“溯源参数”。
根据一些实施例,待调试指令被多个指令处理装置协同执行,这多个指令处理装置中的每一个指令处理装置执行待调试指令中的部分指令。在这种情况下,可以通过步骤410,获取多个指令处理装置各自执行相应部分指令的时间段信息。并且相应地,在步骤420中,根据多个指令处理装置各自的时间段信息,生成待调试指令的执行时序图。进一步地,可以根据执行时序图来确定待调试指令的瓶颈资源和优化方向。
例如,一个神经网络算法可以由NPU中的多个协处理单元(即指令处理装置)协同执行,每个协处理单元执行该神经网络算法中的一部分。例如,某些协处理单元执行矩阵运算,某些协处理单元执行向量运算,某些协处理单元执行数据格式转换运算,等。通过步骤410,可以获取各协处理单元各自执行相应部分指令的时间段信息,例如,协处理单元COP0执行指令的时间段信息包括t0~t1,t3~t5;协处理单元COP1执行指令的时间段信息包括t2~t4,t6~t7;等。随后,通过步骤420,可以根据统一的时间线,将各协处理单元执行指令的时间段信息依次排列,生成待调试指令的执行时序图。
图5示出了根据本公开实施例的执行时序图的一个示例。图5中的执行时序图根据NPU的六个协处理单元COP0~COP5执行指令的时间段信息生成,每一行对应于一个协处理单元,每一行中的一个阴影块对应于一个时间段,表示相应的协处理单元在该时间段被占用,处于忙碌(busy)状态。如图5所示,协处理单元COP3一直处于忙碌状态,因此COP3为瓶颈资源。为了提高执行性能,可以对待调试指令中由COP3执行的部分进行优化,以提高COP3执行指令的效率,减少COP3的执行时间,从而减少其他协处理单元的等待COP3的时间,提高待调试指令在整个NPU上的执行效率。
根据一些实施例,出于芯片面积开销的考虑,通常指令处理装置中只能集成有限数量的性能寄存器组。在待调试指令包括的指令数量较多的情况下,为了得到整个待调试指令执行过程的时序图,需要将待调试指令多次执行(例如,可以由同一个指令处理装置执行多次,或者可以由多个不同的指令处理装置分别执行一次,等),每次记录一部分指令的执行信息,并将多次执行得到的各部分指令的执行信息进行合并。需要说明的是,由于不同指令处理装置的硬件状态不同,并且同一个指令处理装置在不同时间的存储环境也不同,因此在多次执行待调试指令时,针对同一条指令花费的时间存在差别,所以不能单独执行某一条或某一组指令来记录其执行信息,而是需要将待调试指令完整执行,然后从中获取需要的某一条或某一组指令的执行信息,这样才能保证每次执待调试指令的环境大致相同,使合并得到的时序图与待调试指令的实际运行状态一致。
进一步地,由于不同指令处理装置的硬件状态不同,并且同一个指令处理装置在不同时间的存储环境也不同,因此每次执行待调试指令的时间可能存在波动,无法直接根据时间线将各次执行的执行信息进行合并。因此,根据一些实施例,可以对各次执行的执行时间信息进行校准,然后将校准后的执行时间信息汇总合并,得到待调试指令的时序图,确定待调试指令的总执行时间。该方案既可以在待调试指令被执行期间实时获取相应的执行时间信息并进行合并(该方式可以实时生成时序图),也可以在待调试指令整体执行完毕后,统一获取执行时间信息并进行合并(该方式可以进一步采用多次运行取平均等手段来提高时间校准的准确性,降低偶然性影响)。
此外,在待调试指令的指令数量规模比较庞大时,如果用户有多个执行环境(例如芯片、处理器等包含指令处理装置的硬件环境),可以将待调试指令的调试工作分配到多个执行环境上并行执行,每个执行环境记录待调试指令中的一部分指令的执行时间信息,并在最后合并得到待调试指令整体的时序图,从而实现缩短评估时间的目的。
具体地,根据一些实施例,待调试指令被划分为多个指令片段,每个指令片段包括多个指令组(在一些情况中,一个指令组可以仅包含一条指令),并且相邻的两个指令片段存在一部分相同的指令组,待调试指令被一个或多个指令处理装置执行多次,每次执行时(采用上文所述的自动模式)由相应指令处理装置的性能寄存器组记录一个指令片段的执行时间信息,该执行时间信息包括相应指令片段所包括的每个指令组的执行时间。
在步骤410中,分别获取每次执行待调试指令时记录的相应指令片段的执行时间信息,并且相应地,在步骤420中,根据相邻的两个指令片段的相同的指令组的执行时间,确定时间偏移量;根据时间偏移量,对多个指令片段中的除第一个指令片段以外的指令片段的执行时间信息进行校准;以及根据校准后的执行时间信息,确定待调试指令的总执行时间。时间偏移量例如可以是相同指令组的执行开始时刻的差与执行结束时刻的差的平均值。
进一步地,在步骤430中,可以根据总执行时间与预设值的相对大小来判断待调试指令的执行性能是否达到目标。若总执行时间小于一预设值,则可以认为待调试指令的执行性能达到目标;否则,可以对待调试指令进行优化以减少其执行时间,直至总执行时间小于预设值。
图6示出了根据本公开实施例的对执行时间信息进行校准的示意图。在该图6所示的实施例中,待调试指令instr0~instr6被划分为两个指令片段630、640,每个指令片段包括四个指令组,每个指令组包括一条指令。如图6所示,指令片段630包括指令instr0~instr3,指令片段640包括指令instr3~instr6,二者存在相同的指令(组),即指令instr3。
待调试指令被执行了两次,两次执行过程中均由相应的指令处理装置采用自动模式来记录相应指令片段的执行时间信息,采用的调试参数的值可以如上文表1所示。在第一次执行时,记录了指令片段630的执行时间信息,即记录了指令instr0~instr3各自的执行时间(如上文表1所示,指令instr0~instr3各自的执行时间可以分别由性能寄存器组122-1~122-4来记录),指令instr0~instr3各自的执行时间如图6中的矩形块610~613所示。类似地,在第二次执行时,记录了指令片段640的执行时间信息,即记录了指令instr3~instr6各自的执行时间,指令instr3~instr6各自的执行时间如图6中的矩形块623~626所示。
在对指令片段630和指令片段640的执行时间信息进行合并时,首先根据二者的相同的指令的执行时间,即指令instr3的执行时间613、623,来确定时间偏移量。时间偏移量△t可以是执行时间613、623的开始时刻的差△t1与结束时刻的差△t2的平均值,即△t=(△t1+△t2)/2。可以理解的,计算出的△t1、△t2、△t可能是正数,也可能是负数。
随后,根据时间偏移量,对指令片段640的执行时间信息进行校准。具体地,对于与指令片段630重复的指令instr3,直接采用在先的指令片段630中的执行时间613,不再采用在后的指令片段640中的执行时间623。对于指令instr4~instr6,根据时间偏移量△t来对其执行时间进行校准,将指令instr4~instr6的执行时间624~626分别加上时间偏移量△t,得到校准后的执行时间624’~626’,如图6所示。
随后,根据校准后的各指令的执行时间,即执行时间610~613,624’~626’,确定待调试指令instr0~instr6的总执行时间。总执行时间为最后一条指令instr6的结束时刻t与第一条指令instr0的开始时刻t0的差。
基于本公开实施例的指令处理装置以及评估指令执行性能的方法,可以对待调试指令进行性能评估和优化。图7示出了根据本公开实施例的指令评估及优化过程的示例性流程图。在该实施例中,待调试指令为神经网络算法指令,指令处理装置为NPU中的各协处理单元。
如图7所示,在步骤702中,配置各协处理单元的配置寄存器,使用自动模式,多次运行待调试指令,生成执行时序图。
随后,在步骤704中,根据执行时序图,检查各协处理单元间的同步情况是否符合预期,即查看各协处理单元启动计算的时间是否符合预期。
在步骤706中,若不符合预期,则执行步骤710,修改程序代码,以便解决同步问题,并重新执行步骤702。
在步骤706中,若符合预期,则执行步骤708,通过各协处理单元的占用时间,寻找瓶颈协处理单元以及瓶颈指令,随后执行步骤712。
在步骤712中,查看瓶颈指令的表征参数,判断瓶颈指令是否有优化空间。
在步骤714中,若有优化空间,则执行步骤718,检查该指令的各个溯源参数,根据溯源参数来寻找优化点和优化方向,并修改相关指令。随后执行步骤720,采用标记指令标记修改的指令或指令组,并通过配置配置寄存器,使用标记模式来记录修改的指令或指令组的执行信息,并根据执行信息来进行性能评估。随后,执行步骤722,检查表征参数是否有改善,若无改善,则重新执行步骤718,若有改善,则执行步骤724。
在步骤714中,若没有优化空间,则执行步骤716,修改映射方案。随后执行步骤724,重新运行待调试指令,检查总执行时间是否达到优化目标。在步骤726中,若达到目标,则执行步骤728,完成优化;若未达到目标,则重新执行步骤702。
本公开的指令处理装置以及评估指令执行性能的方案具有以下有益效果:
1、硬件开销低,复用指令处理装置原有的寄存器读写通路来传递数据,不需要增加额外的存储资源或总线通路;
2、对指令处理装置所在的处理器(指令处理装置可以是多核处理器中的一个处理器核)的数据通路和存储器无侵入,调试的过程不会因为影响原本的指令执行过程而导致记录的执行信息失准;
3、提供了标记模式和自动模式两种调试模式。标记模式针对性强,调试过程迅速,适合快速评估优化效果;自动模式能够获得指令规模较大的待调试指令(例如神经网络的多个卷积层、ResNet的残差单元等)的总体执行情况,方便定位性能瓶颈,但需要多次执行待调试指令,耗时稍长,用户可以根据需要灵活选择两种模式;
4、提供了自动模式下,对多次执行待调试指令获得的执行时间信息进行合并的简单可行方案。在自动模式下,通过简单的基准加偏移量的数据处理方式,能够将多次执行中得到的执行时间信息进行合并,从而得到时序图,后处理精度可接受,计算量可控;
5、针对自动模式,可以采用以资源换时间的方式,通过多硬件并行提升调试效率;
6、对驱动、框架、runtime等软件栈无侵入。不需要改动处理器(例如神经网络处理器的软件栈),兼容代价小。
可以理解,本公开实施例的指令处理装置优选地为用于处理粗粒度指令的单核处理器或多核处理器中的单个处理器核,相应地,待调试指令优选地为粗粒度指令。粗粒度指令指的是能够执行一系列操作的指令。例如,对于NPU来说,粗粒度指令可以是卷积指令,卷积指令所执行的操作包括数据的分批加载操作、乘法操作、加法操作等。由于粗粒度指令能够执行一系列操作,因此用于实现某一特定任务所编写的程序(即上文的目标指令序列)所包含的粗粒度指令的数量不会太多,相应地待调试指令的数量不会太多,指令处理装置对待调试指令进行调试所耗费的时间较少,调试效率较高。此外,对于一条粗粒度指令来说,处理的数据规模不同,对应的计算效率和访存效率往往也不同。对于包含多个指令处理装置的多核处理器来说,通过获取各指令处理装置执行粗粒度的待调试指令时记录的执行信息并对其进行分析,一方面能够检查异步执行的多个指令处理装置之间的依赖关系是否合理,另一方面能够优化待调试指令在各指令处理装置上的划分方式(即优化待调试指令的各个部分由哪个指令处理装置执行),以使待调试指令在整个处理器上的执行效率达到最佳。
另外,可以理解,本公开实施例的指令处理装置也可以是用于处理细粒度指令的单核处理器或多核处理器中的单个处理器核,相应地,待调试指令为细粒度指令。细粒度指令指的是能够执行一个操作或同类型少量操作的指令。细粒度指令是相对于粗粒度指令而言的。相较于一条粗粒度指令来说,一条细粒度指令能够执行的操作的数量和类型都更少。不过,由于细粒度指令能够执行的操作的数量和类型较少,因此用于实现某一特定任务所编写的程序(即上文的目标指令序列)所包含的细粒度指令的数量通常较多,相应地待调试指令的数量较多,指令处理装置对待调试指令进行调试所耗费的时间较长,调试效率较低。另一方面,由于细粒度指令通常不涉及因处理的数据规模改变而导致较大的性能变化的问题,因此指令处理装置执行细粒度的待调试指令时记录的执行信息,对于待调试指令的优化效果通常较为有限。
根据本公开的实施例,还提供一种评估指令执行性能的装置。
图8示出了根据本公开的实施例的评估指令执行性能的装置800的结构框图。如图8所示,装置800包括:
信息获取模块810,被配置为获取待调试指令再被一个或多个指令处理装置执行时的执行信息,一个或多个指令处理装置为根据本发明实施例的指令处理装置(例如图1所示的指令处理装置100);
指标确定模块820,被配置为根据执行信息来确定待调试指令的性能指标;以及
性能判断模块830,被配置为根据性能指标来判断待调试指令的执行性能是否达到目标。
根据本公开的实施例,根据待调试指令的执行信息,能够准确评估待调试指令的执行性能,以便对待调试指令进行优化。
根据一些实施例,所述待调试指令被一个指令处理装置执行,所述性能指标包括单位时间内所述指令处理装置从外部存储器读取到的第一数据量和单位时间内所述指令处理装置的计算单元计算的第二数据量;所述性能判断模块包括:匹配单元,被配置为判断所述第一数据量与所述第二数据量是否匹配;以及判断单元,被配置为响应于确定所述第一数据量与所述第二数据量匹配,判定所述待调试指令的执行性能达到目标。
根据一些实施例,所述待调试指令被一个指令处理装置执行,所述性能指标包括以下至少一种:所述指令处理装置对外部存储器进行部分写的次数占写外部存储器总次数的第一比例、所述指令处理装置访问内部存储器被阻塞的次数占访问内部存储器总次数的第二比例、指令处理装置中的计算单元的使用次数占计算单元的可用最大次数的第三比例;所述性能判断模块进一步被配置为:根据所述性能指标与预设值的相对大小来判断所述待调试指令的执行性能是否达到目标。
根据一些实施例,所述待调试指令被多个指令处理装置协同执行,所述多个指令处理装置中的每一个指令处理装置执行所述待调试指令中的部分指令,所述执行信息包括所述多个指令处理装置各自执行相应部分指令的时间段信息;所述指标确定模块进一步被配置为:根据所述多个指令处理装置各自的时间段信息,生成所述待调试指令的执行时序图。
根据一些实施例,所述待调试指令被划分为多个指令片段,每个指令片段包括多个指令组,并且相邻的两个指令片段存在一部分相同的指令组,所述待调试指令被所述一个或多个指令处理装置执行多次,每次执行时由相应指令处理装置的性能寄存器组记录一个指令片段的执行时间信息,所述执行时间信息包括相应指令片段所包括的每个指令组的执行时间;所述信息获取模块进一步被配置为:分别获取每次执行所述待调试指令时记录的相应指令片段的执行时间信息;所述指标确定模块包括:偏移量确定单元,被配置为根据相邻的两个指令片段的相同的指令组的执行时间,确定时间偏移量;时间校准单元,被配置为根据所述时间偏移量,对所述多个指令片段中的除第一个指令片段以外的指令片段的执行时间信息进行校准;以及总时间确定单元,被配置为根据校准后的执行时间信息,确定所述待调试指令的总执行时间。
应当理解,图8中所示的装置800的各个模块可以与参考图4描述的方法400中的各个步骤相对应。由此,上面针对方法400描述的操作、特征和优点同样适用于装置800及其包括的模块。为了简洁起见,某些操作、特征和优点在此不再赘述。
虽然上面参考特定模块讨论了特定功能,但是应当注意,本文讨论的各个模块的功能可以分为多个模块,和/或多个模块的至少一些功能可以组合成单个模块。例如,上面描述的指标确定模块820和性能判断模块830在一些实施例中可以组合成单个模块。
还应当理解,本文可以在软件硬件元件或程序模块的一般上下文中描述各种技术。上面关于图8描述的各个模块可以在硬件中或在结合软件和/或固件的硬件中实现。例如,这些模块可以被实现为计算机程序代码/指令,该计算机程序代码/指令被配置为在一个或多个处理器中执行并存储在计算机可读存储介质中。可替换地,这些模块可以被实现为硬件逻辑/电路。例如,在一些实施例中,信息获取模块810、指标确定模块820、性能判断模块830中的一个或多个可以一起被实现在片上系统(SoC)中。SoC可以包括集成电路芯片(其包括处理器(例如,中央处理单元(Central Processing Unit,CPU)、微控制器、微处理器、数字信号处理器(Digital Signal Processor,DSP)等)、存储器、一个或多个通信接口、和/或其他电路中的一个或多个部件),并且可以可选地执行所接收的程序代码和/或包括嵌入式固件以执行功能。
根据本公开的实施例,还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
参考图9,现将描述可以作为本公开的服务器或客户端的电子设备900的结构框图,其是可以应用于本公开的各方面的硬件设备的示例。电子设备旨在表示各种形式的数字电子的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图9所示,设备900包括计算单元901,其可以根据存储在只读存储器(ROM)902中的计算机程序或者从存储单元908加载到随机访问存储器(RAM)903中的计算机程序,来执行各种适当的动作和处理。在RAM 903中,还可存储设备900操作所需的各种程序和数据。计算单元901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
设备900中的多个部件连接至I/O接口905,包括:输入单元906、输出单元907、存储单元908以及通信单元909。输入单元906可以是能向设备900输入信息的任何类型的设备,输入单元906可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入,并且可以包括但不限于鼠标、键盘、触摸屏、轨迹板、轨迹球、操作杆、麦克风和/或遥控器。输出单元907可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。存储单元908可以包括但不限于磁盘、光盘。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙TM设备、1302.11设备、Wi-Fi设备、Wi-Max设备、蜂窝通信设备和/或类似物。
计算单元901可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元901的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元901执行上文所描述的各个方法和处理,例如上文描述的方法400。例如,在一些实施例中,方法400可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元908。在一些实施例中,计算机程序的部分或者全部可以经由ROM 902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序加载到RAM 903并由计算单元901执行时,可以执行上文描述的方法400的一个或多个步骤。备选地,在其他实施例中,计算单元901可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法400。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行、也可以顺序地或以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
虽然已经参照附图描述了本公开的实施例或示例,但应理解,上述的方法、系统和设备仅仅是示例性的实施例或示例,本公开的范围并不由这些实施例或示例限制,而是仅由授权后的权利要求书及其等同范围来限定。实施例或示例中的各种要素可以被省略或者可由其等同要素替代。此外,可以通过不同于本公开中描述的次序来执行各步骤。进一步地,可以以各种方式组合实施例或示例中的各种要素。重要的是随着技术的演进,在此描述的很多要素可以由本公开之后出现的等同要素进行替换。