CN117785333A - 一种程序执行方法、装置及设备 - Google Patents
一种程序执行方法、装置及设备 Download PDFInfo
- Publication number
- CN117785333A CN117785333A CN202211146228.2A CN202211146228A CN117785333A CN 117785333 A CN117785333 A CN 117785333A CN 202211146228 A CN202211146228 A CN 202211146228A CN 117785333 A CN117785333 A CN 117785333A
- Authority
- CN
- China
- Prior art keywords
- instruction
- segment
- target
- dependency
- control domain
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 92
- 239000012634 fragment Substances 0.000 claims description 165
- 230000008859 change Effects 0.000 claims description 95
- 239000013643 reference control Substances 0.000 claims description 31
- 238000004458 analytical method Methods 0.000 claims description 28
- 238000012545 processing Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 description 43
- 238000010586 diagram Methods 0.000 description 22
- 102100029469 WD repeat and HMG-box DNA-binding protein 1 Human genes 0.000 description 12
- 101710097421 WD repeat and HMG-box DNA-binding protein 1 Proteins 0.000 description 12
- 230000006870 function Effects 0.000 description 10
- 230000001419 dependent effect Effects 0.000 description 8
- 230000011218 segmentation Effects 0.000 description 8
- 101001122448 Rattus norvegicus Nociceptin receptor Proteins 0.000 description 5
- 238000012216 screening Methods 0.000 description 5
- 238000007726 management method Methods 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 238000000638 solvent extraction Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种程序执行方法、装置及设备,本申请中对可执行程序文件中的指令执行路径进行分支预测,获取并执行目标指令执行路径;目标指令执行路径中包含多个指令分段;在分支预测出现错误的情况下,确定目标指令执行路径中分支预测错误的目标指令分段;从目标指令执行路径中确定候选指令分段;候选指令分段为目标指令执行路径中与目标指令分段存在依赖关系的指令分段。在分支预测出现错误的情况下,释放对目标指令分段存在依赖关系的候选指令分段,目标执行路径中除候选指令分段之外的其它指令分段可以保留下来,能够减少在分支预测错误回滚后重新执行的指令数目,提高程序执行效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序执行方法、装置及设备。
背景技术
目前为了提升处理器性能,处理器采用并行方式进行指令处理,从而提高处理器单位时间处理的指令数量。
在实际的程序执行文件中,指令序列一般在局部存在数据依赖,因此,为了挖掘指令级并行,处理器需要获取和缓冲大量指令,并在较远的距离上寻找不存在依赖关系的指令。然而,指令序列中存在大量的分支跳转指令,为了实现大量指令的获取和缓冲,处理器需要进行分支预测,并按预测路径获取指令序列。但是,由于分支预测可能存在错误,因此预测路径上的指令处于投机执行状态。在确定分支预测错误之后,通过该分支预测确定出的预测路径上的投机执行指令需要全部丢弃,基于正确的执行路径再重新执行,从而导致程序执行的效率较低。
发明内容
本申请提供一种程序执行方法、装置及设备,用以提高程序执行的效率。
第一方面,本申请实施例提供一种程序执行方法,在执行可执行程序文件的过程中,可以采用并行方式执行指令,针对可执行程序文件中的分支位置,在分支位置进行分支预测,根据在分支位置分支预测的结果获取目标指令执行路径,且目标指令执行路径中包含多个指令分段,并按照目标指令执行路径执行相关指令。
在目标指令执行路径执行过程中,在根据分支位置前的指令执行结果,确定出现分支预测错误后,确定目标指令执行路径中分支预测错误的分支位置所在的目标指令分段;基于目标指令分段与目标指令执行路径中其它指令分段之间依赖关系,从目标指令执行路径中确定出与目标指令分段有依赖关系的候选指令分段。
由于候选指令分段与目标指令分段之间有依赖关系,在目标指令分段执行错误后,会对候选指令分段造成影响,因此需要释放候选指令分段;而针对目标执行路径中与目标指令分段没有依赖关系的指令分段,目标指令分段的执行不会对其造成影响,因此保留与目标指令分段没有依赖关系的指令分段。
通过上述方法,在执行可执行程序文件过程中,在程序的分支位置进行分支预测,根据分支预测的结果确定并执行目标指令执行路径,通过分支预测的方式可以实现指令的并行处理,提高程序执行效率。另外,在分支预测出现错误的情况下,对目标指令执行路径中各个指令分段与目标指令分段进行依赖关系分析,仅释放对目标指令分段存在依赖关系的候选指令分段,而目标执行路径中除候选指令分段之外的其它指令分段可以保留下来,不需要将分支预测错误之后的所有指令分段全部丢弃,能够减少在分支预测错误回滚后重新执行的指令数目,进而提高程序执行效率。
在一种可能的实现方式中,本申请实施例在释放候选指令分段之后,需要从目标指令分段开始重新获取指令分段,对目标指令执行路径进行更新,并执行更新后的目标指令执行路径;由于在出现分支预测错误之后,保留与目标指令分段没有依赖关系的指令分段;因此在更新后的目标指令执行路径执行时,可以执行到目标指令执行路径中保留的其它指令分段,保留的其它指令分段不需要重复执行。
通过上述方式,本申请实施例在出现分支预测错误之后,重新获取出现预测错误的分支位置之后的指令分段,并对目标指令执行路径进行更新。在更新后的目标指令执行路径执行过程中,只需要执行本次新增的指令分段,目标指令执行路径中保留的其它指令分段不需要重复执行,从而减少由于分支预测错误导致的需重新执行的指令数目,进一步提高程序执行效率。
在一种可能的实现方式中,本申请实施例在从目标指令执行路径中确定候选指令分段时,需要考虑分支预测错误的分支位置所在的目标指令分段与目标指令执行路径中其它指令分段之间的依赖关系,通过分析目标指令执行路径中各个指令分段之间的依赖关系,基于分析出的目标指令执行路径中各个指令分段与目标指令分段之间的依赖关系,从目标指令执行路径中筛选候选指令分段。
通过上述方式,由于目标指令分段为出现分支预测错误的指令分段,该目标指令分段的执行结果会导致存在依赖关系的指令分段执行错误;在确定需要重新执行的候选指令分段时,基于指令分段之间的依赖关系,可以确定出与目标指令分段之间存在依赖关系的候选指令分段,从而重新执行候选指令分段,保证程序执行的准确性;并且,由于只筛选出与目标指令分段有依赖关系的候选指令分段重新执行,减少由于分支预测错误导致的回滚指令数目,提高程序执行效率。
在一种可能的实现方式中,本申请实施例在获取目标指令执行路径中各个指令分段之间的依赖关系时,提供多种获取指令分段之间依赖关系的方式。例如,方式1、从目标指令执行路径中的各个指令分段中获取携带的依赖层级,根据指令分段的依赖层级可以确定各个指令分段之间的依赖关系;指令分段中携带的依赖层级表示该指令分段在目标指令执行路径中层级的高低,可以用于指示该指令分段与目标指令执行路径中其他指令分段之间的依赖关系。方式2、目标指令执行路径中每个指令分段中携带依赖层级变化信息,用于指示该指令分段的依赖层级相对于前一个指令分段的依赖层级的变化值;在确定任一个指令分段的依赖层级时,可以根据该指令分段中携带的依赖层级变化信息和前一个指令分段的依赖层级进行计算;在得到每个指令分段的依赖层级之后可以确定各个指令分段之间的依赖关系。
通过上述方式,本申请实施例提供多种可选的确定各个指令分段之间的依赖关系的方式,通过指令分段中携带的依赖层级,可以根据依赖层级的高低,快速且准确的确定各个指令分段之间的依赖关系;或者,通过指令分段中携带的依赖层级变化信息,可以依次确定每个指令分段的依赖层级,然后根据各个指令分段依赖层级的高低,准确的确定各个指令分段之间的依赖关系。
在一种可能的实现方式中,本申请实施例上述依赖关系包括控制依赖和/或数据依赖。
通过上述方式,由于在确定目标执行路径中各个指令分段之间的依赖关系时,需要考虑指令分段之间的控制依赖和/或数据依赖,根据指令分段之间的控制依赖和/或数据依赖,可以准确且全面的确定指令分段之间的依赖关系。
在一种可能的实现方式中,本申请实施例将目标指令执行路径划分控制域,一个控制域中可以包括一个指令分段,或者一个控制域中包括至少两个连续的指令分段;且控制域的划分原则是,划分后的各个控制域之间只需要考虑控制依赖,通过控制依赖可以表示各个控制域之间的依赖关系。
根据目标指令执行路径中各个指令分段之间的依赖关系,从目标指令执行路径中确定候选指令分段时,确定出现分支预测错误的目标指令分段所属的目标控制域,控制域之间通过控制依赖表示依赖关系,根据目标控制域与其它控制域之间的控制依赖,以及各个指令分段之间的依赖关系,可以确定与目标指令分段存在依赖关系的候选指令分段。
通过上述方式,本申请实施例对目标指令执行路径中包含的指令分段划分控制域,将目标指令执行路径划分为多个控制域,且控制域之间只需要考虑控制依赖,因此可以简化目标指令执行路径中各个指令分段之间的依赖关系。在基于各个指令分段之间的依赖关系确定候选指令分段时,可以基于划分的控制域,在控制域之间只考虑控制依赖,筛选出与目标指令分段所属的目标控制域有控制依赖的控制域,筛选出的控制域中包含的指令分段与目标指令分段存在依赖关系,可以确定为候选指令分段。因此不需要分析目标执行路径中每个指令分段分别与目标指令分段之间的依赖关系,基于划分后的控制域,简化基于指令分段间的依赖关系确定候选指令分段的过程,提高筛选候选指令分段的效率。
在一种可能的实现方式中,在将目标指令执行路径划分控制域之后,可以采用控制域层级和程序依赖层级表示指令分段之间的依赖关系;其中控制域层级用于表示各个控制域之间的控制依赖,且一个控制域内部的各个指令分段的控制域层级相同,程序依赖层级用于表示控制域内部的指令分段之间的控制依赖和/或数据依赖。
根据目标指令执行路径中各个指令分段的依赖层级,以及目标指令分段所属的控制域,从目标指令执行路径中确定所述候选指令分段时,由于指令分段的依赖层级包括控制域层级和程序依赖层级,在确定候选指令分段时,首先根据目标指令执行路径中各个控制域之间的控制域层级,筛选出与目标指令分段所属的目标控制域无依赖关系的参考控制域,将目标控制域与参考控制域之间的控制域,作为与目标控制域有控制依赖关系的控制域;在确定出多个参考控制域的情况下,将目标控制域与按照执行顺序最早执行的参考控制域之间的控制域,作为与目标控制域有控制依赖关系的控制域。然后根据目标控制域中各个指令分段的程序依赖层级,从目标控制域中筛选出对目标指令分段有依赖关系的指令分段。最后,将从目标控制域中筛选出的指令分段,以及筛选出的目标控制域与参考控制域之间的控制域中的指令分段,作为候选指令分段。
通过上述方式,本申请实施例基于划分的控制域,使用控制域层级表示控制域之间的依赖层级,这样在确定候选指令分段时,可以根据各个控制域的控制域层级确定与目标控制域有依赖关系的控制域;且与目标控制域有依赖关系的控制域中的指令分段与目标指令分段存在依赖关系,因此通过划分控制域的方式。不需要分析目标指令执行路径中每个指令分段与目标指令分段之间的依赖关系,从而可以简化依赖关系分析流程,提高依赖关系分析效率。
在一种可能的实现方式中,本申请实施例提供了一种可选的控制域划分原则,针对任意两个相邻的指令分段,该两个相邻的指令分段需要划分至不同控制域的条件为,该两个相邻的指令分段中后继指令分段对先行指令分段存在控制主导依赖,且后继指令分段之后的指令分段、对先行指令分段之前的指令分段不存在数据主导依赖;该两个相邻的指令分段需要划分至同一个控制域的条件为,该两个相邻的指令分段中后继指令分段对先行指令分段存在数据主导依赖,或后继指令分段之后的指令分段、对先行指令分段之前的指令分段存在数据主导依赖。
本申请实施例后继指令分段对先行指令分段存在控制主导依赖的定义为,后继指令分段对先行指令分段存在控制依赖,或者后继指令分段对先行指令分段同时存在数据依赖和控制依赖;后继指令分段对先行指令分段存在数据主导依赖的定义为,后继指令分段对先行指令分段存在数据依赖但不存在控制依赖。
通过上述方式,本申请实施例基于两个相邻指令分段之间的控制主导依赖和数据主导依赖,判断是否将该两个相邻指令分段划分在同一个控制域;基于这种控制域划分方式,可以将只存在控制依赖的指令分段、或者同时存在控制依赖和数据依赖的指令分段划分在不同的控制域中,这样在控制域之间可以通过控制依赖表示依赖关系,控制域之间可以不考虑数据依赖,从而简化指令分段间依赖关系的分析流程。
在一种可能的实现方式中,本申请实施例在根据目标指令执行路径中各个指令分段的控制域层级,从目标指令执行路径中确定与目标指令分段无依赖关系的指令分段所属的参考控制域时,是将目标指令执行路径中各个指令分段的控制域层级与目标指令分段的控制域层级的数值进行大小比较;并且考虑到依赖层级的数值可能会发生溢出,根据层级溢出状态,将目标指令执行路径中各个指令分段的控制域层级、分别与目标指令分段的控制域层级进行比较,根据比较结果确定参考控制域。
另外,本申请实施例在根据目标控制域中各个指令分段的程序依赖层级,从目标控制域中确定出与目标指令分段之间无依赖关系的候选指令分段时,是将目标控制域中各个指令分段的程序依赖层级与目标指令分段的程序依赖层级的数值进行大小比较;考虑到依赖层级的数值可能会发生溢出,根据层级溢出状态,将目标控制域中各个指令分段的程序依赖层级、分别与目标指令分段的程序依赖层级进行比较,根据比较结果确定候选指令分段。
通过上述方式,由于在数值发生溢出时,只根据数值的进位和基本位无法比较两个数值之间的大小;本申请实施例根据目标指令执行路径中各个指令分段的依赖层级对应的数值是否发生溢出生成层级溢出状态,在对目标指令执行路径中各个指令分段的控制域层级和目标指令分段的控制域层级的数据进行比较时,基于层级溢出状态进行大小比较;相应的,在对目标指令执行路径中各个指令分段的程序依赖层级和目标指令分段的程序依赖层级的数据进行比较时,基于层级溢出状态进行大小比较;从而在依赖层级的数值发生溢出的情况下,仍然可以准确对依赖层级的大小进行比较。
第二方面,本申请实施例还提供了一种程序执行装置,该程序执行装置具有实现上述第一方面的方法实例中行为的功能,有益效果可以参见第一方面的描述此处不再赘述。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块。在一个可能的设计中,程序执行装置的结构中包括指令执行单元、指令确定单元、指令分析单元和指令处理单元。这些单元可以执行上述第一方面方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第三方面,本申请实施例还提供一种计算设备,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,当所述计算机程序被所述处理器执行时,处理器具有实现上述第一方面的方法实例中行为的功能,有益效果可以参见第一方面的描述此处不再赘述。
第四方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
第五方面,本申请还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
附图说明
图1为本申请实施例提供的示例指令序列的示意图;
图2为本申请实施例提供的一种可选的计算设备结构示意图;
图3为本申请实施例提供的一种程序执行方法流程图;
图4A为本申请实施例提供的示例指令序列的执行顺序示意图;
图4B为本申请实施例提供的指令之间的控制依赖关系图;
图4C为本申请实施例提供的指令之间的数据依赖关系图;
图4D为本申请实施例提供的指令序列的指令分段方式示意图;
图4E为本申请实施例提供的各个指令分段之间的控制依赖关系图;
图4F为本申请实施例提供的各个指令分段之间的数据依赖关系图;
图5A为本申请实施例提供的控制域之间控制依赖关系图;
图5B为本申请实施例提供的控制域之间控制域层级变化信息示意图;
图6为本申请实施例提供的指令分段之间控制域层级变化信息示意图;
图7为本申请实施例提供的生成层级索引表的流程示意图;
图8为本申请实施例提供的指令序列的分段方式和控制域划分方式示意图;
图9为本申请实施例提供的候选指令分段的分析流程示意图;
图10为本申请实施例提供的将新的指令分段的相关信息插入层级索引表的示意图;
图11为本申请实施例提供的层级索引表中指令分段的相关信息移动示意图;
图12为本申请实施例提供的层级索引表中另一种指令分段的相关信息移动示意图;
图13为本申请实施例提供的目标执行路径的控制域划分以及对应的层级索引表示意图;
图14为本申请实施例提供的目标执行路径的控制域划分以及对应的层级索引表示意图;
图15为本申请实施例提供的目标执行路径的控制域划分以及对应的层级索引表示意图;
图16为本申请实施例提供的目标执行路径的控制域划分以及对应的层级索引表示意图;
图17为本申请实施例提供的执行装置的结构示意图;
图18为本申请实施例提供的层级计算单元计算指令分段的依赖层级的示意图;
图19为本申请实施例提供的依赖分析单元进行层级比较的示意图;
图20为本申请实施例提供的程序执行装置的结构示意图;
图21为本申请实施例提供的计算设备的结构示意图。
具体实施方式
首先,对本申请中的部分用语进行解释说明,以便使本领域技术人员理解。
1、分支(branch)位置:分支位置是内核指令中存在跳转到多条路径的位置,内核指令中存在的跳转到多条路径的位置一般定位在if语句、while语句、else语句等存在判断情况的语句处。
2、分支预测:分支是指程序运行时需要改变的节点;分支包括无条件分支和有条件分支,其中无条件分支只需要中央处理器(Central Processing Unit,CPU)按指令顺序执行,而条件分支则需要根据处理结果决定程序运行方向是否要发生改变。分支预测是指在条件分支的前一条指令的执行结果出来之前,针对该条件分支预测是否改变程序运行方向,根据分支预测的结果提前执行相应的指令。
3、投机执行:投机执行是CPU一项重要优化,可通过投机机制提高CPU的数据处理性能。在条件分支的前一条指令的执行结果出来之前,采用分支预测的方式预测出指令执行路径之后,执行该预测出的指令执行路径的过程称为投机执行。
4、指令执行路径:在每个分支位置进行分支预测,从分支位置对应的多条路径中选择一条,将从每个分支位置选择出的路径组成指令执行路径。
5、控制依赖:控制依赖是程序控制流导致的一种约束关系。在执行路径中任意两个指令,在先执行的指令称为先行指令,在后执行的指令称为后继指令。若要执行后继指令必须先执行先行指令,则先行指令为后继指令的支配点;如果支配点执行时,后继指令不一定执行,则此时后继指令依赖于先行指令。例如如图1所示的示例指令序列,针对指令b1和指令b2,指令b1为先行指令,指令b2为后继指令;指令b1为指令b2的支配点,指令b1执行后可能跳转执行指令6,指令2不一定执行,因此,指令b2依赖于指令b1。若先行指令执行后必然执行后继指令,此时后继指令为先行指令的后支配点;如果不执行先行指令也可能执行后继指令,则此时后继指令不依赖于先行指令。例如如图1所示的示例指令序列,针对指令b4、指令b5和指令b6,指令b4或指令b5为先行指令,指令b6为后继指令,基于上述控制依赖分析,指令b6不依赖于指令b4或指令b5。若先行指令执行时后继指令必然执行,或者先行指令不执行时后继指令必然不执行,则此时后继指令可以依赖于先行指令,也可以依赖于先行指令的支配点。例如如图1所示的示例指令序列中,先行指令b2和后继指令b3互相支配,指令b3依赖于指令b2的支配点(指令b1),因此指令b3依赖于指令b1。
6、数据依赖:数据依赖是通过一个关系中属性间值是否相等体现出数据间的相互关系,数据依赖是现实世界属性间相互联系的抽象,属于数据内在的性质。在计算机科学中,数据依赖是指一种状态,当程序结构导致数据引用之前处理过的数据时的状态。在编译学中,数据依赖是数据分析的一部分。数据依赖包括流依赖、反依赖、输出依赖;其中,流依赖:是指一个变量在一次表达式中赋值或修改,然后用在后继执行的另一个表达式中;反依赖是指一个变量在一个表达式中被使用,然后在后继执行的一个表达式中被修改赋值;输出依赖是指一个变量在一个表达式中被修改赋值,然后又在后继执行的另一个表达式中被修改值。
7、多个:指两个或两个以上。
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。
本申请实施例提供的程序执行方法,可以适用于计算设备,计算设备通过执行可执行程序文件,实现该计算设备的相应功能。
本申请实施例一种可选的计算设备结构示意图,如图2所示的计算设备200,包括编译装置201和执行装置202;
编译装置201用于对指令序列进行编译,得到可执行程序文件。在对指令序列进行编译过程中,对指令序列进行分段,将指令序列划分为多个指令分段;并分析多个指令分段之间的依赖关系,并在指令分段中插入依赖层级指示信息;其中依赖层级指示信息用于指示对应的指令分段在指令序列中依赖层级的高低,其中,依赖层级低的指令分段依赖于依赖层级高的指令分段。
执行装置202用于执行可执行程序文件;在执行可执行程序文件过程中,在程序的分支位置进行分支预测,根据分支预测的结果确定目标指令执行路径,目标指令执行路径中包含多个指令分段;根据确定出的目标指令执行路径执行相应的指令。
执行装置202在执行目标指令执行路径时,若确定获取到分支位置前一个指令的执行结果,且根据分支位置前一个指令的执行结果确定针对该分支位置的分支预测出现错误,确定出现分支预测错误的分支位置所在的目标指令分段,并根据指令分段中携带的依赖层级指示信息,分析目标指令执行路径中各个指令分段与目标指令分段之间的依赖关系,筛选出与目标指令分段存在依赖关系的候选指令分段;释放候选指令分段,并保留目标指令执行路径中除候选指令分段之外的其它指令分段;从目标指令分段开始,更新并执行目标指令执行路径,直到执行到目标指令执行路径中保留的其它指令分段。
由于本申请实施例编译装置在对指令序列编译过程中,将指令序列进行分段,并在指令分段中插入表示指令分段在指令序列中依赖层级高低的依赖层级指示信息。执行装置在执行可执行程序文件过程中,为了提高程序执行效率,在程序的分支位置进行分支预测,根据分支预测的结果确定并执行目标指令执行路径,在分支位置前的指令未执行完成时,可以基于分支预测得到的目标指令执行路径;这样分支位置前的指令与目标指令执行路径可以并行执行,缩短程序执行耗时。另外,在出现分支预测出现错误的情况下,执行装置根据指令分段中携带的依赖层级指示信息,对目标指令执行路径中各个指令分段与目标指令分段进行依赖关系分析,确定出对目标指令分段存在依赖关系的候选指令分段,仅释放候选指令分段,目标指令执行路径中除候选指令分段之外的其它指令分段保留。从而能够准确判断目标指令执行路径中指令分段中需要丢弃的指令分段,并非是将出现错误的指令分段之后所有指令分段全部丢弃,能够减少在分支预测错误回滚后重新执行的指令数目,提高程序执行效率。
本申请实施例编译装置和执行装置可以位于同一个计算设备,如图2所示的计算设备的结构示意图;或者,编译装置和执行装置还可以位于不同的计算设备,例如,本申请实施例在包括编译装置的至少一个计算设备上执行程序编译流程之后,在其它包括执行装置的至少一个计算设备上执行编译之后的可执行程序文件。
另外,本申请实施例中的编译装置和执行装置可以集成在处理器中;或者编译装置和执行装置也可以是单独物理存在;或者在编译装置和执行装置位于同一个计算设备时,编译装置和执行装置可以集成在一个模块中。编译装置和执行装置既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
本申请提供一种程序执行方法及设备,用以解决现有技术中在发生分支预测错误后,需要将预测路径上所有投机执行的指令全部丢弃,导致程序执行效率低的问题。其中,方法和设备是基于同一发明构思的,由于方法及设备解决问题的原理相似,因此设备与方法的实施可以相互参见,重复之处不再赘述。下面先对程序执行方法进行说明。
如图3所示,为本申请实施例提供的一种程序执行方法,该方法包括如下步骤:
步骤301:计算设备中的执行装置对可执行程序文件中的指令执行路径进行分支预测,获取并执行目标指令执行路径;
其中,目标指令执行路径中包含多个指令分段;
本申请实施例的计算设备中的编译装置在对指令序列编译过程中,将指令序列划分为多个指令分段,每个指令分段中包括一条或多条连续的指令;计算设备中的编译装置对指令序列进行编译得到可执行程序文件。
实施中,本申请实施例计算设备中的执行装置可以采用多种方式划分指令分段,例如根据指令间的关联关系,将具有关联关系的指令划分在一个分段中,比如一个指令分段中的多条指令在执行时可以实现计算设备的某一功能。本申请实施例对计算设备中的执行装置划分指令分段的具体方式不作限定。
为了提高可执行程序文件的执行效率,本申请实施例计算设备中的执行装置在可执行程序文件执行过程中,采用分支预测的方式获得目标指令执行路径,缓存目标指令执行路径相关的程序指令,并投机执行目标指令执行路径中包含的程序指令。
步骤302:计算设备中的执行装置在分支预测出现错误的情况下,确定目标指令执行路径中分支预测错误的目标指令分段;
本申请实施例中计算设备中的执行装置在执行可执行程序文件的过程中,在分支位置的前一条指令执行完成,并获得前一条指令的执行结果后,根据该前一条指令的执行结果判断分支位置的分支预测是否正确。
若根据该前一条指令的执行结果,计算设备中的执行装置确定分支位置的分支预测出现错误,则确定在该分支位置出现分支预测错误;例如,在分支位置包括指令a和指令b两个指令,需要根据分支位置的前一条指令的执行结果,判断下一条执行的指令为指令a或指令b;在尚未获得分支位置的前一条指令的执行结果时,通过分支预测获取目标指令执行路径时,假设预测在该分支位置执行指令a;在该分支位置前一条指令执行完成获得执行结果后,根据分支位置的前一条指令的执行结果确定需要执行指令b,则确定在该分支位置出现分支预测错误。
在分支预测出现错误的情况下,计算设备中的执行装置基于编译过程中划分的指令分段,确定出现预测错误的分支位置所在的目标指令分段。
步骤303:计算设备中的执行装置从目标指令执行路径中确定候选指令分段;候选指令分段为目标指令执行路径中与目标指令分段存在依赖关系的指令分段;
本申请实施例计算设备中的执行装置在确定出目标指令执行路径中分支预测错误的目标指令分段之后,对目标指令执行路径中各个指令分段之间的依赖关系进行分析,筛选出指令分段中对目标指令分段存在依赖关系的候选指令分段;
其中,各个指令分段之间的依赖关系包括下列的部分或全部:数据依赖、控制依赖。
一种可选的实施方式为,为了提高可执行程序文件执行过程中程序执行效率,计算设备中的编译装置在可执行程序文件编译过程中,可以在每个指令分段中插入依赖层级指示信息;指令分段中携带的依赖层级指示信息可以用于表示该指令分段在目标执行路径中层级的高低。
可选的,本申请实施例计算设备中的编译装置可以将依赖层级指示信息插入指令分段的跳转指令或非跳转指令中。
计算设备中的编译装置在对目标指令执行路径中各个指令分段之间的依赖关系进行分析时,可以基于各个指令中携带的依赖层级指示信息对依赖关系进行分析。
下面首先详细介绍下本申请实施例指令序列的编译过程:
其中,本申请实施例的可执行程序文件是对指令序列进行编译得到的;
本申请实施例指令序列的编译过程中包括指令划分和配置指令分段的依赖层级。
在编译过程中,计算设备中的编译装置将指令序列划分为多个指令分段,每个指令分段中包括一条或多条连续的指令;
例如,示例指令序列如图1所示,示例指令序列的执行顺序如图4A所示。对示例指令序列进行分段,将指令序列划分为三个指令分段,其中,指令b1和指令b2作为一个指令分段s1,指令b3、指令b4和指令b5作为一个指令分段s2,指令b6作为一个指令分段s3。
在划分指令分段之后,计算设备中的编译装置为每个指令分段配置依赖层级,并根据配置的依赖层级在各个指令分段中插入依赖层级指示信息;
其中,指令分段的依赖层级可以用于表示对应的指令分段与其它指令分段之间的依赖关系,依赖层级低的指令分段依赖于依赖层级高的指令分段。
本申请实施例中依赖层级的配置原则为:针对在执行序上先后执行的两个指令分段(先执行的为先行指令分段,后执行的为后继指令分段),如果后继指令分段依赖于先行指令分段,则后继指令分段的依赖层级必须小于先行指令分段;如果后继指令分段不依赖先行指令分段,为了便于采用依赖无关性投机执行的方式,则后继指令分段的依赖层级应不小于先行指令分段。
本申请实施例指令分段中插入的依赖层级指示信息可以为以下几种方式:
方式1、依赖层级指示信息为指令分段的依赖层级;
其中,指令分段的依赖层级包括数据依赖层级和控制依赖层级;
在该方式下,计算设备中的编译装置在指令序列的编译过程中,对各个指令分段之间的依赖关系进行分析,确定各个指令分段之间的数据依赖和控制依赖,为每个指令分段分配数据依赖层级和控制依赖层级,并在各个指令分段中插入对应的数据依赖层级和控制依赖层级。
方式2、依赖层级指示信息为依赖层级变化信息;
其中,指令分段对应的依赖层级变化信息可以为该指令分段相比于前一个指令分段的依赖层级变化值;
依赖层级变化信息包括数据依赖层级变化信息和控制依赖层级变化信息。
在该方式下,计算设备中的编译装置在指令序列的编译过程中,确定出各个指令分段之间的数据依赖和控制依赖之后,分析每个指令分段相比于前一个指令分段的数据依赖变化信息,以及每个指令分段相比于前一个指令分段的控制依赖变化信息。例如,相邻两个指令分段A和指令分段B,若指令分段B依赖于指令分段A,且指令分段B和指令分段A之间存在数据依赖,则指令分段B的数据依赖变化信息可以为-1。
基于上述两种插入依赖层级指示信息的方式,计算设备中的执行装置在执行可执行程序文件过程中,确定目标执行路径中各个指令分段的依赖层级,根据目标执行路径中指令分段的依赖层级和目标指令分段的依赖层级,从目标指令执行路径中确定候选指令分段。
实施中,计算设备中的执行装置可以根据下列方式确定目标执行路径中各个指令分段的依赖层级:
针对方式1,计算设备中的执行装置获取目标指令执行路径中的指令分段中携带的依赖层级;
针对方式2,针对目标指令执行路径中任一个指令分段,计算设备中的执行装置分析该指令分段中携带的依赖层级变化信息,以及指令分段的前一个指令分段的依赖层级,确定指令分段的依赖层级;
实施中,在计算设备中的编译装置采用方式2插入依赖层级指示信息时,计算设备中的执行装置根据目标指令执行路径的执行顺序,依次确定每个指令分段的依赖层级;其中,目标指令执行路径中的第一个指令分段的依赖层级可以为预先设置或者随机生成的;针对第二个指令分段,计算设备中的执行装置根据第二个指令分段中携带的依赖层级变化信息和第一个指令分段的依赖层级,确定第二个指令分段的依赖层级;针对第三个指令分段,计算设备中的执行装置根据第三个指令分段中携带的依赖层级变化信息和第二个指令分段的依赖层级,确定第三个指令分段的依赖层级;依次类推,计算设备中的执行装置得到目标指令执行路径中每个指令分段的依赖层级。
本申请实施例计算设备中的执行装置在确定出每个指令分段的数据依赖层级和控制依赖层级之后,可以存储每个指令分段的数据依赖层级和控制依赖层级,便于后期确定候选指令分段时根据指令分段的数据依赖层级和控制依赖层级确定依赖关系。
基于上述两种插入依赖层级指示信息的方式,计算设备中的执行装置可以根据下列方式确定候选指令分段:
计算设备中的执行装置将目标执行路径中指令分段的控制依赖层级和目标指令分段的控制依赖层级进行比较,筛选出不大于目标指令分段的控制依赖层级的指令分段,确定筛选出的指令分段对目标指令分段存在控制依赖;以及,计算设备中的执行装置将目标执行路径中指令分段的数据依赖层级和目标指令分段的数据依赖层级进行比较,筛选出不大于目标指令分段的数据依赖层级的指令分段,确定筛选出的指令分段对目标指令分段存在数据依赖;计算设备中的执行装置将对目标指令分段存在数据依赖的指令分段和对目标指令分段存在控制依赖的指令分段,作为候选指令分段。
实施中,为了便于计算设备中的执行装置对目标指令执行路径中各个指令分段之间的依赖关系进行分析,本申请实施例计算设备中的执行装置在执行目标指令执行路径过程中,可以生成包括每个指令分段的数据依赖层级和控制依赖层级的层级索引表;
其中,层级索引表中包括但不限于下列信息:分段索引、数据依赖层级和控制依赖层级;如表1所示的层级索引表:
表1:层级索引表
分段索引 | 1 | 2 | 3 | 4 | … |
数据依赖层级 | 4 | 3 | 3 | 2 | … |
控制依赖层级 | 1 | 0 | 0 | 0 | … |
若计算设备中的执行装置在执行目标指令执行路径过程中生成层级索引表,则计算设备中的执行装置在确定候选指令分段时,可以基于层级索引表中记录的各个指令分段的数据依赖层级和控制依赖层级进行比较,确定对目标指令分段存在数据依赖和/或控制依赖的候选指令分段。
由于本申请实施例通过指令分段的依赖层级表达各个指令分段的依赖关系的难点在于,在一个指令序列中,存在数据依赖的指令分段之间的相对位置没有规律(例如,一个先行指令分段的数据结果,可能被多个后继指令分段使用,且需要使用先行指令分段的数据结果的后继指令分段在指令序列中位置没有规律可寻),针对长度较大的指令序列,可能无法保证为对先行指令分段没有依赖关系的后继指令分段分配不小于先行指令分段的依赖层级。
为了解决上述问题,结合控制依赖的特性,当执行序中的一个后继指令分段对一个先行指令分段没有控制依赖,则后继指令分段之后的所有指令分段对该先行指令分段没有控制依赖,因此控制依赖存在于指令序列中有限的长度范围内。并且,若两个指令分段之间同时存在控制依赖和数据依赖,则该两个指令分段之间可以只考虑控制依赖;因此,若两个指令分段之间只存在控制依赖,或者两个指令分段之间同时存在控制依赖和数据依赖,则该两个指令分段之间需要考虑控制依赖。基于此,本申请实施例考虑指令分段之间的控制依赖对指令序列进行划分,形成控制依赖连接域(Control-Dependence-LinkedDomain),下文为了简化描述,将控制依赖连接域称为控制域。两个控制域之间只考虑两个控制域之间的控制依赖,而控制域内部需要考虑指令分段间的控制依赖和/或数据依赖。
基于划分控制域之后的指令序列,需要考虑控制域内部的指令分段的数据依赖,由于一个控制域中包含的指令长度有限,能够保证在一个控制域内部为各个指令分段准确分配依赖层级。
基于此,本申请实施例还提供一种插入依赖层级指示信息的方式;
方式3、依赖层级指示信息包括指令分段的控制域层级(Control DomainHierarchy,CDH)和程序依赖层级(Program Dependence Hierarchy,PDH);
其中,控制域层级表示各个控制域之间的控制依赖,程序依赖层级表示控制域内部指令分段之间的控制依赖和/或数据依赖;且一个控制域内部的各个指令分段的控制域层级相同。
基于方式3,计算设备中的编译装置在编译过程中,需要对指令序列划分控制域;其中一个控制域内包括一个或多个连续的指令分段;
本申请实施例划分控制域的目的是为了简化数据依赖层级的配置流程;可选的,控制域划分的核心思想是不同控制域的指令分段之间只需要考虑控制依赖而不需要考虑数据依赖,而控制域内部的指令分段之间需要考虑数据依赖和/或控制依赖。
一种可选的实施方式为,本申请实施例计算设备中的编译装置在划分控制域时,可以基于下列控制域划分原则进行划分:
针对目标指令执行路径中任意两个相邻指令分段,若相邻两个指令分段中后继指令分段对先行指令分段存在控制主导依赖,且后继指令分段之后的指令分段、对先行指令分段之前的指令分段不存在数据主导依赖,则先行指令分段与所述后继指令分段划分至不同控制域中;若相邻两个指令分段中后继指令分段对先行指令分段存在数据主导依赖,或后继指令分段之后的指令分段、对先行指令分段之前的指令分段存在数据主导依赖,则先行指令分段与后继指令分段划分至同一个控制域中;
本申请实施例的后继指令分段对先行指令分段存在控制主导依赖是指后继指令分段对先行指令分段存在控制依赖,或者后继指令分段对先行指令分段同时存在数据依赖和控制依赖;后继指令分段对先行指令分段存在数据主导依赖是指后继指令分段对先行指令分段存在数据依赖但不存在控制依赖。
基于上述控制域的划分原则可能会有多种控制域划分方式,本申请实施例可以选择一种满足上述划分原则的控制域划分方式。
计算设备中的编译装置基于上述控制域的划分原则对指令序列中的多个指令分段进行控制域划分,需要对指令序列中各个指令之间的依赖关系进行分析,基于各个指令之间的控制依赖和数据依赖,确定各个指令分段之间的控制依赖和数据依赖。
实施中,计算设备中的编译装置通过对上述指令序列中各个指令之间的控制依赖进行分析,得到如图4B所示的指令之间的控制依赖关系图,其中,两条指令之间的连线表示存在控制依赖,且连线箭头的指向表示控制依赖方向;由于在指令的执行顺序中,若执行后继指令必须先执行先行指令,则先行指令为后继指令的支配点;如果支配点执行时后继指令不一定执行,则后继指令依赖于先行指令,如图4B中指令b2依赖于指令b1、指令b4和指令b5依赖于指令b3。若先行指令执行后必然执行后继指令,则后继指令为先行指令的后支配点;如果不执行先行指令也可能执行后继指令,则此时后继指令不依赖于先行指令,如图4B中指令b6不依赖于指令b4或指令b5。另外,若先行指令执行时后继指令必然执行,先行指令不执行时后继指令必然不执行,则先行指令和后继指令之间互相支配;这种互相支配的情况下,后继指令可以依赖于先行指令,也可以依赖于先行指令的支配点,如图4B中指令b3和指令b2互相支配,指令b3依赖于指令b2的支配点,即依赖于指令b1。
计算设备中的编译装置通过对上述指令序列中各个指令之间的数据依赖进行分析,得到如图4C所示的指令之间的数据依赖关系图,其中,两个指令之间的连线表示存在数据依赖关系,且连线箭头的指向表示数据依赖方向;由于指令b6引用的数据可能来自指令b4或指令b5,当投机执行路径由指令b4变为指令b5时,指令b6引用数据一定发生改变,因此指令b6依赖于指令b4和指令b5;此外指令b1、指令b2、指令b3、指令b4、指令b5、指令b6都需要使用指令b2中的数据,因此,指令b1、指令b2、指令b3、指令b4、指令b5、指令b6均依赖于指令b2。
本申请实施例计算设备中的编译装置在分析得到各个指令之间的控制依赖和数据依赖之后,确定各个指令分段之间的控制依赖和数据依赖。
计算设备中的编译装置在确定两个指令分段之间是否存在控制依赖时,若两个指令分段中的指令之间存在控制依赖,则两个指令分段之间存在控制依赖;相应的,计算设备中的编译装置在确定两个指令分段之间是否存在数据依赖时,若两个指令分段中的指令之间存在数据依赖,则两个指令分段之间存在数据依赖。
例如,一个指令序列中各个指令之间的控制依赖如图4B所示,各个指令之间的数据依赖关系如图4C所示,且指令序列的指令分段方式如图4D所示;计算设备中的编译装置对指令序列中三个指令分段间的依赖关系进行分析,则各个指令分段之间的控制依赖如图4E所示,各个指令分段之间的数据依赖如图4F所示。由于指令分段s1和指令分段s2之间同时存在控制依赖和数据依赖,则将指令分段s1和指令分段s2划分至不同的控制域;指令分段s1和指令分段s2之间存在数据依赖但不存在控制依赖,则指令分段s2和指令分段s3之间需要考虑数据依赖,因此将指令分段s2和指令分段s3划分至同一个控制域。
本申请实施例计算设备中的编译装置在将指令序列划分控制域之后,可以根据下列方式确定每个控制域的控制域层级:
本申请实施例计算设备中的编译装置在对指令序列划分控制域之后,分析各个控制域之间的依赖关系,根据各个控制域之间的依赖关系为各个控制域分配控制域层级。由于计算设备中的编译装置在划分控制域时,将需要考虑控制依赖的两个指令分段划分至不同的控制域,因此本申请实施例控制域之间只需要考虑控制依赖。
可选的,若两个控制域的指令分段间存在控制依赖,则该两个控制域之间存在控制依赖。
本申请实施例控制域层级的配置原则包括:
1)、按照指令执行顺序,指令序列中存在依赖关系的两个控制域,后继控制域的控制依赖层级低于先行控制域的控制依赖层级;
2)、针对指令序列中的任意两个控制域,在不同的执行路径中两个控制域的控制域层级差值保持不变;
例如,指令序列可以对应多条执行路径,若执行路径1和执行路径2中均包含控制域cd1和控制域cd2,则执行路径1中控制域cd1和控制域cd2的控制域层级的差值,与执行路径2中控制域cd1和控制域cd2的控制域层级的差值相同。
本申请实施例同一个控制域中的各个指令分段的控制域层级相同,将为控制域分配的控制域层级作为该控制域内各个指令分段的控制域层级。
另外,针对划分之后的每个控制域,计算设备中的编译装置还需要为控制域内部的各个指令分段配置程序依赖层级;
本申请实施例可以计算设备中的编译装置根据下列为每个控制域内部的指令分段配置程序依赖层级:
本申请实施例计算设备中的编译装置在对指令序列划分控制域之后,由于各个控制域之间需要考虑控制依赖;而在一个控制域内部包括多个指令分段的情况下,需要考虑一个控制域内部各个指令分段之间的控制依赖和/或数据依赖。
本申请实施例程序依赖层级的配置原则包括:
1)、同一控制域中存在依赖关系的两个指令分段,后继指令分段的程序依赖层级低于先行指令分段的程序依赖层级;
2)、同一控制域中的两个指令分段,在不同的执行路径中,该两个指令分段的程序依赖层级差值保持不变;
例如,指令序列可以对应多条执行路径,若执行路径1和执行路径2中均包含控制域cd2,控制域cd2中包括指令分段s2和指令分段s3;则执行路径1中指令分段s2和指令分段s3的程序依赖层级的差值,与执行路径2中指令分段s2和指令分段s3的程序依赖层级的差值相同。
另外,基于与上述方式3相同的构思,本申请实施例计算设备中的编译装置还可以在插入依赖层级指示信息时,在指令分段中插入相比于前一个指令分段的依赖层级的变化信息;
方式4、依赖层级指示信息包括指令分段的控制域层级变化信息和程序依赖层级变化信息;
其中,控制域层级变化信息可以为对应的控制域的控制域层级相比于前一个控制域的控制域层级的变化值;程序依赖层级变化信息可以为对应的指令分段的程序依赖层级相比于同一个控制域内的前一个指令分段的程序依赖层级的变化值。
下面针对控制域层级变化信息和程序依赖层级变化信息的配置方式分别进行说明:
1、控制域层级变化信息;
其中,本申请实施例可以依据上述控制域层级配置原则,计算设备中的编译装置确定每个控制域相比于前一个控制域的控制域层级变化信息;
例如,按照指令执行顺序,指令序列中存在控制依赖的两个控制域,计算设备中的编译装置在确定后继控制域的控制域层级变化信息时,将后继控制域的控制域层级变化信息配置为控制域层级降低。
本申请实施例同一个控制域中的各个指令分段的控制域层级相同,计算设备中的编译装置将为控制域分配的控制域层级变化信息作为该控制域内各个指令分段的控制域层级变化信息。
例如,指令序列中各个指令分段之间的控制依赖如图4E所示,各个指令分段之间的数据依赖关系如图4F所示,且控制域的划分方式为,指令分段s1为控制域cd1,指令分段s2和指令分段s3为控制域cd2。如图5A所示的控制域cd1和控制域cd2之间的控制依赖,控制域cd2对控制域cd1存在控制依赖,以及控制域cd1相对于上一次执行的控制域cd1存在控制依赖。则控制域之间控制域层级变化信息如图5B所示,由于控制域cd2依赖于控制域cd1,则在控制域cd1和控制域cd2之间发生控制域层级降低,比如控制域cd2中第一个指令分段s2的控制域层级变化信息可以配置为控制域层级降低一个层级。由于控制域cd2中的指令b6执行完成后,需要返回执行指令b1,而指令b1所在的控制域cd1执行时需要依赖于上一次执行的控制域cd1;因此,再次执行控制域cd1时控制域cd1的控制域层级、相比于上一次执行控制域cd1时执行控制域cd1的控制域层级降低。由于控制域cd2相比于前一个控制域cd1发生了控制域层级降低,因此,再次执行控制域cd1时控制域cd1的控制域层级相比于控制域cd2可以保持不变,比如控制域cd1中指令分段s1的控制域层级变化信息可以配置为控制域层级不变。
2、程序依赖层级变化信息;
其中,本申请实施例计算设备中的编译装置可以依据上述程序依赖层级配置原则,确定每个指令分段相比于同一控制域中前一个指令分段的程序依赖层级变化信息;
例如,按照指令执行顺序,同一控制域中存在控制依赖和/或数据依赖的两个指令分段,计算设备中的编译装置在确定后继指令分段的程序依赖层级变化信息时,将后继指令分段的程序依赖层级变化信息配置为程序依赖层级降低。
由于程序依赖层级表示的是控制域内部各个指令分段之间的依赖关系,因此计算设备中的编译装置在分析指令分段相对于前一个指令分段的程序依赖层级变化信息时,可以不对控制域中第一个指令分段的程序依赖层级变化信息进行分析;控制域中第一指令分段的程序依赖层级变化信息可以任意设置,例如控制域中第一个指令分段的程序依赖层级变化信息为保持不变,也就是说控制域中第一个指令分段的程序依赖层级、相对于前一个控制域中最后一个指令分段的程序依赖层级保持不变。
例如,指令序列中各个指令分段之间的控制依赖如图4E所示,各个指令分段之间的数据依赖关系如图4F所示,且控制域的划分方式为,指令分段s1为控制域cd1,指令分段s2和指令分段s3为控制域cd2。针对控制域cd2中的指令分段s2和指令分段s3,分别确定指令分段s2和指令分段s3的程序依赖层级。如图6所示,由于控制域cd1和控制域cd2之间只考虑控制域层级变化信息,因此指令分段s2的程序依赖层级变化信息可以任意设置,比如从指令分段s1到指令分段s2的程序依赖层级变化信息可以为不变。由于指令分段s3依赖于指令分段s2,则指令分段s3的程序依赖层级应该低于指令分段s2的程序依赖层级,比如指令分段s3的程序依赖层级变化信息可以配置为指令分段s2的程序依赖层级降低一级。当指令b6执行完成后再次执行指令b1时,由于指令b1和指令b6属于不同的控制域,因此指令b1所在的指令分段s1的程序依赖层级变化信息可以为任意值,比如从指令分段s3到指令分段s1的程序依赖层级变化信息可以为不变。
基于上述方式3和方式4,计算设备中的编译装置在将依赖层级指示信息插入各个指令分段时,由于一个控制域内各个指令分段的控制域层级相同,因此,针对控制域内部除第一个指令分段之外的其它指令分段,可以不携带控制域层级或控制域层级变化信息;
相应的,计算设备中的执行装置在可执行程序文件执行过程中,若确定指令分段中未携带控制域层级或控制域层级变化信息,则表示该指令分段为控制域内部除第一个指令分段之外的其它指令分段,该指令分段的控制域层级与前一个指令分段的控制域层级相同。
另外,本申请实施例计算设备中的编译装置在对指令序列编译过程中,还可以将各个指令分段所属的控制域信息插入指令分段中。
基于上述方式3和方式4插入的依赖层级指示信息的方式,计算设备中的执行装置在执行可执行程序文件过程中,确定目标执行路径中各个指令分段的控制域层级和程序依赖层级,根据目标执行路径中指令分段的控制域层级和程序依赖层级,以及目标指令分段的控制域层级和程序依赖层级,从目标指令执行路径中确定候选指令分段。
实施中,计算设备中的执行装置可以根据下列方式确定目标执行路径中各个指令分段的控制域层级和程序依赖层级:
针对方式3,获取目标指令执行路径中的指令分段中携带的控制域层级和程序依赖层级;
针对方式4,针对目标指令执行路径中任一个指令分段,根据该指令分段中携带的控制域层级变化信息以及前一个指令分段的控制域层级,确定指令分段的控制域层级;针对目标指令执行路径中任一个指令分段,根据该指令分段中携带的程序依赖层级变化信息以及前一个指令分段的程序依赖层级,确定指令分段的程序依赖层级。
实施中,在计算设备中的编译装置采用方式4插入依赖层级指示信息时,计算设备中的执行装置根据目标指令执行路径的执行顺序,依次确定每个指令分段的控制域层级和程序依赖层级。
其中,目标指令执行路径中第一个控制域的控制域层级可以为预先设置或者随机生成的,目标指令执行路径中的第一个指令分段的控制域层级为第一个控制域的控制域层级;针对第二个指令分段,计算设备中的执行装置根据第二个指令分段中携带的控制域层级变化信息和第一个指令分段的控制域层级,确定第二个指令分段的控制域层级;针对第三个指令分段,计算设备中的执行装置根据第三个指令分段中携带的控制域层级变化信息和第二个指令分段的控制域层级,确定第三个指令分段的控制域层级;依次类推,计算设备中的执行装置得到目标指令执行路径中每个指令分段的控制域层级。
每个控制域内部的第一个指令分段的程序依赖层级可以为预先设置或者随机生成的,针对控制域内部的第二个指令分段,计算设备中的执行装置根据第二个指令分段中携带的程序依赖层级变化信息和第一个指令分段的程序依赖层级,确定第二个指令分段的程序依赖层级;针对第三个指令分段,计算设备中的执行装置根据第三个指令分段中携带的程序依赖层级变化信息和第二个指令分段的程序依赖层级,确定第三个指令分段的程序依赖层级;依次类推,计算设备中的执行装置得到控制域内部中每个指令分段的程序依赖层级。
本申请实施例计算设备中的执行装置在确定出每个指令分段的程序依赖层级和控制域层级之后,可以存储每个指令分段的程序依赖层级和控制域层级,便于后期确定候选指令分段时根据指令分段的程序依赖层级和控制域层级确定依赖关系。
可选的,本申请实施例计算设备中的执行装置可以采用层级索引表的方式,记录各个指令分段的程序依赖层级和控制域层级;
其中,层级索引表中包括但不限于下列信息:分段索引、程序依赖层级、控制域索引、控制域层级。
下面详细介绍下层级索引表中各个信息的确定方式:
1、分段索引
计算设备中的执行装置在执行目标指令执行路径时,每检测到一个依赖层级指示信息,确定需要对指令进行分段。若依赖层级指示信息包含在跳转指令中,则将包含依赖层级指示信息的跳转指令之后的指令作为新的指令分段;若依赖层级指示信息包含在非跳转指令中,则计算设备中的执行装置将包含该依赖层级指示信息的非跳转指令之前的指令作为一个指令分段,将包含该依赖层级指示信息的非跳转指令以及之后的指令作为新的指令分段。
计算设备中的执行装置在检测到一个指令分段之后,为该指令分段分配分段索引;假设该指令分段为目标指令执行路径中的第一个指令分段,则计算设备中的执行装置将该指令分段的分段索引配置为1,在检测到下一个指令分段之后,将下一个指令分段的分段索引配置为2,依次类推,按照该方式确定每个指令分段的分段索引。
2、控制域索引
若指令分段中包含控制域信息,计算设备中的执行装置在检测到一个指令分段之后,从该指令分段对应的依赖层级指示信息中获取该指令分段的控制域信息;若该指令分段的控制域信息与上一个指令分段的控制域信息相同,则计算设备中的执行装置确定该指令分段与上一个指令分段属于同一个控制域,则该指令分段的控制域索引与上一个指令分段的控制域索引相同。若该指令分段的控制域信息与上一个指令分段的控制域信息不同,则计算设备中的执行装置确定该指令分段与上一个指令分段属于不同控制域,则为该指令分段分配与上一个指令分段不同的控制域索引。
例如,若该指令分段为目标指令执行路径中的第一个指令分段,则计算设备中的执行装置可以将第一个指令分段的控制域索引配置为1;若检测到第二个指令分段,且第二个指令分段的控制域信息与第一个指令分段的控制域信息相同,则表示第二个指令分段与第一个指令分段属于同一个控制域,则计算设备中的执行装置将第二个指令分段的控制域索引也配置为1;若检测到第三个指令分段,且第三个指令分段的控制域信息与第二个指令分段的控制域信息不同,则表示第二个指令分段与第一个指令分段属于不同控制域,则计算设备中的执行装置将第三个指令分段的控制域索引配置为2;依次类推,按照该方式确定每个指令分段的控制域索引。
若指令分段中不包含控制域信息,在检测到一个指令分段之后,若该指令分段的依赖层级指示信息中包含控制域层级变化信息,则计算设备中的执行装置确定该指令分段与前一个指令分段属于不同的控制域,则为该指令分段分配与上一个指令分段不同的控制域索引。若该指令分段的依赖层级指示信息中不包含控制域层级变化信息,则计算设备中的执行装置确定该指令分段与前一个指令分段属于同一个控制域,则为该指令分段分配与上一个指令分段相同的控制域索引。
例如,若该指令分段为目标指令执行路径中的第一个指令分段,则计算设备中的执行装置可以将第一个指令分段的控制域索引配置为1;若检测到第二个指令分段,且第二个指令分段的依赖层级指示信息中包含控制域层级变化信息,计算设备中的执行装置确定该指令分段与前一个指令分段属于不同的控制域,则可以将第二个指令分段的控制域索引配置为2;若检测到第三个指令分段,且第三个指令分段的依赖层级指示信息中不包含控制域层级变化信息,计算设备中的执行装置确定该指令分段与前一个指令分段属于同一个控制域,则可以将第三个指令分段的控制域索引配置为2;依次类推,按照该方式确定每个指令分段的控制域索引。
3、程序依赖层级
计算设备中的执行装置在检测到一个指令分段之后,若该指令分段对应的依赖层级指示信息中包含指令分段的程序依赖层级,则直接将依赖层级指示信息中包含的程序依赖层级,作为该指令分段的程序依赖层级。
或者,若该指令分段对应的依赖层级指示信息中包含指令分段的程序依赖层级变化信息,则计算设备中的执行装置根据前一个指令分段的程序依赖层级以及该指令分段的程序依赖层级变化信息,计算该指令分段的程序依赖层级。
实施中,针对目标指令执行路径中的第一个指令分段,由于没有前一个指令分段,则计算设备中的执行装置可以将第一个指令分段的程序依赖层级配置为预设值,例如可以将第一个指令分段的程序依赖层级配置为1。
另外,需要说明的是,由于一个控制域内部的指令分段之间需要根据程序依赖层级判断依赖关系,因此针对控制域内的第一个指令分段,该指令分段的程序依赖层级可以任意配置,或者该指令分段的程序依赖层级可以根据程序依赖层级变化信息和上一个控制域中的最后一个指令分段的程序依赖层级计算得到。
4、控制域层级
若在编译过程中,控制域内除第一个指令分段之外的其它指令分段,插入的依赖层级指示信息中包括控制域层级变化信息,则计算设备中的执行装置检测一个指令分段之后,根据该指令分段对应的依赖层级指示信息中包含的控制域层级变化信息,以及前一个指令分段的控制域层级,计算该指令分段的控制域层级。
若在编译过程中,控制域内除第一个指令分段之外的其它指令分段,插入的依赖层级指示信息中不包括控制域层级变化信息,则计算设备中的执行装置检测一个指令分段之后,如果该指令分段对应的依赖层级指示信息中包含的控制域层级变化信息,则计算设备中的执行装置根据该指令分段对应的依赖层级指示信息中包含的控制域层级变化信息,以及前一个指令分段的控制域层级,计算该指令分段的控制域层级;如果该指令分段对应的依赖层级指示信息中不包含的控制域层级变化信息,则计算设备中的执行装置将前一个指令分段的控制域层级作为该指令分段的控制域层级。
实施中,针对目标指令执行路径中的第一个指令分段,由于没有前一个指令分段,则计算设备中的执行装置可以将第一个指令分段的控制域层级配置为预设值,例如可以将第一个指令分段的控制域层级配置为1。
如图7所示,本申请实施例生成层级索引表的流程示意图,包括如下步骤:
其中,假设层级迁移信息的表示方式为:针对控制域中第一个指令分段,依赖层级指示信息包括控制域层级变化信息、程序依赖层级变化信息;针对控制域中除第一个指令分段之外的其它指令分段,依赖层级指示信息包括程序依赖层级变化信息;
步骤701:计算设备中的执行装置检测目标指令执行路径中的依赖层级指示信息。
步骤702:若包含依赖层级指示信息的指令为跳转指令,则计算设备中的执行装置将该跳转指令之后的指令划分新分段;若包含依赖层级指示信息的指令为非跳转指令,则计算设备中的执行装置将包含该非跳转指令在内的之后的指令划分新分段;
需要说明的是,针对包含依赖层级指示信息的指令为跳转指令,在划分指令分段时将该跳转指令之后的指令划分新分段,该跳转指令中包含的依赖层级指示信息用于指示下一个指令分段的控制域以及依赖层级。
步骤703:计算设备中的执行装置根据依赖层级指示信息中的程序依赖层级变化信息和前一个指令分段的程序依赖层级,确定新指令分段的程序依赖层级;
实施中,若程序依赖层级变化信息为数值,计算设备中的执行装置可以将的程序依赖层级变化信息和前一个指令分段的程序依赖层级之和,作为新指令分段的程序依赖层级。
步骤704:计算设备中的执行装置判断依赖层级指示信息中是否包含控制域层级变化信息;若是,执行步骤705,若否,执行步骤707。
步骤705:计算设备中的执行装置确定新指令分段与前一个指令分段属于不同的控制域,为新指令分段分配新的控制域索引。
步骤706:计算设备中的执行装置根据控制域层级变化信息和前一个指令分段的控制域层级,确定新指令分段的控制域层级;
实施中,若控制域层级变化信息为数值,计算设备中的执行装置可以将的控制域层级变化信息和前一个指令分段的控制域层级之和,作为新指令分段的控制域层级。
步骤707:计算设备中的执行装置确定新指令分段与前一个指令分段属于同一个控制域,为新指令分段分配与前一个指令分段相同的控制域索引。
步骤708:计算设备中的执行装置将前一个指令分段的控制域层级,作为新指令分段的控制域层级。
下面结合具体的例子,介绍下本申请实施例计算设备中的执行装置在目标指令执行路径执行过程中,生成层级索引表的过程:
如图8中所示的指令序列的分段方式和控制域划分方式,将指令序列划分为指令分段s1、指令分段s2和指令分段s3,其中,指令分段s1为控制域cd1,指令分段s2和指令分段s3为控制域cd2;则计算设备中的执行装置基于各个指令分段之间的依赖关系,确定每个指令分段对应的依赖层级指示信息。针对指令分段s1,由于指令分段s1为第一个指令分段,可以不配置依赖层级指示信息,层级索引表中第一个指令分段的信息可以均为预设值;例如将第一个指令分段s1的分段索引、控制域索引、程序依赖层级和控制域层级均配置为1。针对指令分段s2,依赖层级指示信息包括程序依赖层级变化信息为0,控制域层级变化信息为-1。针对指令分段s3,依赖层级指示信息包括PDH变化信息为-1(由于指令分段s3为控制域中第二个指令分段,依赖层级指示信息中不包括CDH变化信息);由于在执行指令分段s3之后,需要再次执行指令分段s1,再次执行指令分段s1时,指令分段s1对应的依赖层级指示信息包括PDH变化信息为0、CDH变化信息为0。以下指令分段的依赖层级指示信息的配置信息不再一一赘述。
如图8中所示的编译之后的可执行程序文件,由于指令分段s2的依赖层级指示信息插入在跳转指令中,则在该跳转之后启动新分段,该跳转指令属于前一个指令分段;指令分段s3的依赖层级指示信息插入在非跳转指令中,则在该非跳转指令之前划分新分段,该非跳转指令属于新分段。相应的,再次执行指令分段s1时,指令分段s1的依赖层级指示信息插入在跳转指令中,则在该跳转之后启动新分段,该跳转指令属于前一个指令分段。
基于上述可执行程序文件,计算设备中的执行装置在进行分支预测得到目标指令执行路径之后,目标指令执行路径执行过程中,生成的层级索引表如表2所示。
表2:层级索引表
分段索引 | 1 | 2 | 3 | 4 | … |
控制域索引 | 1 | 2 | 2 | 3 | … |
程序依赖层级 | 1 | 1 | 0 | 0 | … |
控制域层级 | 1 | 0 | 0 | 0 | … |
其中,指令分段s1的分段索引、控制域索引、程序依赖层级和控制域层级均配置为1。指令分段s2分段索引为2,指令分段s2的依赖层级指示信息中包含CDH,则表示指令分段s2与指令分段s1属于不同的控制域,计算设备中的执行装置为指令分段s2分配新的控制域索引为2;且由于指令分段s2的PDH变化信息为0,CDH变化信息为-1,则指令分段s2的程序依赖层级为1,控制域层级为0。指令分段s3索引为3,指令分段s3的依赖层级指示信息中不包含CDH,则表示指令分段s3与指令分段s2属于相同的控制域,则指令分段s3的控制域索引为2;且由于指令分段s3的PDH变化信息为-1,则指令分段s3的程序依赖层级为0,表1中保持指令分段s3的控制域层级不发生变化,配置为0。计算设备中的执行装置再次执行指令分段s1时,配置分段索引为4,标记为指令分段s4;由于指令分段s4对应的依赖层级指示信息中包括CDH,则表示指令分段s4与指令分段s3为不同的控制域,则为指令分段s4的控制域索引为3;由于指令分段s4的PDH变化信息为0、CDH变化信息为0,则指令分段s4的控制域层级为0,程序依赖层级为0。以下指令分段的各项层级索引信息的确定方式与前述指令分段相同,再次不再一一赘述。
本申请实施例计算设备中的执行装置在目标指令执行路径执行过程中,生成了包含各个指令分段的依赖层级和所属控制域的层级索引表;在分支预测出现错误的情况下,计算设备中的执行装置可以根据生成的层级索引表,分析目标执行路径中各个指令分段与目标指令分段之间的依赖关系。
本申请实施例计算设备中的执行装置在从目标指令执行路径中确定候选指令分段时,由于候选指令分段为与目标指令分段有依赖关系的指令分段;并且控制域之间的指令分段存在控制依赖,一个控制域内部的指令分段之间存在数据依赖和/或控制依赖;基于该构思,本申请实施例计算设备中的执行装置可以根据目标指令分段所在的目标控制域的控制域层级,筛选出与目标控制域有依赖关系的候选控制域,将候选控制域中的指令分段作为候选指令分段;以及从目标控制域中筛选与目标指令分段之间有依赖关系的候选指令分段。
下面以计算设备中的执行装置执行目标指令执行路径过程中,生成层级索引表为例,介绍确定候选指令分段的过程:
针对候选控制域和目标控制域中候选指令分段的确定方式分别进行说明。
1、计算设备中的执行装置分析目标指令执行路径中的候选控制域;
实施中,计算设备中的执行装置从生成的层级索引表中查找目标控制域的控制域层级,并从层级索引表中筛选控制域层级不小于目标控制域的控制域层级的控制域,将筛选出的控制域作为参考控制域。其中由于参考控制域的控制域层级不小于目标控制域的控制域层级,因此参考控制域对目标控制域无依赖。
本申请实施例计算设备中的执行装置将目标指令执行路径中位于目标控制域与参考控制域之间的控制域作为候选控制域;需要说明的是,候选控制域不包括目标控制域和参考控制域;另外,若筛选出多个参考控制域,则计算设备中的执行装置按照目标指令执行路径中指令执行顺序,将目标控制域与最早执行的参考控制域之间的控制域作为候选控制域。
由于计算设备中的执行装置从目标指令执行路径中确定出的候选控制域的控制域层级小于目标控制域,则表示候选控制域对目标控制域有依赖,在目标控制域中的指令分段出现错误后,会对候选控制域产生影响。
2、计算设备中的执行装置分析目标控制域中的候选指令分段;
计算设备中的执行装置从生成的层级索引表中查找目标控制域中各个指令分段的程序依赖层级,并确定目标控制域中程序依赖层级小于目标指令分段的程序依赖层级的指令分段,将确定出的指令分段作为候选指令分段。其中由于确定出的候选指令分段的程序依赖层级小于目标指令分段的程序依赖层级,因此候选指令分段对目标指令分段有依赖,在目标指令分段出现错误后,会对候选指令分段产生影响。
步骤304:计算设备中的执行装置释放候选指令分段,并保留目标指令执行路径中除候选指令分段之外的其它指令分段。
步骤305:计算设备中的执行装置从目标指令分段开始,更新并执行目标指令执行路径,直到执行到目标指令执行路径中保留的其它指令分段。
由于根据分支位置前的指令执行结果,计算设备中的执行装置可以确定在实际执行过程中不应该执行的预测错误的分支指令,因此预测错误的分支指令所在的目标指令分段的执行结果需要丢弃。但是由于目标指令执行路径中可能会存在与目标指令分段无依赖关系的指令分段,这部分指令分段不需要依赖于目标指令分段,因此这部分指令分段的执行结果可能是正确的,可以保留下来。基于该构思,本申请实施例计算设备中的执行装置在确定出目标指令分段之后,从目标指令执行路径的指令分段中,筛选出与目标指令分段存在依赖关系的候选指令分段,候选指令分段需要丢弃,保留目标指令执行路径中除候选指令分段之外的其它指令分段;并从目标指令分段开始,更新并执行目标指令执行路径,直到执行到目标指令执行路径中保留下来的指令分段,目标指令执行路径中保留下来的指令分段不需要重复执行。
计算设备中的执行装置在丢弃候选指令分段后,根据在分支位置的预测结果,重新获取指令分段,并对目标指令执行路径进行更新。从目标指令分段开始,按照更新后的目标指令执行路径执行,直到执行到上次发生分支预测错误保留下来的指令分段。
本申请实施例分支预测出现错误的情况下,计算设备中的执行装置根据分支预测错误的目标指令分段的控制域层级和程序依赖层级,以及在可执行程序文件执行过程中生成的层级索引表,确定出对目标指令分段存在依赖关系的候选指令分段,释放候选指令分段,并保留目标指令执行路径中除候选指令分段之外的其它指令分段。从而能够准确判断目标指令执行路径中的指令分段中需要丢弃的指令分段,并非是将出现错误的指令分段之后所有指令分段全部丢弃,能够减少在分支预测错误回滚后重新执行的指令数目,提高程序执行效率。
如图9所示的候选指令分段的分析流程示意图,在该流程中具体可以分为如下几个主要步骤:
步骤91:计算设备中的执行装置定位出错的目标指令分段;
步骤92:计算设备中的执行装置对控制域之间的依赖进行分析,确定候选控制域;
步骤93:计算设备中的执行装置对目标控制域内的指令分段之间的依赖进行分析,确定候选指令分段;
步骤94:计算设备中的执行装置将候选控制域中的指令分段和目标控制域内的候选指令分段在层级索引表中进行记录。
下面结合附图9进行详细说明。
针对步骤91包括如下子步骤:
步骤911:在分支预测出现错误的情况下,计算设备中的执行装置确定目标指令执行路径中分支预测错误的目标指令分段;
步骤912:计算设备中的执行装置基于层级索引表,确定目标指令分段的控制域索引;
步骤913:计算设备中的执行装置基于层级索引表,确定目标指令分段的控制域层级;
步骤914:计算设备中的执行装置基于层级索引表,确定目标指令分段的程序依赖层级。
需要说明的是,步骤912~步骤914之间执行的先后顺序可以不作限定。
针对步骤92包括如下子步骤:
步骤921:计算设备中的执行装置基于层级索引表,将目标指令分段所在的目标控制域的控制域层级与其它控制域的控制域层级进行比较;
步骤922:计算设备中的执行装置确定参考控制域;其中参考控制域的控制域层级不小于目标控制域的控制域层级;
步骤923:计算设备中的执行装置将目标指令执行路径中目标控制域与参考控制域之间的控制域作为候选控制域。
针对步骤93包括如下子步骤:
步骤931:计算设备中的执行装置基于层级索引表,确定目标控制域中的指令分段;
步骤932:计算设备中的执行装置基于层级索引表,将目标指令分段的程序依赖层级与目标控制域中的其它指令分段的程序依赖层级进行比较;
步骤933:计算设备中的执行装置确定目标控制域中的候选指令分段;其中候选指令分段的程序依赖层级小于目标指令分段的程序依赖层级。
针对步骤94,实施中,计算设备中的执行装置在层级索引表中,将候选控制域中的指令分段和目标控制域中的候选指令分段进行标记;例如,可以将候选指令分段在层级索引表中标记为无效。
一种可选的实施方式为,在层级索引表中增加指令分段的有效标记和排序标记;在可执行程序指令执行过程中,计算设备中的执行装置每执行一个指令分段,将层级索引表中指令分段的有效标记记为“有效”,将指令分段的排序标记记为“已排序”。
例如,如表3所示的层级索引表,计算设备中的执行装置在每执行一个指令分段,确定该指令分段对应的分段索引、控制域索引、程序依赖层级、控制域层级,并将该指令分段的有效标记记为“1”,表示当前指令分段为有效,指令分段的未排序标记记为“0”,表示当前指令分段已排序。
表3:层级索引表
分段索引 | 1 | 2 | 3 | 4 | … |
控制域索引 | 1 | 2 | 2 | 3 | … |
程序依赖层级 | 1 | 1 | 0 | 0 | … |
控制域层级 | 1 | 0 | 0 | 0 | … |
有效 | 1 | 1 | 1 | 1 | … |
未排序 | 0 | 0 | 0 | 0 |
在分支预测出现错误的情况下,计算设备中的执行装置确定出对分支预测错误的目标指令分段有依赖关系的候选指令分段,将层级索引表中候选指令分段的有效标记记为“0”,并将层级索引表中候选指令分段的分段索引、控制域索引、程序依赖层级、控制域层级、未排序标记进行释放;以及,计算设备中的执行装置将层级索引表中位于候选指令分段之后的指令分段的未排序标记记为“1”,在重新执行候选指令分段之后,需要对候选指令分段之后的指令分段进行重新排序。
由于本申请实施例在分析控制域之间的依赖性时,需要考虑控制域的执行顺序;并且,在分析对分支预测错误的目标指令分段有依赖关系的候选指令分段时,计算设备中的执行装置依据生成的层级索引表进行分析,因此层级索引表中记录的指令分段的前后顺序需要与指令执行顺序保持一致。
本申请实施例计算设备中的执行装置在重新执行候选指令分段之后,需要对候选指令分段之后的指令分段进行重新排序;实施中,计算设备中的执行装置在可执行程序文件执行过程中,每检测到一个依赖层级指示信息,确定需要启动新的指令分段;此时,判断新的指令分段是否记录在层级索引表中。
一种可选的实施方式为,层级索引表中包含每个指令分段的起始地址,其中指令分段的起始地址为指令分段中第一个指令的地址。根据启动新的指令分段的起始地址,判断层级索引表中是否包含该新的指令分段,如果确定新的指令分段已记录在层级索引表中,则确定新的指令分段在层级索引表中位置。
如图10所示,在分段索引为1的指令分段的相关信息插入层级索引表之后,计算设备中的执行装置在检测到依赖层级指示信息确定启动新的指令分段后,首先判断新的指令分段是否记录在层级索引表中;假设计算设备中的执行装置根据新的指令分段的起始地址,确定新的分段已经记录在层级索引表中分段索引为3的位置,则读取分段索引为3的指令分段在层级索引表中的信息,将读取到的信息中的未排序标记记为“0”,并插入到层级索引表中分段索引为1的指令分段之后,作为新的指令分段在层级索引表中的位置;计算设备中的执行装置将层级索引表中分段索引为3的指令分段的有效标记为“0”,设置为无效状态。
如果确定新的指令分段没有记录在层级索引表中,计算设备中的执行装置在将新的指令分段的相关信息插入层级索引表时,若层级索引表中该新的指令分段对应的位置上存储有其它指令分段的相关信息,且相关信息处于有效状态,则层级索引表从插入新的指令分段的相关信息的位置开始,每一个位置上的信息移动到下一个位置,从而将新的指令分段的相关信息插入层级索引表中。
如图11所示,在分段索引为1的指令分段的相关信息插入层级索引表之后,计算设备中的执行装置在检测到依赖层级指示信息确定启动新的指令分段后,确定新的指令分段没有记录在层级索引表中,则需要将新的指令分段的相关信息插入分段索引为1的指令分段之后。此时,分段索引为1的指令分段之后的位置上记录有其它指令分段的相关信息,且相关信息处于有效状态,则将分段索引为1的指令分段之后的每个位置上记录的信息依次向后移动一个位置,从而将新的指令分段记录在分段索引为1的指令分段之后的位置上。
另外,当层级索引表中的指令分段执行完成,且该指令分段为正确执行的指令分段,则计算设备中的执行装置可以将层级索引表中该指令分段的相关信息释放。如图12所示,若层级索引表中分段索引为1的指令分段正确执行之后,计算设备中的执行装置将层级索引表中每个位置上的指令分段的相关信息向前移动一个位置。
下面结合具体的例子,介绍本申请实施例的程序执行方法。
假设可执行程序文件的执行序如图4A所示,计算设备中的执行装置通过分支预测获取到的目标指令执行路径为b1-b2-b3-b4-b6-b1-b2-b3-b4-b6。目标指令执行路径中指令分段的划分方式和控制域划分方式如图13所示;其中,b1、b2为指令分段s1,b3、b4为指令分段s2,b6为指令分段s3;指令分段s1属于控制域cd1,指令分段s2、s3属于控制域cd2。假设目标执行路径对应的层级索引表如图13中所示。
若在b3分支出现分支预测错误,则计算设备中的执行装置确定b3所在的目标指令分段s2,以及目标指令分段s2所属的控制域cd2。基于如图13所示的层级索引表,由于控制域cd2的控制域层级为7,而下一个控制域cd1的控制域层级也为7,因此基于层级索引表没有筛选到候选控制域,而在目标指令分段s2所属的控制域cd2内部,指令分段s3的程序依赖层级小于目标指令分段s2的程序层级,因此指令分段s3为对目标指令分段s2有依赖关系的候选指令分段。如图14所示,将层级索引表中指令分段s3的有效标记记为“0”,表示指令分段s3处于无效状态,并将层级索引表中指令分段s3的其它相关信息释放;另外,将层级索引表中指令分段s3之后的所有指令分段的未排序标记记为“1”,表示处于未排序状态。
计算设备中的执行装置从目标指令分段s2开始重新获取指令分段,更新并执行目标指令执行路径,并将重新执行的指令分段s2和指令分段s3的相关信息插入层级索引表中,如图15所示。
计算设备中的执行装置在将重新执行的指令分段s2和指令分段s3的相关信息插入层级索引表之后,将层级索引表中指令分段s3之后的各个指令分段进行重新排序,由于指令分段s3之后的指令分段为对候选指令分段s3没有依赖的指令分段,保留指令分段s3之后的各个指令分段。因此,如图16所示,在指令分段s2和指令分段s3重新执行之后,保留层级索引表中指令分段s3之后的各个指令分段的相关信息,直接将层级索引表中指令分段s3之后的各个指令分段的未排序标记记为“0”。
一种可选的实施方式中,如图17所示,本申请实施例的执行装置包括处理单元1701、执行序管理单元1702、层级计算单元1703、依赖分析单元1704和层级比较单元1705;
处理单元1701用于获取指令,并对获取到的指令中的分支指令进行分支预测,根据分支预测的结果再次获取目标指令执行路径中的各个指令,对目标指令执行路径中的各个指令进行解码,并执行目标指令执行路径。
执行序管理单元1702用于在目标指令执行路径执行过程中,每检测到一个依赖层级指示信息,确定启动了一个新的指令分段,判断层级索引表中是否记录有该指令分段的相关信息;若层级索引表中没有该指令分段的相关信息,则为该指令分段分配分段索引。
层级计算单元1703用于在执行序管理单元1702确定层级索引表中没有记录该新的指令分段的相关信息时,根据检测到的依赖层级指示信息中包含的控制域层级变化信息,和层级索引表中记录的前一个指令分段的控制域层级,计算新的指令分段的控制域层级;以及,根据检测到的依赖层级指示信息中包含的程序依赖层级变化信息,和层级索引表中记录的前一个指令分段的程序依赖层级,计算新的指令分段的程序依赖层级;
一种可选的实施方式为,控制域层级变化信息可以为控制域层级变化的数值;在计算新的指令分段的控制域层级时,可以将前一个指令分段的控制域层级与控制域层级变化的数值之和,作为新的指令分段的控制域层级。以及,程序依赖层级变化信息可以为程序依赖层级变化的数值;在计算新的指令分段的程序依赖层级时,可以将前一个指令分段的程序依赖层级与程序依赖层级变化的数值之和,作为新的指令分段的程序依赖层级。
例如,控制域层级的数值和程序依赖层级的数值均包括三个部分:溢出位、进位和基本值;进位和基本值组成扩展值,溢出位和扩展值组成层级的数值。如图18所示的层级计算单元计算指令分段的依赖层级的示意图;其中指令分段的依赖层级可以为控制域层级或程序依赖层级。将前一个指令分段的依赖层级和依赖层级变化的数值做加法运算,得到新的指令分段的依赖层级。在得到新的指令分段的依赖层级之后,记录新的指令分段的依赖层级的数值的溢出位,并根据记录的层级索引表中所有指令分段的依赖层级数值的溢出位,确定溢出状态;如图18所示,若层级索引表中所有指令分段的依赖层级数值的溢出位不全为0且不全为1,则确定溢出状态为溢出,比如可以输出“1”表示当前处于溢出状态。
在层级计算单元1703计算得到新的指令分段的控制域层级和程序依赖层级之后,执行序管理单元1702将新的指令分段的控制域层级和程序依赖层级,以及新的指令分段的控制域索引等相关信息插入层级索引表中。
处理单元1701在执行目标指令执行路径过程中,若确定出现分支预测错误,确定目标指令执行路径中分支预测错误的目标指令分段,以及目标指令分段所属的目标控制域。
依赖分析单元1704根据分支预测错误的目标指令分段以及目标指令分段所属的目标控制域,基于层级索引表中各个指令分段的相关信息,分析对目标指令分段有依赖关系的候选指令分段;并通知处理单元1701,由处理单元1701重新执行候选指令分段。
实施中,通过层级比较单元1705对层级索引表中的目标控制域的控制域层级与其它控制域的控制域层级进行大小比较,将比较结果通知给依赖分析单元1704,依赖分析单元确定不小于目标控制域的控制域层级的参考控制域,将目标控制域与参考控制域之间的指令分段作为候选指令分段;以及通过层级比较单元1705对层级索引表中目标控制域中目标指令分段的程序依赖层级与其它指令分段的程序依赖层级进行大小比较,将比较结果通知给依赖分析单元1704,依赖分析单元确定程序依赖层级小于目标指令分段的程序依赖层级的候选指令分段。
如图19所示的依赖分析单元进行层级比较的示意图,其中以比较指令分段1和指令分段2的依赖层级为例,依赖层级可以为控制域层级或程序依赖层级。在比较指令分段1和指令分段2的依赖层级时,可以比较依赖层级数值的进位和基本值。如图19所示的依赖分析单元进一步包括异或门XOR1、异或门XOR2、非门NOT、比较模块、与门AND1、与门AND2和或门OR;或门OR的输出表示指令分段1和指令分段2的依赖层级的高低,例如,或门OR的输出为1,表示指令分段1的依赖层级大于指令分段2的依赖层级;或门OR的输出为0,表示指令分段1的依赖层级不大于指令分段2的依赖层级。
在指令分段1的依赖层级数值的进位和指令分段2的依赖层级数值的进位相同时,通过比较模块比较指令分段1的依赖层级数值的基本值和指令分段2的依赖层级数值的基本值,基本值较大的指令分段的依赖层级大。例如,假设指令分段1的依赖层级的进位为0、基本值为b1,指令分段2的依赖层级的进位为0、基本值为b2,且b1>b2。异或门XOR2输入的两个指令分段的进位相同,则异或门XOR2的输出为0;非门NOT的输入为0,则非门NOT的输出为1;比较模块对基本值b1和基本值b2进行比较,由于b1>b2,则比较模块输出1;由于与门AND2的两个输入均为1,因此与门AND2的输出为1;异或门XOR2的输出0需要输入与门AND1,与门AND1的输出为0;由于或门OR的输入为与门AND2的输出为1和与门AND1的输出0,则或门OR的输出为1,表示指令分段1的依赖层级大于指令分段2的依赖层级。
在指令分段1的依赖层级数值的进位和指令分段2的依赖层级数值的进位不同时,需要根据溢出状态以及指令分段1的依赖层级数值的进位和指令分段2的依赖层级数值的进位,确定指令分段1和指令分段2之间的依赖层级大小。比如,若溢出状态为0时,进位为1的依赖层级大;溢出状态为1时,进位为0的依赖层级大。假设指令分段1的依赖层级的进位为1、基本值为b1,指令分段2的依赖层级的进位为0、基本值为b2,且b1>b2。异或门XOR2输入的两个指令分段的进位不同,则异或门XOR2的输出为1;非门NOT的输入为1,则非门NOT的输出为0;比较模块对基本值b1和基本值b2进行比较,由于b1>b2,则比较模块输出1;由于与门AND2的两个输入分别为0和1,因此与门AND2的输出为0。假设溢出状态为0,则异或门XOR1的两个输入不同,则异或门XOR1的输出为1;与门AND1的两个输入均为1,则与门AND1的输出为1;由于或门OR的输入为与门AND2的输出0和与门AND1的输出1,则或门OR的输出为1,表示指令分段1的依赖层级大于指令分段2的依赖层级(即进位为1的依赖层级大)。假设溢出状态为1,则异或门XOR1的两个输入相同,则异或门XOR1的输出为0;与门AND1的两个输入分别为0和1,则与门AND1的输出为0;由于或门OR的输入为与门AND2的输出0和与门AND1的输出0,则或门OR的输出为0,表示指令分段1的依赖层级不大于指令分段2的依赖层级(即进位为0的依赖层级大)。
基于与方法实施例同一发明构思,本申请实施例还提供了一种程序执行装置,该程序执行装置用于执行上述如图3所示的方法实施例中计算设备中执行装置执行的方法,相关特征可参见上述方法实施例,此处不再赘述。如图20所示,程序执行装置2000包括指令执行单元2001、指令确定单元2002、指令分析单元2003和指令处理单元2004;
指令执行单元2001,用于对可执行程序文件中的指令执行路径进行分支预测,获取并执行目标指令执行路径;其中,目标指令执行路径中包含多个指令分段;
指令确定单元2002,用于在分支预测出现错误的情况下,确定目标指令执行路径中分支预测错误的目标指令分段;
指令分析单元2003,用于从目标指令执行路径中确定候选指令分段;候选指令分段为目标指令执行路径中与目标指令分段存在依赖关系的指令分段;
指令处理单元2004,用于释放候选指令分段,并保留目标指令执行路径中除候选指令分段之外的其它指令分段。
一种可能的实施方式,指令处理单元2004还用于:
在释放候选指令分段,并保留目标指令执行路径中除候选指令分段之外的其它指令分段之后,从目标指令分段开始,更新并执行目标指令执行路径,直到执行到目标指令执行路径中保留的其它指令分段。
一种可能的实施方式,指令分析单元2003,具体用于:
获取目标指令执行路径中各个指令分段之间的依赖关系;
根据目标指令执行路径中各个指令分段之间的依赖关系,从目标指令执行路径中确定候选指令分段。
一种可能的实施方式,指令分析单元2003,具体用于:
获取目标指令执行路径中的指令分段中携带的依赖层级,指令分段的依赖层级用于指示指令分段与目标指令执行路径中其他指令分段之间的依赖关系;或者
针对目标指令执行路径中任一个指令分段,分析指令分段中携带的依赖层级变化信息,以及指令分段的前一个指令分段的依赖层级,确定指令分段的依赖层级。
一种可能的实施方式,依赖关系包括控制依赖和/或数据依赖。
一种可能的实施方式,目标指令执行路径包括多个控制域,每个控制域包括一个或至少两个连续的指令分段,各个控制域之间用控制依赖表示依赖关系;
指令分析单元2003,具体用于:
根据目标指令执行路径中各个指令分段的依赖层级,以及目标指令分段所属的控制域,从目标指令执行路径中确定候选指令分段。
一种可能的实施方式,指令分段的依赖层级包括控制域层级和程序依赖层级;控制域层级表示各个控制域之间的控制依赖,程序依赖层级表示控制域内部指令分段之间的控制依赖和/或数据依赖;
指令分析单元2003,具体用于:
根据目标指令执行路径中各个指令分段的控制域层级,从目标指令执行路径中确定参考控制域,参考控制域与目标指令分段所属的目标控制域之间无依赖关系;
根据目标指令分段所属的目标控制域,将目标指令执行路径中位于目标控制域和参考控制域之间的指令分段作为候选指令分段;以及,根据目标控制域中各个指令分段的程序依赖层级,从目标控制域中确定出与目标指令分段之间有依赖关系的候选指令分段。
一种可能的实施方式,控制域的划分原则包括:
针对目标指令执行路径中任意两个相邻指令分段,若相邻两个指令分段中后继指令分段对先行指令分段存在控制主导依赖,且后继指令分段之后的指令分段、对先行指令分段之前的指令分段不存在数据主导依赖,则先行指令分段与后继指令分段划分至不同控制域中;
若相邻两个指令分段中后继指令分段对先行指令分段存在数据主导依赖,或后继指令分段之后的指令分段、对先行指令分段之前的指令分段存在数据主导依赖,则先行指令分段与后继指令分段划分至同一个控制域中;
其中,控制主导依赖表示后继指令分段对先行指令分段存在控制依赖,或者后继指令分段对先行指令分段同时存在数据依赖和控制依赖;数据主导依赖表示后继指令分段对先行指令分段存在数据依赖但不存在控制依赖。
一种可能的实施方式,指令分析单元2003,具体用于:
根据层级溢出状态,将目标指令执行路径中各个指令分段的控制域层级、分别与目标指令分段的控制域层级进行比较,从目标指令执行路径中确定与目标指令分段无依赖关系的指令分段所属的参考控制域;层级溢出状态用于表示目标指令执行路径中各个指令分段的依赖层级对应的数值是否发生溢出;
根据层级溢出状态,将目标控制域中各个指令分段的程序依赖层级、分别与目标指令分段的程序依赖层级进行比较,从目标控制域中确定与目标控制分段之间无依赖关系的候选指令分段。
需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
该集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是个人计算机,手机,或者网络设备等)或处理器(processor)执行本申请各个实施例该方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-onlymemory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
如图21所示的计算设备2100。所述计算设备2100包括总线2101、处理器2102、通信接口2103和存储器2104。处理器2102、存储器2104和通信接口2103之间通过总线2101通信。
其中,处理器2102可以为CPU、专用集成电路(application specific integratedcircuit,ASIC)、现场可编程门阵列(field programmable gate array,FPGA)、人工智能(artificial intelligence,AI)芯片、片上系统(system on chip,SoC)或复杂可编程逻辑器件(complex programmable logic device,CPLD),图形处理器(graphics processingunit,GPU)等。存储器2104可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器2104还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM)、快闪存储器、硬盘(hard disk drive,HDD)或固态硬盘(solid state drive,SSD)。存储器中存储有可执行代码,处理器2102执行该可执行代码以执行程序执行方法。
上述各个附图对应的流程的描述各有侧重,某个流程中没有详述的部分,可以参见其他流程的相关描述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括计算机程序指令,在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例图3所述的流程或功能。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (17)
1.一种程序执行方法,其特征在于,所述方法包括:
对可执行程序文件中的指令执行路径进行分支预测,获取并执行目标指令执行路径;其中,所述目标指令执行路径中包含多个指令分段;
在分支预测出现错误的情况下,确定所述目标指令执行路径中分支预测错误的目标指令分段;
从所述目标指令执行路径中确定候选指令分段;所述候选指令分段为所述目标指令执行路径中与所述目标指令分段存在依赖关系的指令分段;
释放所述候选指令分段,并保留所述目标指令执行路径中除所述候选指令分段之外的其它指令分段。
2.如权利要求1所述的方法,其特征在于,在所述释放所述候选指令分段,并保留所述目标指令执行路径中除所述候选指令分段之外的其它指令分段之后,所述方法还包括:
从所述目标指令分段开始,更新并执行所述目标指令执行路径,直到执行到所述目标指令执行路径中保留的所述其它指令分段。
3.如权利要求1所述的方法,其特征在于,所述从所述目标指令执行路径中确定候选指令分段,包括:
获取所述目标指令执行路径中各个指令分段之间的依赖关系;
根据所述目标指令执行路径中各个指令分段之间的依赖关系,从所述目标指令执行路径中确定所述候选指令分段。
4.如权利要求3所述的方法,其特征在于,所述获取所述目标指令执行路径中各个指令分段之间的依赖关系,包括:
获取所述目标指令执行路径中的指令分段中携带的依赖层级,所述指令分段的依赖层级用于指示所述指令分段与所述目标指令执行路径中其他指令分段之间的依赖关系;或者
针对所述目标指令执行路径中任一个指令分段,分析所述指令分段中携带的依赖层级变化信息,以及所述指令分段的前一个指令分段的依赖层级,确定所述指令分段的依赖层级。
5.如权利要求1~4任一项所述的方法,其特征在于,所述依赖关系包括控制依赖和/或数据依赖。
6.如权利要求4所述的方法,其特征在于,所述目标指令执行路径包括多个控制域,每个控制域包括一个或至少两个连续的指令分段,各个所述控制域之间用控制依赖表示依赖关系;
所述根据所述目标指令执行路径中各个指令分段之间的依赖关系,从所述目标指令执行路径中确定所述候选指令分段,包括:
根据所述目标指令执行路径中各个指令分段的依赖层级,以及所述目标指令分段所属的控制域,从所述目标指令执行路径中确定所述候选指令分段。
7.如权利要求6所述的方法,其特征在于,所述指令分段的依赖层级包括控制域层级和程序依赖层级;所述控制域层级表示各个控制域之间的控制依赖,所述程序依赖层级表示控制域内部指令分段之间的控制依赖和/或数据依赖;
所述根据所述目标指令执行路径中各个指令分段的依赖层级,以及所述目标指令分段所属的控制域,从所述目标指令执行路径中确定所述候选指令分段,包括:
根据所述目标指令执行路径中各个指令分段的控制域层级,从所述目标指令执行路径中确定参考控制域,所述参考控制域与所述目标指令分段所属的目标控制域之间无依赖关系;
根据所述目标指令分段所属的目标控制域,将所述目标指令执行路径中位于所述目标控制域和所述参考控制域之间的指令分段作为所述候选指令分段;以及,根据所述目标控制域中各个指令分段的程序依赖层级,从所述目标控制域中确定出与所述目标指令分段之间有依赖关系的所述候选指令分段。
8.如权利要求6或7所述的方法,其特征在于,所述控制域的划分原则包括:
针对所述目标指令执行路径中任意两个相邻指令分段,若所述相邻两个指令分段中后继指令分段对先行指令分段存在控制主导依赖,且所述后继指令分段之后的指令分段、对所述先行指令分段之前的指令分段不存在数据主导依赖,则所述先行指令分段与所述后继指令分段划分至不同控制域中;
若所述相邻两个指令分段中后继指令分段对先行指令分段存在数据主导依赖,或所述后继指令分段之后的指令分段、对所述先行指令分段之前的指令分段存在数据主导依赖,则所述先行指令分段与所述后继指令分段划分至同一个控制域中;
其中,所述控制主导依赖表示所述后继指令分段对所述先行指令分段存在控制依赖,或者所述后继指令分段对所述先行指令分段同时存在数据依赖和控制依赖;所述数据主导依赖表示所述后继指令分段对所述先行指令分段存在数据依赖但不存在控制依赖。
9.如权利要求7所述的方法,其特征在于,所述根据所述目标指令执行路径中各个指令分段的控制域层级,从所述目标指令执行路径中确定参考控制域,包括:
根据层级溢出状态,将所述目标指令执行路径中各个指令分段的控制域层级、分别与所述目标指令分段的控制域层级进行比较,从所述目标指令执行路径中确定与所述目标指令分段无依赖关系的指令分段所属的参考控制域;所述层级溢出状态用于表示所述目标指令执行路径中各个指令分段的依赖层级对应的数值是否发生溢出;
所述根据所述目标控制域中各个指令分段的程序依赖层级,从所述目标控制域中确定出与所述目标指令分段之间无依赖关系的所述候选指令分段,包括:
根据层级溢出状态,将所述目标控制域中各个指令分段的程序依赖层级、分别与所述目标指令分段的程序依赖层级进行比较,从所述目标控制域中确定与所述目标控制分段之间无依赖关系的候选指令分段。
10.一种程序执行装置,其特征在于,所述装置包括:
指令执行单元,用于对可执行程序文件中的指令执行路径进行分支预测,获取并执行目标指令执行路径;其中,所述目标指令执行路径中包含多个指令分段;
指令确定单元,用于在分支预测出现错误的情况下,确定所述目标指令执行路径中分支预测错误的目标指令分段;
指令分析单元,用于从所述目标指令执行路径中确定候选指令分段;所述候选指令分段为所述目标指令执行路径中与所述目标指令分段存在依赖关系的指令分段;
指令处理单元,用于释放所述候选指令分段,并保留所述目标指令执行路径中除所述候选指令分段之外的其它指令分段。
11.如权利要求10所述的装置,其特征在于,所述指令分析单元,具体用于:
获取所述目标指令执行路径中各个指令分段之间的依赖关系;
根据所述目标指令执行路径中各个指令分段之间的依赖关系,从所述目标指令执行路径中确定所述候选指令分段。
12.如权利要求11所述的装置,其特征在于,所述指令分析单元,具体用于:
获取所述目标指令执行路径中的指令分段中携带的依赖层级,所述指令分段的依赖层级用于指示所述指令分段与所述目标指令执行路径中其他指令分段之间的依赖关系;或者
针对所述目标指令执行路径中任一个指令分段,分析所述指令分段中携带的依赖层级变化信息,以及所述指令分段的前一个指令分段的依赖层级,确定所述指令分段的依赖层级。
13.如权利要求12所述的装置,其特征在于,所述目标指令执行路径包括多个控制域,每个控制域包括一个或至少两个连续的指令分段,各个所述控制域之间用控制依赖表示依赖关系;
所述指令分析单元,具体用于:
根据所述目标指令执行路径中各个指令分段的依赖层级,以及所述目标指令分段所属的控制域,从所述目标指令执行路径中确定所述候选指令分段。
14.如权利要求13所述的装置,其特征在于,所述指令分段的依赖层级包括控制域层级和程序依赖层级;所述控制域层级表示各个控制域之间的控制依赖,所述程序依赖层级表示控制域内部指令分段之间的控制依赖和/或数据依赖;
所述指令分析单元,具体用于:
根据所述目标指令执行路径中各个指令分段的控制域层级,从所述目标指令执行路径中确定参考控制域,所述参考控制域与所述目标指令分段所属的目标控制域之间无依赖关系;
根据所述目标指令分段所属的目标控制域,将所述目标指令执行路径中位于所述目标控制域和所述参考控制域之间的指令分段作为所述候选指令分段;以及,根据所述目标控制域中各个指令分段的程序依赖层级,从所述目标控制域中确定出与所述目标指令分段之间有依赖关系的所述候选指令分段。
15.一种计算设备,其特征在于,包括存储器和处理器,所述存储器上存储有计算机程序;所述处理器用于读取所述存储器中存储的所述计算机程序并执行,以使得如权利要求1~9任一项所述的方法被执行。
16.一种计算机可读存储介质,其特征在于,存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1~9中任一项所述的方法。
17.一种计算机程序产品,其特征在于,包含有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1~9中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211146228.2A CN117785333A (zh) | 2022-09-20 | 2022-09-20 | 一种程序执行方法、装置及设备 |
PCT/CN2023/119029 WO2024061117A1 (zh) | 2022-09-20 | 2023-09-15 | 一种程序执行方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211146228.2A CN117785333A (zh) | 2022-09-20 | 2022-09-20 | 一种程序执行方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117785333A true CN117785333A (zh) | 2024-03-29 |
Family
ID=90398597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211146228.2A Pending CN117785333A (zh) | 2022-09-20 | 2022-09-20 | 一种程序执行方法、装置及设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117785333A (zh) |
WO (1) | WO2024061117A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050071614A1 (en) * | 2003-09-30 | 2005-03-31 | Stephan Jourdan | Method and system for multiple branch paths in a microprocessor |
US7949861B2 (en) * | 2005-06-10 | 2011-05-24 | Qualcomm Incorporated | Method and apparatus for managing instruction flushing in a microprocessor's instruction pipeline |
CN103473400B (zh) * | 2013-08-27 | 2016-12-28 | 北京航空航天大学 | 基于层次依赖建模的软件fmea方法 |
CN114816533A (zh) * | 2022-04-29 | 2022-07-29 | 北京奕斯伟计算技术有限公司 | 指令处理方法、处理器、装置以及存储介质 |
-
2022
- 2022-09-20 CN CN202211146228.2A patent/CN117785333A/zh active Pending
-
2023
- 2023-09-15 WO PCT/CN2023/119029 patent/WO2024061117A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024061117A1 (zh) | 2024-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10365903B2 (en) | Framework for user-directed profile-driven optimizations | |
Wang et al. | Bmat-a binary matching tool for stale profile propagation | |
US20050144602A1 (en) | Methods and apparatus to compile programs to use speculative parallel threads | |
CN100487641C (zh) | 预测提示指令的运行时间更新 | |
US20170372230A1 (en) | Machine learning management method and machine learning management apparatus | |
US20150199199A1 (en) | Combined branch target and predicate prediction | |
US8943484B2 (en) | Code generation method and information processing apparatus | |
US7458065B2 (en) | Selection of spawning pairs for a speculative multithreaded processor | |
US20040216095A1 (en) | Method and apparatus for recovering data values in dynamic runtime systems | |
US10430191B2 (en) | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption | |
US9823911B2 (en) | Method and apparatus for compiling code based on a dependency tree | |
US8589901B2 (en) | Speculative region-level loop optimizations | |
US9348567B2 (en) | Profile guided optimization in the presence of stale profile data | |
US20150277874A1 (en) | Compiler method and compiler apparatus | |
CN102804142B (zh) | 使用双字节序编译器优化代码 | |
US6854110B2 (en) | System and method for obtaining scratch registers in computer executable binaries | |
CN115461718A (zh) | 神经网络中的内存分配 | |
JPH04213118A (ja) | プログラム翻訳装置およびプログラム翻訳方法 | |
CN108139929B (zh) | 用于调度多个任务的任务调度装置和方法 | |
CN117785333A (zh) | 一种程序执行方法、装置及设备 | |
KR20210137772A (ko) | 양자 계산 최적화 장치 및 방법 | |
US8032876B2 (en) | Method and apparatus for restructuring a software program hierarchy | |
US7487336B2 (en) | Method for register allocation during instruction scheduling | |
JP3638171B2 (ja) | 資源割付装置 | |
CN113467724A (zh) | 一种crc校验码存储方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |