本发明涉及预测器
技术领域:
:,尤其涉及一种指令分支预测方法。
背景技术:
::处理器通常采用流水线结构,并且支持条件分支指令执行。在采用流水线结构的处理器的执行可在条件的确定前使流水线中止,流水线越长,处理器等待时间越长。为了避免处理器性能损失,使用了分支预测技术从而允许处理器基于预测的分支行为推测的获取和执行指令。如果误预条件分支成立,则冲刷流水线中基于预测获取和执行的指令并重新从确定的分支地址获取新的指令。分支预测器预测准确率越高,处理器性能损失越小。传统预测器是基于分支的重复行为。分支预测器通过记录遇到过的分支的地址及分支历史来学习分支行为,从而根据最近几次同一分支指令的记录来预测特定分支指令的分支结果。对于rsic-v的指令集,32位指令和16位指令可以无缝接一起,这对于读取固定指令长度的传统预测器预测精度带来了挑战。当32位指令与16位指令混杂时,32位指令可能与发生非对齐跳转的16位压缩指令生成的索引数相同,因此32位指令与非对齐的16位压缩指令可能共享一个条目,造成混叠。技术实现要素:本发明提供的指令分支预测方法,能够对压缩指令的非对齐跳转情形进行识别,提高预测的准确性。本发明指令分支预测方法,包括:预测器获取预测表,所述预测表包括标记字段;所述预测器依据所述预测表中的标记字段预测指令是否为压缩指令且发生非对齐跳转。可选地,所述标记字段中记录的数据具有第一状态和第二状态;所述第一状态预测当前跳转指令为压缩指令且发生非对齐跳转;所述第二状态预测当前跳转指令为非压缩指令或不发生非对齐跳转。可选地,所述标记字段中记录的数据依据上一次的指令跳转情况更新状态;当上一次的指令跳转情况为压缩指令且发生非对齐跳转时,所述标记字段中记录的数据更新为第一状态;当上一次的指令跳转情况为非压缩指令或不发生非对齐跳转时,所述标记字段中记录的数据更新为第二状态。可选地,所述第一状态以二进制数字1表示,所述第二状态以二进制数字0表示。可选地,所述预测表还包括索引数字段、置信度字段和预测结果字段。可选地,依据所述置信度字段的数据状态判断所述标记字段的数据状态是否重置;当所述预测表的置信度字段为0时,将当前获取的指令的索引数填充进入索引数字段,并重置标记字段中的数据为第一状态或第二状态。可选地,依据所述预测表当前条目的置信度字段判断当前指令是否依据当前条目跳转;当所述当前条目的置信度字段的置信度数据高于预定值时,依据所述预测结果字段和所述标记字段的数据预测当前指令的跳转。可选地,所述预测表为basepredictor表或tagtable表。可选地,将获取的指令同时在basepredictor表和若干tagtable表中进行匹配;当tagtable表中具有命中条目时,依据历史信息最长的tagtable表预测指令的跳转;当tagtable表中不具有命中条目时,依据basepredictor表预测指令的跳转。可选地,所述预测表用于预测rsic-v指令集中的32位指令和16位压缩指令的跳转进行预测。本发明提供了一种指令分支预测方法,通过在预测表中加入一个标记字段来标记该索引对应的指令类型以及该指令是如何跳转的,从而能够区分当前指令是否为压缩指令且进行非对齐跳转,从而能够准确预测指令的跳转,提高处理器的工作效率。附图说明图1为本发明指令分支预测方法一实施例的预测流程图;图2为本发明指令分支预测方法一实施例的预测器示意图;图3为本发明指令分支预测方法一实施例的取指令及跳转示意图;图4为本发明指令分支预测方法一实施例的取指令及跳转示意图;图5为本发明指令分支预测方法一实施例的取指令及跳转示意图;图6为本发明指令分支预测方法一实施例的取指令及跳转示意图;图7为本发明指令分支预测方法一实施例的取指令及跳转示意图;图8为本发明指令分支预测方法一实施例的basepredictor表的其中一个条目的示意图;图9为本发明指令分支预测方法一实施例的tagtable表的其中一个条目的示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例1如图1所示,本发明实施例提供一种指令分支预测方法,包括:预测器获取预测表,所述预测表包括标记字段;所述预测器依据所述预测表中的标记字段预测指令是否为压缩指令且发生非对齐跳转。本实施例以rsic-v指令集中的32位指令和16位压缩指令的跳转进行预测为例进行具体说明,但是,本发明的应用范围并不限于rsic-v指令集,也不限于16位压缩指令和32位指令执行过程中,本领域技术人员应当理解,本发明的应用范围包括一切易导致混叠的指令执行过程。本实施例的指令分支预测方法的预测过程如图2所示,将指令和全局历史信息同时在basepredictor表或tagtable表中进行运算匹配;当32位指令与16位压缩指令混杂时,当32位指令与16位指令混杂时,32位指令与非对齐跳转16位压缩指令生成的索引数相同,即32位指令与非对齐16位压缩指令可能共享一个条目,造成混叠,从而使预测器进行误预测。非对齐指的时预测器读取的固定指令长度中跨越了32位地址边界,或是包含了不完整的半条32位指令和一条16位压缩指令。读取一条64位指令束(instructionbundle)时,该指令可能有一下几种组合:1、4条16位压缩指令;2、1条32位指令和两条16位压缩指令;3、2条32位指令;由于32位指令与16位压缩指令集混杂,读取固定长度指令时包含如图3-6所示的几种非对齐指令情况,在图中,灰色为预测器读取的固定指令长度32-bit,箭头为指令跳转位置,虚线为32位地址边界。以图6的情况为例,在运算过程中会出现如下情况:正常的32位指令pc[0:31],全局历史信息为32位h[0:31],但是索引数为8位,其运算过程如下;tag1=pc[0:7]xorpc[8:15]xorpc[16:23]xorpc[23:31]xorh[0:7]xorh[7:15]xorh[16:23]xorh[24:31];图6中的16位压缩指令pc[0:15]和前半条32位指令pc[16:31],全局历史信息为32位h[0:31],索引数为8位,其运算过程如下:tag2=pc[0:7]xorpc[8:15]xorpc[16:23]xorpc[23:31]xorh[0:7]xorh[7:15]xorh[16:23]xorh[24:31];最后两个生成的tag1与tag2有一定概率相同。此时,由于提供的预测表中包含了标记字段,可以对该条目进行标记,从而能够区分该条目是正常的32位指令还是图6所示的16位指令与前半条32位指令形成的指令。此处的预测表,可以为basepredictor表,其结构如图8所示;也可以为tagtable表,其结构如图9所示。可选地,所述标记字段中记录的数据具有第一状态和第二状态;所述第一状态预测当前跳转指令为压缩指令且发生非对齐跳转;所述第二状态预测当前跳转指令为非压缩指令或不发生非对齐跳转。具体来说,可以采用1位的计数器来记录第一状态和第二状态,也即,所述第一状态以二进制数字1表示,所述第二状态以二进制数字0表示。当然,此处并不限于采用上述形式对第一状态和第二状态的表示方式。可选地,所述标记字段中记录的数据依据上一次的指令跳转情况更新状态;当上一次的指令跳转情况为压缩指令且发生非对齐跳转时,所述标记字段中记录的数据更新为第一状态;当上一次的指令跳转情况为非压缩指令或不发生非对齐跳转时,所述标记字段中记录的数据更新为第二状态。实际跳转发生时,根据实际指令是否为16位压缩指令和是否发生非对齐跳转更新预测器中的comp位。如果跳转指令为16位压缩指令且为非对齐跳转(即读取指令跨过了32位地址边界)时,则更新comp为1。例如图3、4、6和7中发生了非对齐跳转,且包含了16位压缩指令时,更新comp为1。如果指令为32位指令或对齐跳转16位压缩指令时,则更新comp为0。例如图5中,虽然发生了非对齐跳转,但其不为16位压缩指令,所以comp仍旧更新为0。可选地,所述预测表还包括索引数字段(即tag)、置信度字段(即useful)和预测结果字段(即ctr)。可选地,依据所述置信度字段(即useful)的数据状态判断所述标记字段(即comp)的数据状态是否重置;当所述预测表的置信度字段(即useful)为0时,将当前获取的指令的索引数填充进入索引数字段(即tag),并重置标记字段(即comp)中的数据为第一状态或第二状态。可选地,依据所述预测表当前条目的置信度字段(即useful)判断当前指令是否依据当前条目跳转;当所述当前条目的置信度字段(即useful)的置信度数据高于预定值时,依据所述预测结果字段(即ctr)和所述标记字段(即comp)的数据预测当前指令的跳转。可选地,将获取的指令同时在basepredictor表和若干tagtable表中进行匹配;当tagtable表中具有命中条目时,依据历史信息最长的tagtable表预测指令的跳转;当tagtable表中不具有命中条目时,依据basepredictor表预测指令的跳转。具体的说明如下:tagtable表中的ctr采用3-bit饱和计数器进行记录,且ctr提供预测结果的方式如下:当ctr为1xx时,预测跳转发生,当ctr为0xx时,预测跳转不发生。当预测结果与实际跳转相同时,且ctr不等于111时,ctr=ctr 1,当预测结果与实际跳转不一致时,且ctr不等于000时,ctr=ctr-1。useful采用两位饱和计数器进行记录,并且提供预测结果的置信度;当useful的值为0时,表示这条记录可以被覆写新的记录。当use的值为weak(01或者00)时,预测器由使用较短历史信息索引的tagtable或者basepredictor的提供预测,当strong(10或者11)时,使用当前tagbank的预测。comp采用一位的计数器进行记录,并且标记指令的跳转方式,当comp为1时,指令为16位压缩指令且发生非对齐跳转。当comp为0时,指令为非16位压缩指令或不发生非对齐跳转。basepredictior表与tagtable表的不同之处在于,basepredictior表中的ctr采用两位饱和计数器,当ctr为1x时,预测跳转发生,当ctr为0x时,预测跳转不发生。当预测结果与实际跳转相同时,且ctr不等于11时,ctr=ctr 1,当预测结果与实际跳转不一致时,且ctr不等于00时,ctr=ctr-1。tage预测方式:使用tag索引数去匹配tagtable中的tag,从使用全局历史信息最长索引数的开始匹配。匹配情况包含一下几种:如果三个tagtable均未命中,则使用basepredictor的预测结果。如果命中一个tagtable,且该条目的置信度(use)不为weak(01或00),则使用当前条目的预测结果。如果当前条目置信度为weak(10或00),则使用basepredictor的预测结果。如果同时命中多个tagtable。则预测结果从使用较多历史信息位数的tagtable获得。采用如图2所示的预测示意图,举例如下:当tagtable3和tagtable1同时命中,tagtable2未命中时;t3为providercomponent,提供最终的预测结果,t1为altpred;如果providercomponent的useful字段的值为strong(10和11),使用providercmponent,依据其ctr字段记录的内容判断当前指令是否跳转,并依据其comp字段判断当前指令为何种指令且发生何种跳转;当providercomponent的useful字段的值为weak(00或者01),使用altpred,依据其ctr字段记录的内容判断当前指令是否跳转,并依据其comp字段判断当前指令为何种指令且发生何种跳转。预测表的更新过程如下:当指令发生跳转后,依据指令的跳转情况,更新ctr字段、useful字段和comp字段。当指令的跳转预测正确:如果providecomponent的usefulecounter为low(00或者01)时为high(11或者10)时,更新providercomponent的ctr字段。如果providecomponent的usefulecounter为low(00或者01)时,同时更新alternateprovider的ctr字段。具体更新方法如下:当条目中的ctr小于111时,ctr=ctr 1;如果ctr=111,则ctr依旧为111。由于该次跳转预测结果为正确的结果,条目中的置信度字段的置信度数据增加,即usefulcounter小于11时,useful=useful 1;usefulcounter等于11时,则useful仍为11。同时依据跳转情况更新comp字段,如果指令为16位压缩指令,且发生的非对齐跳转,则将comp字段更新为1,如果指令为非16位压缩指令,或未发生非对齐跳转,则将comp字段更新为0。当指令的跳转预测错误:首先更新提供预测结果的tagtable条目的ctr。当条目中的ctr大于000时,ctr=ctr-1;如果ctr=000则ctr依旧为000.usefulcounter大于00时,useful=useful-1。当usefulcounter为0时,表示该条目可以被换出。同时,还需要更新comp字段的数据,comp字段的数据更新与跳转正确与否没有关系,仅与指令是否为16位压缩指令且发生非对齐跳转有关,其更新方式与预测正确时的更新方式相同。如果提供预测结果的tagtable不是使用的最长全局历史信息的tagtable,则要分配一条新的条目再使用较长全局历史信息的tagtable上。分配新的条目时优先替换useful为0的旧条目。本实施例提供了一种指令分支预测方法,通过在预测表中加入一个标记字段(即comp)来标记该索引对应的指令类型以及该指令是如何跳转的,从而能够区分当前指令是否为压缩指令且进行非对齐跳转,从而能够准确预测指令的跳转,提高处理器的工作效率。实施例2本实施例提供一种指令分支预测方法,包括:预测器获取预测表,所述预测表包括标记字段;所述预测器依据所述预测表中的标记字段预测指令是否为压缩指令且发生非对齐跳转。具体的过程如下:预测器获取指令,并将当前获取的指令和全局历史信息进行运算后在若干tagtable中进行匹配,同时,将当前获取的指令在basepredictor表中进行匹配。在本实施例中,tagtable表和basepredictor表即为上述的预测表。此时的命中情况有三种第一种:若干tagtable表有多个具有命中条目,此时,选择全局历史信息最长的tagtable表进行查询;当全局历史信息最长的tagtable表的命中条目的useful的置信度为high(11或者10)时。采用全局历史信息最长的命中条目进行预测,预测时,依据ctr字段的信息判断指令是否跳转,并依据comp字段判断指令类型以及跳转方式,例如,当命中条目的ctr字段为100,comp字段为1时,此时判断当前指令为16位指令,发生非对齐跳转,且预测结果为跳转;并依照该预测结果进行执行。当指令译码结束后,就能够判断预测结果是否正确,如果预测正确,则继续执行预测跳转的结果并更新该条目所存储的信息,更新方式如下:ctr=ctr 1;useful=useful 1;当指令为16位指令且发生非对齐跳转时,comp字段保持为1,当指令为非16位指令或未发生非对齐跳转时,comp字段更新为0;如果预测错误,则清空流水线,按照译码结果执行指令,并更新该条目所存储的信息,更新方式如下:ctr=ctr-1;useful=useful-1;当指令为16位压缩指令且发生非对齐跳转时,comp字段保持为1,当指令为非16位压缩指令或未发生非对齐跳转时,comp字段更新为0。总之,comp字段的更新并不依赖指令跳转的正确与否,仅依赖于指令是否为16位压缩指令且发生非对齐跳转。第二种,若干tagtable表有多个具有命中条目,此时,选择全局历史信息最长的tagtable表进行查询;当全局历史信息最长的tagtable表的命中条目的useful的置信度为low(01或者00)时。采用其他的命中条目中全局历史信息较长的tagtable表进行预测,预测时,依据ctr字段的信息判断指令是否跳转,并依据comp字段判断指令类型以及跳转方式,例如,当命中条目的ctr字段为100,comp字段为1时,此时判断当前指令为16位指令,发生非对齐跳转,且预测结果为跳转;并依照该预测结果进行执行。当指令译码结束后,就能够判断预测结果是否正确,如果预测正确,则继续执行预测跳转的结果并同时更新所有具有命中条目的tagtable的命中条目所存储的信息,更新方式如下:ctr=ctr 1;useful=useful 1;当指令为16位指令且发生非对齐跳转时,comp字段保持为1,当指令为非16位指令或未发生非对齐跳转时,comp字段更新为0;如果预测错误,则清空流水线,按照译码结果执行指令,并更新该条目所存储的信息,更新方式如下:ctr=ctr-1;useful=useful-1;当指令为16位压缩指令且发生非对齐跳转时,comp字段保持为1,当指令为非16位压缩指令或未发生非对齐跳转时,comp字段更新为0。总之,comp字段的更新并不依赖指令跳转的正确与否,仅依赖于指令是否为16位压缩指令且发生非对齐跳转。并且,分配一条新的条目在全局历史信息最长的tagtable上,分配新的条目时优先替换useful为0的旧条目。第三种,若干tagtable表不具有命中条目,采用basepredictor表中命中的条目进行预测,预测过程以及条目的更新过程与上述第一中情况相似,此处再进行赘述。当预测错误时,在更新basepredictor表命中条目的同时,分配一条新的条目在全局历史信息最长的tagtable上,分配新的条目时优先替换use为0的旧条目。本实施例提供了一种指令分支预测方法,通过在预测表中加入一个标记字段(即comp)来标记该索引对应的指令类型以及该指令是如何跳转的,从而能够区分当前指令是否为压缩指令且进行非对齐跳转,从而能够准确预测指令的跳转,提高处理器的工作效率。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域:
:的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。当前第1页1 2 3 当前第1页1 2 3 
技术特征:1.一种指令分支预测方法,其特征在于,包括:
预测器获取预测表,所述预测表包括标记字段;
所述预测器依据所述预测表中的标记字段预测指令是否为压缩指令且发生非对齐跳转。
2.如权利要求1所述指令分支预测方法,其特征在于:所述标记字段中记录的数据具有第一状态和第二状态;
所述第一状态预测当前跳转指令为压缩指令且发生非对齐跳转;
所述第二状态预测当前跳转指令为非压缩指令或不发生非对齐跳转。
3.如权利要求2所述指令分支预测方法,其特征在于:所述标记字段中记录的数据依据上一次的指令跳转情况更新状态;
当上一次的指令跳转情况为压缩指令且发生非对齐跳转时,所述标记字段中记录的数据更新为第一状态;
当上一次的指令跳转情况为非压缩指令或不发生非对齐跳转时,所述标记字段中记录的数据更新为第二状态。
4.如权利要求2所述指令分支预测方法,其特征在于:所述第一状态以二进制数字1表示,所述第二状态以二进制数字0表示。
5.如权利要求2所述指令分支预测方法,其特征在于:所述预测表还包括索引数字段、置信度字段和预测结果字段。
6.如权利要求5所述指令分支预测方法,其特征在于:依据所述置信度字段的数据状态判断所述标记字段的数据状态是否重置;当所述预测表的置信度字段为0时,将当前获取的指令的索引数填充进入索引数字段,并重置标记字段中的数据为第一状态或第二状态。
7.如权利要求5所述指令分支预测方法,其特征在于:依据所述预测表当前条目的置信度字段判断当前指令是否依据当前条目跳转;
当所述当前条目的置信度字段的置信度数据高于预定值时,依据所述预测结果字段和所述标记字段的数据预测当前指令的跳转。
8.如权利要求1所述指令分支预测方法,其特征在于:所述预测表为basepredictor表或tagtable表。
9.如权利要求8所述指令分支预测方法,其特征在于:将获取的指令同时在basepredictor表和若干tagtable表中进行匹配;
当tagtable表中具有命中条目时,依据历史信息最长的tagtable表预测指令的跳转;
当tagtable表中不具有命中条目时,依据basepredictor表预测指令的跳转。
10.如权利要求1所述指令分支预测方法,其特征在于:所述预测表用于预测rsic-v指令集中的32位指令和16位压缩指令的跳转进行预测。
技术总结本发明提供一种指令分支预测方法,包括:获取预测表,所述预测表包括标记字段,所述标记字段用于预测对应指令是否为压缩指令且非对齐跳转。本发明指令分支预测方法,通过在预测表中加入一个标记字段来标记该索引对应的指令类型以及该指令是如何跳转的,从而能够区分当前指令是否为压缩指令且进行非对齐跳转,从而能够准确预测指令的跳转,提高处理器的工作效率。
技术研发人员:张俊逍;王前;葛悦飞
受保护的技术使用者:宁波轸谷科技有限公司
技术研发日:2019.12.20
技术公布日:2020.06.09