CN117112033B - 随机指令生成方法、装置、设备以及存储介质 - Google Patents

随机指令生成方法、装置、设备以及存储介质 Download PDF

Info

Publication number
CN117112033B
CN117112033B CN202311091016.3A CN202311091016A CN117112033B CN 117112033 B CN117112033 B CN 117112033B CN 202311091016 A CN202311091016 A CN 202311091016A CN 117112033 B CN117112033 B CN 117112033B
Authority
CN
China
Prior art keywords
instruction
jump
segments
target
blocks
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311091016.3A
Other languages
English (en)
Other versions
CN117112033A (zh
Inventor
赵玉杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Haiguang Information Technology Chengdu Co ltd
Original Assignee
Haiguang Information Technology Chengdu Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Haiguang Information Technology Chengdu Co ltd filed Critical Haiguang Information Technology Chengdu Co ltd
Priority to CN202311091016.3A priority Critical patent/CN117112033B/zh
Publication of CN117112033A publication Critical patent/CN117112033A/zh
Application granted granted Critical
Publication of CN117112033B publication Critical patent/CN117112033B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

本公开提供一种用于验证分支预测模块的随机指令生成方法、装置、设备以及存储介质。该方法包括:获取多个目标指令段;基于多个目标指令段,获取多个目标指令段中每个的多个跳转指令块,每个跳转指令块包括跳转指令;基于目标指令段的跳转指令块,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,获取用于验证分支预测模块的第一随机指令。本公开将目标指令段设为多个跳转指令块,还采用多段堆叠式程序块模式来实现随机指令的排布,能全面地完成对跳转指令的验证,使用有限的仿真资源尽快完成验证工作,从而很好地满足对分支预测模块验证的需求。

Description

随机指令生成方法、装置、设备以及存储介质
技术领域
本公开的实施例涉及一种用于验证分支预测模块的随机指令生成方法、装置、设备以及存储介质。
背景技术
现代处理器一般采用流水线技术并行处理指令,以加速指令处理效率;在处理分支指令时,为避免等待分支指令执行结果而决定分支方向的情况,大多数现代处理器均采用分支预测(Branch Prediction)技术。
例如,对于中央处理器(CPU)而言,分支预测模块是其至关重要的一部分,分支预测模块对中央处理器的性能起到了非常重要的作用。由此,在中央处理器的硅前验证中,对分支预测模块的验证也是至关重要。
发明内容
本公开至少一实施例提供了一种用于验证分支预测模块的随机指令生成方法,包括:获取多个目标指令段;基于所述多个目标指令段,获取所述多个目标指令段中每个的多个跳转指令块,其中,每个所述跳转指令块包括跳转指令;基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,获取用于验证所述分支预测模块的第一随机指令。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述获取多个目标指令段,包括:获取地址相耦合的所述多个目标指令段,其中,所述地址相耦合是多个耦合地址对应的索引地址相同且对应的原始地址不同。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述获取地址相耦合的所述多个目标指令段,包括:获取用于所述分支预测模块的索引查找表;基于所述索引查找表,获取索引地址相同的所述多个耦合地址;将所述多个耦合地址分别作为多个目标指令段的段基地址,以获取所述地址相耦合的所述多个目标指令段。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述获取多个目标指令段,包括:对于所述多个目标指令段中的每个当前目标指令段,所述当前目标指令段被配置为:所述当前目标指令段的多个跳转指令块中的首位的跳转指令块具有对应的段基地址,并且所述当前目标指令段由所述当前目标指令段的多个跳转指令块中的每个跳转指令块中的M个第二随机指令和所述跳转指令依次进行填充以确定所述当前目标指令段的偏移地址,其中,M为大于或等于0的整数。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,包括:基于所述目标指令段的跳转指令块的指令地址、跳转目标、跳转条件、跳转方向中的至少一种,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,包括:基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述多个目标指令段为N个目标指令段,N为大于1的整数;所述控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,包括:控制所述N个目标指令段中每个的多个跳转指令块中待跳的跳转指令块从对应的N个跳转目标中进行随机选择,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,其中,所述待跳的跳转指令块的N个跳转目标分别对应所述N个目标指令段中每个目标指令段的其中一个跳转指令块。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,包括:所述多个目标指令段被配置为按照所述多个目标指令段的耦合地址依序布置以及所述目标指令段的多个跳转指令块被配置为按照所述目标指令段的偏移地址依序布置,由此获取具有预设序列的所述多个目标指令段,使具有所述预设序列的所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次并且使所述预设序列中的首位跳转指令块可跳转至所述预设序列中的末位跳转指令块,其中,所述首位跳转指令块是指令段排序为首并且段内指令块排序为首的跳转指令块,所述末位跳转指令块是指令段排序为末并且段内指令块排序为末的跳转指令块。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述控制所述N个目标指令段中每个的多个跳转指令块中待跳的跳转指令块从对应的N个跳转目标中进行随机选择,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,包括:响应于所述待跳的跳转指令块选择的跳转目标为所述待跳的跳转指令块所属的目标指令段中的一个跳转指令块,所述待跳的跳转指令块为不发生跳转,并且所述待跳的跳转指令块选择的跳转目标是当前次序下的所述多个目标指令段中对应于所述待跳的跳转指令块的后一位的跳转指令块。
例如,在本公开至少一实施例提供的一种随机指令生成方法中,所述使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,还包括:对具有所述预设序列的所述多个目标指令段中除了所述首位跳转指令块和所述所述末位跳转指令块之外的剩下的多个跳转指令块进行位置的任意打乱操作,使打乱后的所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次并且使所述首位跳转指令块可跳转至所述末位跳转指令块。
本公开至少一实施例提供了一种用于验证分支预测模块的随机指令生成装置,包括:指令段获取模块,配置为获取多个目标指令段;跳转指令块获取模块,配置为基于所述多个目标指令段,获取所述多个目标指令段中每个的多个跳转指令块,其中,每个所述跳转指令块包括跳转指令;跳转控制模块,配置为基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中每个跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,获取用于验证所述分支预测模块的第一随机指令。
本公开至少一实施例提供了一种电子设备,包括:处理器和存储器,其中,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时,实现如上文任一项所述的随机指令生成方法。
本公开至少一实施例提供了一种计算机可读存储介质,其中,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现如上述任一示例中所述的随机指令生成方法。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本公开一些实施例提出的一种用于验证分支预测模块的随机指令生成方法的流程图;
图2为本公开一些实施例提供的一种两个目标指令段的构成示意图;
图3为本公开一些实施例提供的获取多个目标指令段的一种执行过程的流程图;
图4为本公开一些实施例提供的一种两段式堆叠模式的示意图;
图5是图4中经过位置的任意打乱操作之后的两段式堆叠模式的示意图;
图6为本公开一些实施例提供的一种三段段式堆叠模式的示意图;
图7是图6中经过位置的任意打乱操作之后的三段式堆叠模式的示意图;
图8为本公开一些实施例提供的一种用于验证分支预测模块的随机指令生成装置的框图;
图9为本公开至少一实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另有定义,本公开实施例使用的所有术语(包括技术和科学术语)具有与本公开所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非本公开实施例明确地这样定义。
本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。本公开实施例中使用了流程图用来说明根据本公开实施例的方法的步骤。应当理解的是,前面或后面的步骤不一定按照顺序来精确的进行。相反,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步。
对于处理器(如中央处理器)整体验证而言,一般选用随机指令验证的方法,而对于分支预测模块验证而言,还需覆盖到大量不同种类的跳转指令。
本公开的发明人发现,一般的随机指令生成器都只是通过顺序摆放各个指令类型来实现,但是这种方法对于分支预测模块来说略显不足,因为本公开的发明人还发现分支预测只对跳转指令类型、跳转方向、跳转目的等因素敏感,并且需要一定量的循环次数来训练预测模块,所以目前普通的随机指令生成器很难满足分支预测模块的验证需求。
本公开至少一实施例提供了一种用于验证分支预测模块的随机指令生成方法,该方法包括:获取多个目标指令段;基于多个目标指令段,获取多个目标指令段中每个的多个跳转指令块,其中,每个跳转指令块包括跳转指令;基于目标指令段的跳转指令块,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,由此获取用于验证分支预测模块的第一随机指令。
本公开上述实施例的随机指令生成方法通过将每个目标指令段设计为多个跳转指令块的形式,还采用多段堆叠式程序块模式来实现随机指令的排布,这样利于高效地产生所需的随机指令,能够较为全面地完成对跳转指令的验证,可以使用有限的仿真资源尽快完成验证工作,从而可以很好地满足对分支预测模块验证的需求。
下面结合附图对本公开的实施例及其示例进行详细说明。
图1为本公开一些实施例提出的一种用于验证分支预测模块的随机指令生成方法的流程图。
例如,如图1所示,该随机指令生成方法至少包括步骤S1~步骤S3。
步骤S1、获取多个目标指令段。
步骤S2、基于多个目标指令段,获取多个目标指令段中每个的多个跳转指令块,其中,每个跳转指令块包括跳转指令。
步骤S3、基于目标指令段的跳转指令块,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,获取用于验证分支预测模块的第一随机指令。
本公开至少一实施例的用于验证分支预测模块的随机指令生成方法通过将目标指令段设计为多个跳转指令块的形式,还采用多段堆叠模式来实现随机指令的排布,这样地约束随机指令发生器以进行完备地验证分支预测模块,能够很好地满足对分支预测模块验证的需求,工作量也大大减少,并且在不同产品上具有很强的移植性和可扩展性。
例如,在步骤S1中,多个目标指令段可以记为N个目标指令段,N为大于1的整数。需要说明的是,本公开的实施例的多个目标指令段不仅可以是两个目标指令段(如下图2、图4以及图5所示),也可以是三个以上目标指令段(如下图6-图7所示),为了本文的简洁、清楚的描述,下文主要是以多个目标指令段为两个目标指令段或三个目标指令段为例进行详细的说明,但是本公开的实施例对目标指令段的数目不作限制,其可以视实际情况而定,此处不再赘述。
例如,在步骤S2中,每个跳转指令块(Block)是本公开的实施例中多段式堆叠结构中的基本的指令单元。这样,相较于目前一些技术方案采用在很长指令段代码中只有一个跳转指令的传统设计,本公开的实施例能够基于由跳转指令块形成的多段式堆叠结构的巧妙设计上提供更多的约束,生成相对复杂的汇编代码,可以很好地满足对分支预测模块的验证需求。
例如,在步骤S3中,多个目标指令段的跳转指令块采用多段式堆叠模式来排布,由此实现针对各个跳转指令做随机排布,这样非常方便地遍历各种跳转指令类型、跳转方向和跳转目标等方面,从而较好地满足对分支预测模块的验证需求。例如,步骤S3中的控制每个目标指令段的多个跳转指令块中跳转指令块的跳转是指控制各个目标指令段中的各个待跳的跳转指令块的跳转,详细可见下文。
例如,在步骤S3中,对于多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,包括以下:N个目标指令段中的其中一个目标指令段的跳转指令块在被执行的过程中可以在该当前目标指令段内进行跳转,也可以跳转至其他的任意一个或多个目标指令段中的跳转指令块,从而对应形成N个目标指令段中的每两个目标指令段之间的跳转关联关系,由此多个目标指令段形成N段式堆叠结构。
示例地,为了方便本文的描述,将N段式堆叠结构中的每个目标指令段视为对应当前目标指令段的层结构(也可称之为堆叠层),则N段式堆叠结构具有N层的层结构。需要说明的是,这些技术术语的描述并不能理解为是对本公开的保护范围的限制,其仅仅是为了本文的表述方便和清楚。
例如,在步骤S3中,获取的用于验证分支预测模块的第一随机指令可以是指基于已有随机指令生成器并在给与其对应的约束(如下文所述的采用多段式堆叠模式来实现随机指令的排布、保证执行方向唯一、打乱操作等)而相应生成的随机指令的汇编程序,该生成的汇编程序会作为一种验证激励输入给用于验证分支预测模块的验证平台,以此来验证分支预测模块。需要说明的是,由于将生成的验证激励用于在验证分支预测模块的验证平台之上后并以此来对分支预测模块进行验证的具体验证过程并非是本公开的实施例要描述的重点,此处不再赘述。
图2为本公开一些实施例提供的一种两个目标指令段的构成示意图。
本公开一些实施例先以获取的多个目标指令段是两个目标指令段为例进行详细说明,例如,两个目标指令段分别为图2所示的目标指令段Seg0和目标指令段Seg1。
示例地,目标指令段Seg0具有多个跳转指令块,例如图2所示的跳转指令块101、跳转指令块102和跳转指令块103等,目标指令段Seg0的每个跳转指令块都包括一个跳转指令,比如图2所示的跳转指令块101具有一个跳转指令1、跳转指令块102具有一个跳转指令2以及跳转指令块103具有一个跳转指令3等。
例如,目标指令段Seg0的首位的跳转指令块101具有对应的段基地址(如图2所示的段0基地址)。目标指令段Seg0的首位的跳转指令块101还可以包括零个(未图示)或一个或多个一般指令(例如一种不是跳转指令的其他随机指令,即对应上文所述的第二随机指令),比如图2所示的跳转指令块101中的跳转指令1之前还包括随机指令1和随机指令2。
例如,如图2所示,目标指令段Seg0的跳转指令块102和103中的跳转指令之前也分别包括零个(未图示)或一个或多个一般指令(例如一种不是跳转指令的其他随机指令,即对应上文所述的第二随机指令),比如图2中的的跳转指令块102或103中的随机指令1与随机指令2。如此可知,目标指令段Seg0对应的指令地址主要包括两部分,一部分是该目标指令段的基地址,另一部分是在基地址下的偏移,而且偏移地址由随机产生多个的第二随机指令和第二随机指令之后的跳转指令一起进行确定,即本公开的实施例在指定的跳转指令之前需要随机生成多个第二随机指令来进行填充,从而形成目标指令段Seg0。
示例地,目标指令段Seg1具有多个跳转指令块,例如图2所示的跳转指令块201、跳转指令块202和跳转指令块203等,目标指令段Seg1的每个跳转指令块都包括一个跳转指令,比如图2所示的跳转指令块201具有一个跳转指令1、跳转指令块202具有一个跳转指令2以及跳转指令块203具有一个跳转指令3等。
例如,目标指令段Seg1的首位的跳转指令块201具有对应的段基地址(如图2所示的段1基地址)。目标指令段Seg1的首位的跳转指令块201还可以包括零个(未图示)或一个或多个一般指令(例如一种不是跳转指令的其他随机指令,即对应下文所述的第二随机指令),比如图2所示的跳转指令块201中的跳转指令1之前还包括随机指令1和随机指令2。
例如,如图2所示,目标指令段Seg1的跳转指令块202和203中的跳转指令之前也分别包括零个(未图示)或一个或多个一般指令(例如一种不是跳转指令的其他随机指令,即对应下文所述的第二随机指令),比如图2中的的跳转指令块202或203中的随机指令1与随机指令2。如此可知,目标指令段Seg1对应的指令地址主要包括两部分,一部分是该目标指令段的基地址,另一部分是在基地址下的偏移,而且偏移地址由随机产生多个的第二随机指令和第二随机指令之后的跳转指令一起进行确定,即本公开的实施例在指定的跳转指令之前需要随机生成多个第二随机指令来进行填充,从而形成目标指令段Seg1。
需要说明的是,上述仅仅为示例性的,其还可以是其他结构形式的目标指令段,本公开的实施例对此不作限制,这里不做穷举和赘述。
例如,对于步骤S1,在一些示例中,获取多个目标指令段包括以下过程或步骤S11:获取地址相耦合的多个目标指令段,其中,地址相耦合是多个耦合地址对应的索引地址(例如哈希索引地址)相同且对应的原始地址不同。
本公开的实施例在采用多段式堆叠模式来实现随机指令的排布的同时还可通过目标指令段地址的相关性实现多个目标指令段的地址耦合,从而能够覆盖更多不同的测试场景。
图3为本公开一些实施例提供的获取多个目标指令段的一种执行过程的流程图。例如,如图3所示,步骤S11中的获取地址相耦合的多个目标指令段的一个示例至少包括步骤S111~步骤S113。
步骤S111、获取用于分支预测模块的索引查找表。
步骤S112、基于索引查找表,获取索引地址相同的多个耦合地址。
步骤S113、将多个耦合地址分别作为多个目标指令段的段基地址,以获取地址相耦合的多个目标指令段。
本公开的实施例采用针对分支预测模块的结构来设计地址耦合的约束,能够覆盖到更多需要验证的测试场景。
例如,对于步骤S112,本公开上述实施例适用于分支预测模块采用哈希地址或者全局历史寄存器(GHR,Global History Register)来作为索引查表的情况。例如,针对将哈希之后的指令地址作为索引地址的情况,本公开的实施例中的目标指令段Seg0和目标指令段Seg1地址相耦合可以是指哈希索引相同的两个耦合地址(如0x1_0000_0000和0x1_0010_0100)分别作为目标指令段Seg0和目标指令段Seg1的段基地址。如此,本公开的实施例对分支预测模块的验证可以覆盖到哈希后的地址相同但原始地址不同的多个目标指令段存在地址耦合的测试场景,从而可以更好地满足对分支预测模块验证的需求。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
在一些示例中,对于多个目标指令段中的每个当前目标指令段,每个当前目标指令段被配置为:当前目标指令段的多个跳转指令块中的首位的跳转指令块具有对应的段基地址,并且当前目标指令段由当前目标指令段的多个跳转指令块中的每个跳转指令块中的M个第二随机指令和跳转指令依次进行填充以确定当前目标指令段的偏移地址,其中,M为大于或等于0的整数。
本公开的实施例通过对目标指令段以及跳转指令块的指令地址进行约束设计,能够生成覆盖足够多场景的跳转指令,可拓展性好。本公开的实施例通过段基地址来配置多段指令代码地址范围,可以产生更多的地址耦合,可以很好地满足对分支预测模块验证的需求。
例如,对于步骤S3,在一些示例中,基于目标指令段的跳转指令块,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,可以包括以下过程或步骤:基于目标指令段的跳转指令块的指令地址、跳转目标、跳转条件、跳转方向中的至少一种,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转。
示例地,指令地址可以包括上述的段基地址和偏移地址。跳转目标是指目的指令的地址,在本公开一些实施例中,跳转目标的生成需要遵循一定的规则,否则容易出现死循环,可见下文详细描述。跳转条件是指系统状态寄存器的值。跳转方向包括两种,一种是向前跳转以及另一种是向后跳转。向前跳转是指跳转目标位于当前的跳转指令块之前,向后跳转是指跳转目标位于当前的跳转指令块之后。
本公开上述实施例针对分支预测模块验证,基于已有随机指令生成器并在跳转指令块的指令地址、跳转目标、跳转条件或跳转方向等这些与跳转指令相关的影响因素之上设计如何约束随机指令生成器来完备验证分支预测模块,使得本公开的实施例可以解决仅靠随机指令生成器进行验证而难以满足对跳转指令验证的要求的技术难题,能够较全面地完成对跳转指令的验证以及较全面的覆盖所有分支预测模块的多种预测类型和预测结果。需要说明的是,本公开的实施例对分支预测模块验证,还不仅限于上述列举的几个与跳转指令相关的影响因素的约束,还可针对其他例如指令类型(例如直接跳转、条件跳转、间接跳转等)等因素来对目标指令段以及跳转指令块进行约束设计,此处不再穷举和赘述。
图4为本公开一些实施例提供的一种两段式堆叠模式的示意图,图4是多个目标指令段是两个目标指令段的示例,图4中的箭头方向表示跳转指令块可选择的跳转方向。图5是图4中经过位置的任意打乱操作之后的两段式堆叠模式的示意图,图5示例可见下文关于跳转指令块的位置的打乱操作的描述。
例如,如图4所示,目标指令段Seg0和目标指令段Seg1这两个目标指令段形成两段堆叠式程序块模式。在图4的示例中,目标指令段Seg0在图纸的左右方向上,跳转指令块从左至右的标号依次为0-0、0-1、0-2、0-3……0-i……0-N-1、0-N(0≤i≤N)。在图4的示例中,目标指令段Seg1在图纸的左右方向上,跳转指令块从左至右的标号依次为1-0、1-1、1-2、1-3……1-j……1-N-1、1-N(0≤j≤N)。需要说明的是,这些技术术语的描述并不能理解为是对本公开的保护范围的限制,其仅仅是为了本文的表述方便和清楚,本公开的实施例还可采用其他的跳转指令块的标号方式,只要能够表明各个目标指令段的多个跳转指令快的摆放顺序即可,此处不再穷举和赘述。
例如,如图4所示,目标指令段Seg0和目标指令段Seg1在被执行的过程中具有彼此跨指令段的跳转,比如,目标指令段Seg0的跳转指令块0-0可以选择跳转至目标指令段Seg1的跳转指令块1-0,目标指令段Seg1的跳转指令块1-0可以选择跳转至目标指令段Seg0的跳转指令块0-1。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
例如,如图4所示,目标指令段Seg0的跳转指令块还具有在本目标指令段内的跳转,比如,目标指令段Seg0的跳转指令块0-1也可以选择跳转至目标指令段Seg0的跳转指令块0-2;目标指令段Seg1的跳转指令块也还具有在本目标指令段内的跳转,比如,目标指令段Seg1的跳转指令块1-2也可以选择跳转至目标指令段Seg1的跳转指令块1-3。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
图6为本公开一些实施例提供的一种三段段式堆叠模式的示意图,图6是多个目标指令段是三个目标指令段的示例,图6中的箭头方向表示跳转指令块可选择的跳转方向。图7是图6中经过位置的任意打乱操作之后的三段式堆叠模式的示意图,图7示例可见下文关于跳转指令块的位置的打乱操作的描述。需要说明的是,图6示例中每个目标指令段的跳转指令块的标号方式也可参照上文图4的示例,这里不再赘述。
例如,如图6所示,目标指令段Seg0、目标指令段Seg1和目标指令段Seg2这三个目标指令段形成三段堆叠式程序块模式,目标指令段Seg0、目标指令段Seg1和目标指令段Seg2在被执行的过程中具有彼此跨指令段的跳转,比如,目标指令段Seg0的跳转指令块0-0可以选择跳转至目标指令段Seg1的跳转指令块1-0和/或目标指令段Seg0的跳转指令块0-1可以选择跳转至目标指令段Seg2的跳转指令块2-1;目标指令段Seg1的跳转指令块1-0可以选择跳转至目标指令段Seg0的跳转指令块0-1和/或目标指令段Seg1的跳转指令块1-1可以选择跳转至目标指令段Seg2的跳转指令块2-2;目标指令段Seg2的跳转指令块2-2可以选择跳转至目标指令段Seg0的跳转指令块0-3和/或目标指令段Seg2的跳转指令块1-3可以选择跳转至目标指令段1的跳转指令块2-4。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
需要说明的是,为了附图的清楚呈现,本公开一些实施例将图6和图7中的目标指令段Seg0直接跨至目标指令段Seg2的跳转采用斜纹填充的箭头进行示意,这并不会对本公开的实施例的保护范围造成影响,并且图6中被斜纹填充的两小段箭头标记应视为一个跳转(如跳转指令块0-0至跳转指令块2-0,或跳转指令块0-1至跳转指令块2-1,或跳转指令块0-2至跳转指令块2-2等),这两小段为图纸绘制呈现的效果,并不代表着例如从0-0至1-0以及1-0至2-0的两次跳转。
例如,如图6所示,目标指令段Seg0的跳转指令块还具有在本目标指令段内的跳转,比如,目标指令段Seg0的跳转指令块0-4也可以选择跳转至目标指令段Seg0的跳转指令块0-5;目标指令段Seg1的跳转指令块也还具有在本目标指令段内的跳转,比如,目标指令段Seg1的跳转指令块1-6也可以选择跳转至目标指令段Seg1的跳转指令块1-7;目标指令段Seg2的跳转指令块也还具有在本目标指令段内的跳转,比如,目标指令段Seg2的跳转指令块2-8也可以选择跳转至目标指令段Seg1的跳转指令块2-9。当然,此仅仅为示例性的,并不为本公开的实施例的限制。
在一些示例中,多个目标指令段中的每个目标指令段的多个跳转指令块的数目可以均相同(如图4-图7所示)。需要说明的是,本公开的实施例对此不作限制,多个目标指令段中的每个目标指令段的多个跳转指令块的数目也可以完全不相同或不完全相同,本公开的实施例对此不做穷举和赘述。
例如,在本公开一些实施例中,目标指令段中的多个跳转指令块具有初始的位置的顺序,例如一个目标指令段的初始的位置的顺序是按照跳转指令块依序生成的次序以及整个多段式堆叠结构的初始的位置的顺序即是按照所有目标指令段的所有跳转指令块依序生成的次序。
例如,在图4示例中,目标指令段Seg0的跳转指令块0-0为首位跳转指令块(即起始块),目标指令段Seg0的跳转指令块1-N是这两段式堆叠结构中的末位跳转指令块(即终止块)。示例地,在生成一个跳转指令块的过程中,指定当前这个跳转指令块的跳转方向和跳转目标(即提供对跳转指令块的约束去生成指令块),即跳转方向和跳转目标可视为一个生成的跳转指令块的一部分。换句话说,只有至少给与跳转指令块的跳转方向和跳转目标之后,它才能形成一个完整的指令块。因此,本公开的实施例在生成所需的多个跳转指令块之后可以形成一个初步的跳转指令块堆叠的结果,从而具有初始的位置的顺序。
在本公开一些实施例中,对于一些完整的跳转指令,不仅限于上文所述的确定跳转指令块的跳转方向和跳转目标,而且还需要例如跳转条件和/或间接跳转寄存器(间接跳转寄存器用于间接跳转指令存放跳转目标的寄存器)等指令相关信息,但是本公开的实施例对此不作限制,其可以根据实际的跳转指令块进行自由调整,由于此不为本公开的实施例需要描述的重点,这里不再赘述。
本公开的一些实施例中的多个目标指令段被配置为按照多个目标指令段的耦合地址依序布置(例如图4示例中的目标指令段Seg0与目标指令段Seg1之间具有一定的次序且该次序也是对应于目标指令段的耦合地址的次序,比如目标指令段Seg0是两段式堆叠结构的第一层且目标指令段Seg1是两段式堆叠结构的第二层)以及目标指令段的多个跳转指令块被配置为按照目标指令段的偏移地址依序布置(例如目标指令段Seg0从左至右由跳转指令块0-0至跳转指令块0-N依序布置且目标指令段Seg0的偏移地址由填充的所有指令块的指令来确定),由此获取具有预设序列的多个目标指令段,即该具有预设序列的多个目标指令段视为初始时的多个目标指令段。如此,本公开的实施例能够实现程序块单一指令路径(即可以保证执行方向唯一)来防止程序死循环,因此,本公开的实施例始终能够从首位跳转指令块顺利跳转至末位跳转指令块而不发生死循环。例如,本公开的实施例中所说的实现程序块单一指令路径可表示多个目标指令段始终能够从跳转指令块0-0执行至跳转指令块1-N,或者从跳转指令块0-0执行至跳转指令块2-N。
例如,对于步骤S3,在一些示例中,基于目标指令段的跳转指令块,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,可以包括以下过程或步骤S31:基于目标指令段的跳转指令块,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次。
本公开上述实施例在采用多段式堆叠模式来实现随机指令的排布的同时还可通过约束目标指令段的跳转指令块的执行路径,以防止应用程序出现死循环,保证了应用程序的合理性。
例如,对于步骤S31,在一些示例中,多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次可以是多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行一次的情况。例如,在图4的示例中,若N为5,两个目标指令段的跳转指令块的执行路径可以是(0-0)-(1-0)-(0-1)-(1-1)-(0-2)-(1-2)-(0-3)-(1-3)-(0-4)-(1-4)-(0-5)-(1-5),即目标指令段Seg0中的每个跳转指令块和目标指令段Seg1中的每个跳转指令块均被执行跳转过一次。为了便于下文描述,该执行路径可记为路径A。当然,此仅仅为示例性的,本公开的实施例在此不做穷举和赘述。
需要说明的是,本公开的实施例并不仅限于此,只要多段式堆叠结构未发生程序死循环(即未发生跳转指令块往回跳的情况)即可,例如本公开的实施例还可以包括多个目标指令段中一些跳转指令块未被执行(即一些跳转指令块未被跳转经过)但是程序执行方向唯一的情况。例如,在图4的示例中,若N为5,两个目标指令段的跳转指令块的执行路径可以是(0-0)-(0-1)-(1-1)-(1-2)-(0-3)-(1-3)-(0-4)-(1-4)-(0-5)-(1-5),即目标指令段Seg0中的跳转指令块0-2和目标指令段Seg1中的跳转指令块1-0都未被执行跳转过但是者两段式堆叠结构依然从首位跳转指令块0-0顺利跳至末位跳转指令块1-5。为了便于下文描述,该执行路径可记为路径B。当然,此仅仅为示例性的,例如图4或图6中一些跳转指令块的各个箭头的方向形成的路径,即为多段式堆叠结构的跳转指令的执行方向和顺序,其可以任意组合形成各种执行路径,只要能够实现从首位跳转指令块顺利跳至末位跳转指令块即可,本公开的实施例在此不做穷举和赘述。
例如,对于步骤S31,在一些示例中,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,可以包括以下过程或步骤S31a:控制N个目标指令段中每个的多个跳转指令块中待跳的跳转指令块(例是多段式堆叠结构中除去末位跳转指令块之外的其他任意跳转指令块)从对应的N个跳转目标中进行随机选择,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次。例如,待跳的跳转指令块的N个跳转目标分别对应N个目标指令段中每个目标指令段的其中一个跳转指令块(如一个跳转指令块或两个跳转指令块)。
本公开的实施例不仅可以实现程序块单一指令路径来防止程序死循环,还能兼顾跳转具有多个跳转目标的要求以及跳转目标的选择可以是随机的,无论是跳转指令块发生跳转还是不发生跳转的情况都具有能实现程序执行方向唯一,因此,本公开的实施例能够实现更多的随机性,更好地满足对分支预测模块验证的需求。
在一些示例中,对于多段式堆叠结构中的末位跳转指令块作为待跳的跳转指令块时,该末位跳转指令块可以具有N-1或者具有N-2个跳转目标等。当然,此仅仅为示例性的,并不为本公开的实施例的限制。需要说明的是,本公开的实施例没有约束末位跳转指令块的跳转与否,这取决于实际应用场景,这对本公开的实施例的保护范围不造成影响。由于本公开一些实施例主要讨论从多段式堆叠结构中的首位跳转指令块跳转至末位跳转指令块,而从末位跳转指令块是否再继续进行跳转并非是本公开的实施例描述的重点,这里不再赘述。另外,对于本公开一些实施例中的控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,这里所说的跳转指令块的跳转是指各个待跳的跳转指令块的跳转,例如其主要是针对多段式堆叠结构中除去末位跳转指令块之外的其他任意跳转指令块的跳转,从而实现从首位跳转指令块顺利跳至末位跳转指令块,当然,本公开的实施例也可以包括末位跳转指令块作为一个待跳的跳转指令块的情况(本文未对末位跳转指令块的继续跳转的具体情况做详细描述),比如前一跳转指令块跳至到末位跳转指令块即可视为末位跳转指令块涵盖在上述的被控制的跳转指令块,因为末位跳转指令块中也包括一个跳转指令,其可以视实际情况而定,本公开的实施例对此不做限制和赘述。
例如,当N=2时,待跳的跳转指令块具有N个跳转目标且这N个跳转目标分别对应N个目标指令段中每个目标指令段的其中一个跳转指令块,即N个目标指令段中每个目标指令段都各自有一个跳转指令块作为该待跳的跳转指令块的其中一个跳转目标。
例如,在图4的示例中,待跳的跳转指令块具有两个跳转目标且该两个跳转目标各自对应目标指令段Seg0中的一个跳转指令块和目标指令段Seg1中的一个跳转指令块。此仅仅为示例性的,并不为本公开的实施例的限制。
例如,当N≥3时,在一些示例中,待跳的跳转指令块具有N个跳转目标且这N个跳转目标分别对应N个目标指令段中每个目标指令段的其中一个跳转指令块,即N个目标指令段中每个目标指令段都各自有一个跳转指令块作为该待跳的跳转指令块的其中一个跳转目标。
例如,在图6的示例中,待跳的跳转指令块具有三个跳转目标且该三个跳转目标各自对应目标指令段Seg0中的一个跳转指令块、目标指令段Seg1中的一个跳转指令块和目标指令段Seg2中的一个跳转指令块。例如,如图6所示,跳转指令块0-0具有三个跳转目标且跳转指令块0-0的三个跳转目标分别是目标指令段Seg0中的一个跳转指令块0-1、目标指令段Seg1中的一个跳转指令块1-0和目标指令段Seg2中的一个跳转指令块2-0(图6中被斜纹填充的两小段箭头标记视为一个跳转,两小段为图纸绘制呈现的效果,并不代表着从0-0至1-0以及1-0至2-0的两次跳转);或者,跳转指令块1-0具有三个跳转目标且跳转指令块1-0的三个跳转目标分别是目标指令段Seg0中的一个跳转指令块0-1、目标指令段Seg1中的一个跳转指令块1-1和目标指令段Seg2中的一个跳转指令块2-1;或者,跳转指令块2-0具有三个跳转目标且跳转指令块2-0的三个跳转目标分别是目标指令段Seg0中的一个跳转指令块0-1、目标指令段Seg1中的一个跳转指令块1-1和目标指令段Seg2中的一个跳转指令块2-1。此仅仅为示例性的,并不为本公开的实施例的限制。
例如,在步骤S31a中,对于控制N个目标指令段中每个的多个跳转指令块中待跳的跳转指令块从对应的N个跳转目标中进行随机选择,示例如下:
例如,在图4的示例中,待跳的跳转指令块0-0可以从两个跳转目标(目标指令段Seg0的跳转指令块0-1和目标指令段Seg1的跳转指令块1-0)中进行随机选择,比如在上述的路径A中跳转指令块0-0选择的跳转目标是目标指令段Seg1的跳转指令块1-0,而在上述的路径B中跳转指令块0-0选择的跳转目标是目标指令段Seg0的跳转指令块0-2;又例如,在图6的示例中,待跳的跳转指令块0-0可以从三个跳转目标(目标指令段Seg0的跳转指令块0-1、目标指令段Seg1的跳转指令块1-0和目标指令段Seg2的跳转指令块2-0)中进行随机选择。此仅仅为示例性的,并不为本公开的实施例的限制。
例如,对于步骤S31,在一些示例中,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,可以包括以下过程或步骤:控制使具有上述预设序列的多个目标指令段(例如上述的初始时的多个目标指令段)中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次并且使预设序列中的首位跳转指令块可跳转至预设序列中的末位跳转指令块。例如,首位跳转指令块是指令段排序为首并且段内指令块排序为首的跳转指令块,示例地,图4或图6所示的跳转指令块0-0是首位跳转指令块,末位跳转指令块是指令段排序为末并且段内指令块排序为末的跳转指令块,示例地,图4所示的跳转指令块1-N或图6所示的跳转指令块2-N是对应示例中的末位跳转指令块。
在一些示例中,初始时具有预设序列的多个目标指令段(如图4或图6所示的初始时的多段式堆叠结构)中的各个跳转指令块,均是段内向后跳转或向下跨段跳转,如此实现程序块单一指令路径来防止程序死循环。
在一些示例中,无论是上述的路径A还是路径B,两段式堆叠结构均能从首位跳转指令块0-0顺利跳至末位跳转指令块1-5,只要能够实现程序块单一指令路径来防止程序死循环均在本公开的实施例的保护范围,至于多个目标指令段的跳转指令块具体的执行路径,本公开的实施例对此不作限制,此处不再赘述。
例如,对于步骤S31a,在一些示例中,控制N个目标指令段中每个的多个跳转指令块中待跳的跳转指令块从对应的N个跳转目标中进行随机选择,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,可以包括以下过程或步骤:响应于待跳的跳转指令块选择的跳转目标为待跳的跳转指令块所属的目标指令段中的一个跳转指令块,待跳的跳转指令块为不发生跳转,并且待跳的跳转指令块选择的跳转目标是当前次序下的多个目标指令段中对应于待跳的跳转指令块的后一位的跳转指令块。
本公开的实施例可以在初始状态时使待跳的跳转指令块在多个跳转目标中进行选择并且在不发生跳转时选择当前所属的目标指令段中的一个跳转目标,实现保护多个目标指令段的路径按照设计的顺序执行的效果,保证执行方向唯一,避免程序死循环的问题。
例如,对于步骤S31,在一些示例中,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,还可以包括以下过程或步骤S31b:对具有预设序列的多个目标指令段中除了首位跳转指令块和末位跳转指令块之外的剩下的多个跳转指令块进行位置的任意打乱操作,使打乱后的多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次并且使首位跳转指令块可跳转至末位跳转指令块。
本公开的实施例通过随机打乱除了首位跳转指令块和末位跳转指令块之外的跳转指令块的位置信息来实现每一个跳转方向的随机性,实现了跳转指令块可以随机向前跳和随机向后跳,覆盖到更多的测试场景,并且还能够保证执行方向唯一来防止程序死循环,可以更好地满足对分支预测模块验证的需求。
例如,在本公开一些实施例中,在步骤S31b中,对具有预设序列的多个目标指令段(即初始时的多个目标指令段,例如图4或图6所示的多段式堆叠结构)中除了首位跳转指令块和末位跳转指令块之外的剩下的多个跳转指令块进行位置的任意打乱操作以及打乱后的多个目标指令段,可以表示:除去首位跳转指令块和末位跳转指令块之后的剩下的多个跳转指令块中至少部分的跳转指令块之间的相对位置(例如也可理解为是在基地址之下的跳转指令块的摆放顺序)相较于上述预设序列而发生改变(例如通过在初始时的多段式堆叠结构基础之上进行跳转指令块的摆放顺序的调换)但是多个目标指令段的执行路径还是按照初始时一样的执行方向和顺序(例如图4和图5中的同样的一些跳转指令块形成的执行路径一致),这样不仅可以实现跳转指令块的随机向前跳和随机向后跳,实现更多的随机性,也能防止程序死循环,更好地满足对分支预测模块验证的需求。
例如,在图4或图6的示例中,除去用黑框示意的首位跳转指令块和末位跳转指令块之外,其他用灰框示意的跳转指令块均是可以进行位置打乱操作的指令块对象。此仅仅为示例性的,并不为本公开的实施例的限制。
在一些示例中,初始时的多个目标指令段可以是在第一次程序生成时获取的多段式堆叠结构,而经过打乱操作之后的多个目标指令段可以是基于记录了初始时的多个目标指令段的执行方向和顺序,再在第二次程序生成时获取的多段式堆叠结构,使得可以在调换跳转指令块的摆放位置的情况下依然能保持初始时的执行方向和顺序,实现跳转指令块的随机向前跳和随机向后跳以及保证执行方向唯一来防止程序死循环。
在一些示例中,对于上文所述在多段式堆叠结构之上进行跳转指令块的位置互换来实现打乱操作,本公开的实施例针对同一个目标指令段中的每两个跳转指令块(除去首位跳转指令块和末位跳转指令块)的位置的互换来实现打乱操作。此仅仅为示例性的,并不为本公开的实施例的限制。
在一些示例中,本公开可以通过保护机制来保证打乱后的执行路径,以使得经过打乱操作之后的跳转指令块的执行方向和顺序与打乱之前的初始时的执行方向和顺序一致。例如,本公开一些实施例可以通过增加绝对跳转指令(如在各个跳转指令块中增加一个绝对跳转指令,绝对跳转指令会一直跳)并且将跳转目标选为后一位跳转指令块,以实现通过保护机制来保护打乱后的跳转指令块的路径要按照一定的顺序执行。这样不仅可以实现跳转指令块的随机向前跳和随机向后跳,也能防止程序死循环,更好地满足对分支预测模块验证的需求。当然,此仅仅为示例性的,并不为本公开的实施例的限制,只要能够保证打乱后的执行路径即可,这里不再赘述。
例如,图4所示的初始时的目标指令段Seg0的部分跳转指令块的相对位置是(0-0)~(0-1)~(0-2)~以及目标指令段Seg1的部分跳转指令块的相对位置是(1-0)~(1-1)~(1-2)~,以及图4示例中的这些跳转指令块的跳转路径是路径A,即(0-0)-(1-0)-(0-1)-(1-1)-(0-2)-(1-2)-,然而图5示例中的打乱之后的这些跳转指令块相对应的相对位置变成(0-0)~(0-3)~(0-8)~以及(1-7)~(1-2)~(1-4)~,本公开的实施例让这些经过打乱操作之后的跳转指令块(例如调换对应的跳转指令块的摆放顺序)仍按照之前执行方向和顺序,即打乱后的执行路径依然是(0-0)-(1-0)-(0-1)-(1-1)-(0-2)-(1-2)-。例如,这里的打乱操作可以包括:在多段式堆叠结构之上将跳转指令块1-0与跳转指令块1-7进行位置互换、将跳转指令块0-1与跳转指令块0-3进行位置互换、将跳转指令块1-1与跳转指令块1-2进行位置互换以及将跳转指令块0-2与跳转指令块0-8进行位置互换来实现,但是打乱后的执行路径依然保持与打乱之前的初始状态的执行路径一致。需要说明的是,此仅仅为示例性的,这里仅仅示意出部分打乱的情况,便于本领域技术人员对本公开的实施例的方案的理解,但是这并不为本公开的实施例的限制,这里也不再赘述。还需要说明的是,本公开的实施例对实际中如何具体实现位置的打乱操作的实践方式不作限制,只要能够实现该功能和效果即可,此并非为本公开的实施例要描述的重点,此处不再赘述。
图8为本公开一些实施例提供的一种用于验证分支预测模块的随机指令生成装置的框图。
例如,如图8所示,本公开至少一实施例提供的用于验证分支预测模块的随机指令生成装置100包括指令段获取模块110、跳转指令块获取模块120和跳转控制模块130。指令段获取模块110配置为获取多个目标指令段。跳转指令块获取模块120配置为基于多个目标指令段,获取多个目标指令段中每个的多个跳转指令块,每个跳转指令块包括跳转指令。跳转控制模块130配置为基于目标指令段的跳转指令块,控制多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,由此获取用于验证分支预测模块的第一随机指令。
需要注意的是,在本公开的实施例中,该用于验证分支预测模块的随机指令生成装置可以包括更多或更少的模块,并且各个模块之间的连接关系不受限制,可以根据实际需求而定。各个模块的具体构成方式不受限制。关于用于验证分支预测模块的随机指令生成装置的具体实施方式和技术效果可以参考本公开上述实施例中提供的用于验证分支预测模块的随机指令生成方法的相关内容,这里不再赘述。
以上实施例中的各个模块可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些模块可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的模块。
需要说明的是,尽管以上在描述用于验证分支预测模块的随机指令生成装置时将其划分为用于分别执行相应处理的模块,然而,本领域技术人员清楚的是,各模块执行的处理也可以在验证装置不进行任何具体模块划分或者各模块之间并无明确划界的情况下执行。
图9为本公开至少一实施例提供的一种电子设备的结构示意图。
例如,如图9所示,本公开至少一实施例提供的电子设备200包括处理器210和存储器220,其中,存储器220上存储有计算机程序,计算机程序被处理器210执行时,实现本公开至少一些实施例的随机指令生成方法。
本公开实施例中的电子设备可以包括但不限于诸如笔记本电脑、平板电脑等等的移动终端以及诸如台式计算机等等的固定终端。图9示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
例如,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在该计算机程序被处处理器执行时,执行本公开实施例的随机指令生成方法。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开的实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
需要说明的是,本公开的实施例中,电子设备200的具体功能和技术效果可以参考上文中关于随机指令生成方法的描述,此处不再赘述。。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (13)

1.一种用于验证分支预测模块的随机指令生成方法,包括:
获取多个目标指令段;
基于所述多个目标指令段,获取所述多个目标指令段中每个的多个跳转指令块,其中,每个所述跳转指令块包括跳转指令;
基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,获取用于验证所述分支预测模块的第一随机指令;
其中,所述多个目标指令段为N个目标指令段,N为大于1的整数,所述基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转包括:
所述N个目标指令段中的其中任一个目标指令段的跳转指令块在被执行的过程中,在当前目标指令段内进行跳转和/或跳转至其他的任意一个或多个目标指令段中的跳转指令块。
2.如权利要求1所述的随机指令生成方法,其中,所述获取多个目标指令段,包括:
获取地址相耦合的所述多个目标指令段,其中,所述地址相耦合是多个耦合地址对应的索引地址相同且对应的原始地址不同。
3.如权利要求2所述的随机指令生成方法,其中,所述获取地址相耦合的所述多个目标指令段,包括:
获取用于所述分支预测模块的索引查找表;
基于所述索引查找表,获取索引地址相同的所述多个耦合地址;
将所述多个耦合地址分别作为多个目标指令段的段基地址,以获取所述地址相耦合的所述多个目标指令段。
4.如权利要求1所述的随机指令生成方法,其中,所述获取多个目标指令段,包括:
对于所述多个目标指令段中的每个当前目标指令段,所述当前目标指令段被配置为:所述当前目标指令段的多个跳转指令块中的首位的跳转指令块具有对应的段基地址,并且所述当前目标指令段由所述当前目标指令段的多个跳转指令块中的每个跳转指令块中的M个第二随机指令和所述跳转指令依次进行填充以确定所述当前目标指令段的偏移地址,其中,M为大于或等于0的整数。
5.如权利要求1所述的随机指令生成方法,其中,所述基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,包括:
基于所述目标指令段的跳转指令块的指令地址、跳转目标、跳转条件、跳转方向中的至少一种,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转。
6.如权利要求1所述的随机指令生成方法,其中,所述基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,包括:
基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次。
7.如权利要求6所述的随机指令生成方法,其中,所述多个目标指令段为N个目标指令段,N为大于1的整数;所述控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,包括:
控制所述N个目标指令段中每个的多个跳转指令块中待跳的跳转指令块从对应的N个跳转目标中进行随机选择,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,其中,所述待跳的跳转指令块的N个跳转目标分别对应所述N个目标指令段中每个目标指令段的其中一个跳转指令块。
8.如权利要求7所述的随机指令生成方法,其中,所述使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,包括:
所述多个目标指令段被配置为按照所述多个目标指令段的耦合地址依序布置以及所述目标指令段的多个跳转指令块被配置为按照所述目标指令段的偏移地址依序布置,由此获取具有预设序列的所述多个目标指令段,使具有所述预设序列的所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次并且使所述预设序列中的首位跳转指令块可跳转至所述预设序列中的末位跳转指令块,其中,所述首位跳转指令块是指令段排序为首并且段内指令块排序为首的跳转指令块,所述末位跳转指令块是指令段排序为末并且段内指令块排序为末的跳转指令块。
9.如权利要求8所述的随机指令生成方法,其中,所述控制所述N个目标指令段中每个的多个跳转指令块中待跳的跳转指令块从对应的N个跳转目标中进行随机选择,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,包括:
响应于所述待跳的跳转指令块选择的跳转目标为所述待跳的跳转指令块所属的目标指令段中的一个跳转指令块,所述待跳的跳转指令块为不发生跳转,并且所述待跳的跳转指令块选择的跳转目标是当前次序下的所述多个目标指令段中对应于所述待跳的跳转指令块的后一位的跳转指令块。
10.如权利要求8所述的随机指令生成方法,所述使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转并且使所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次,还包括:
对具有所述预设序列的所述多个目标指令段中除了所述首位跳转指令块和所述所述末位跳转指令块之外的剩下的多个跳转指令块进行位置的任意打乱操作,使打乱后的所述多个目标指令段中每个的多个跳转指令块中的每个跳转指令块均被执行不大于一次并且使所述首位跳转指令块可跳转至所述末位跳转指令块。
11.一种用于验证分支预测模块的随机指令生成装置,包括:
指令段获取模块,配置为获取多个目标指令段;
跳转指令块获取模块,配置为基于所述多个目标指令段,获取所述多个目标指令段中每个的多个跳转指令块,其中,每个所述跳转指令块包括跳转指令;
跳转控制模块,配置为基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转,获取用于验证所述分支预测模块的第一随机指令;
其中,所述多个目标指令段为N个目标指令段,N为大于1的整数,所述基于所述目标指令段的跳转指令块,控制所述多个目标指令段中每个的多个跳转指令块中跳转指令块的跳转,使所述多个目标指令段在被执行的过程中具有至少一次跨指令段的跳转包括:
所述N个目标指令段中的其中任一个目标指令段的跳转指令块在被执行的过程中,在当前目标指令段内进行跳转和/或跳转至其他的任意一个或多个目标指令段中的跳转指令块。
12.一种电子设备,包括:
处理器和存储器,
其中,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时,实现权利要求1至10中任一项所述的随机指令生成方法。
13.一种计算机可读存储介质,其中,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1至10中任一项所述的随机指令生成方法。
CN202311091016.3A 2023-08-28 2023-08-28 随机指令生成方法、装置、设备以及存储介质 Active CN117112033B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311091016.3A CN117112033B (zh) 2023-08-28 2023-08-28 随机指令生成方法、装置、设备以及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311091016.3A CN117112033B (zh) 2023-08-28 2023-08-28 随机指令生成方法、装置、设备以及存储介质

Publications (2)

Publication Number Publication Date
CN117112033A CN117112033A (zh) 2023-11-24
CN117112033B true CN117112033B (zh) 2024-04-12

Family

ID=88801704

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311091016.3A Active CN117112033B (zh) 2023-08-28 2023-08-28 随机指令生成方法、装置、设备以及存储介质

Country Status (1)

Country Link
CN (1) CN117112033B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106325827A (zh) * 2015-06-16 2017-01-11 深圳市中兴微电子技术有限公司 一种随机测试程序生成方法及装置
CN112256328A (zh) * 2020-10-19 2021-01-22 海光信息技术股份有限公司 随机指令的生成方法及装置、存储介质以及电子装置
CN112905242A (zh) * 2021-03-23 2021-06-04 浙江大华技术股份有限公司 分支路径跳转方法、装置、存储介质及电子装置
CN114610387A (zh) * 2022-02-28 2022-06-10 龙芯中科技术股份有限公司 一种分支预测方法、处理器及电子设备
CN115686631A (zh) * 2022-11-07 2023-02-03 合芯科技有限公司 一种基于知识基的随机指令生成方法、装置及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR3047100B1 (fr) * 2016-01-26 2018-03-02 Commissariat A L'energie Atomique Et Aux Energies Alternatives Methode de chiffrement d'un flot d'instructions et execution d'un flot d'instructions ainsi chiffre.
CN109101276B (zh) * 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106325827A (zh) * 2015-06-16 2017-01-11 深圳市中兴微电子技术有限公司 一种随机测试程序生成方法及装置
CN112256328A (zh) * 2020-10-19 2021-01-22 海光信息技术股份有限公司 随机指令的生成方法及装置、存储介质以及电子装置
CN112905242A (zh) * 2021-03-23 2021-06-04 浙江大华技术股份有限公司 分支路径跳转方法、装置、存储介质及电子装置
CN114610387A (zh) * 2022-02-28 2022-06-10 龙芯中科技术股份有限公司 一种分支预测方法、处理器及电子设备
CN115686631A (zh) * 2022-11-07 2023-02-03 合芯科技有限公司 一种基于知识基的随机指令生成方法、装置及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
A Review on Workload Characteristics for Multi Core Embedded Architectures using Machine Learning and Deep Learning Techniques;E. Jayanthi;《IEEE》;全文 *
基于指令模板的通用处理器约束随机指令生成方法;刘 婧;《计算机工程》;第309-313页 *

Also Published As

Publication number Publication date
CN117112033A (zh) 2023-11-24

Similar Documents

Publication Publication Date Title
US10915514B2 (en) Methods and systems for fast set-membership tests using one or more processors that support single instruction multiple data instructions
US9383999B2 (en) Conditional compare instruction
US20130246737A1 (en) SIMD Compare Instruction Using Permute Logic for Distributed Register Files
KR102341523B1 (ko) 동시 멀티 비트 가산기
US8959275B2 (en) Byte selection and steering logic for combined byte shift and byte permute vector unit
US7895417B2 (en) Select-and-insert instruction within data processing systems
EP3832500B1 (en) Device and method for performing vector four-fundamental-rule operation
US20200226228A1 (en) Language and compiler that generate synchronous digital circuits that maintain thread execution order
US20200293317A1 (en) Data processing device data processing method and recording medium
US20220004386A1 (en) Compute array of a processor with mixed-precision numerical linear algebra support
CN117112033B (zh) 随机指令生成方法、装置、设备以及存储介质
US10438682B2 (en) List insertion in test segments with non-naturally aligned data boundaries
US20170206084A1 (en) Programmable linear feedback shift register
CN108228238B (zh) 用于确定具有多个数据元素的数据集合中的最小的两个值的方法及装置
CN112257870B (zh) 机器学习指令的转换方法及装置、板卡、主板、电子设备
US9557977B2 (en) Extending superword level parallelism
US10168386B2 (en) Scan chain latency reduction
US10437716B2 (en) Method and apparatus for coverage analysis of SRT look-up table
KR102628658B1 (ko) 뉴럴 프로세서 및 뉴럴 프로세서의 제어 방법
US11521705B2 (en) Random sequence generation for gene simulations
US11669489B2 (en) Sparse systolic array design
US9164770B2 (en) Automatic control of multiple arithmetic/logic SIMD units
CN113419990B (zh) 在粗粒度可重构阵列上加速非完美嵌套循环的方法及装置
US8805904B2 (en) Method and apparatus for calculating the number of leading zero bits of a binary operation
US8046569B2 (en) Processing element having dual control stores to minimize branch latency

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant