分支预测方法及装置与流程

文档序号:16811094发布日期:2019-02-10 13:39阅读:367来源:国知局
本申请涉及处理器
技术领域
:,特别涉及一种分支预测方法及装置。
背景技术
::为了满足用户对处理器性能日益增高的需求,处理器通常使用能够重叠执行指令的流水线技术来提高效率。为了实现指令的灵活执行,经常会使用分支指令来改变指令的执行顺序。由于分支指令的分支跳转结果只有在流水线后级才能得到,所以处理器获取到分支指令时,需要停顿流水线直至得到该分支指令的分支跳转结果后,才能在该分支跳转结果指示的跳转方向上继续获取指令。然而,停顿流水线会造成流水线的运行被打断,使得流水线产生“气泡”(bubble),从而大大影响了处理器性能。为此,处理器获取到分支指令时,一般在流水线前级就会对该分支指令进行分支预测,并在分支预测结果指示的跳转方向上继续获取指令,无需等待流水线后级返回该分支指令的分支跳转结果,从而可以减少流水线的“气泡”,提高处理器的效率。目前,对分支指令的分支预测可以通过全局历史寄存器(globalhistoryregister,ghr)和模式历史表(patternhistorytable,pht)实现。假设ghr中存储有k位的历史分支信息,对于需要进行分支预测的多个分支指令中的第1个分支指令,可以基于ghr中存储的k位信息来访问pht中一个地址上的表项,根据该表项确定第1个分支指令的分支预测结果。对于第2个分支指令,可以基于ghr中除最高1位之外的k-1位信息来访问pht中连续两个地址上的表项,基于第1个分支指令的分支预测结果从这两个表项中选择一个表项,根据选择的表项确定第2个分支指令的分支预测结果。对于第3个分支指令,可以基于ghr中除最高2位之外的k-2位信息来访问pht中连续四个地址上的表项,基于第1个分支指令和第2个分支指令的分支预测结果从这四个表项中选择一个表项,根据选择的表项确定第3个分支指令的分支预测结果。以此类推,依次确定该多个分支指令中每个分支指令的分支预测结果。然而,上述分支预测过程中,某个分支指令的分支预测结果的确定依赖于该分支指令之前的所有分支指令的分支预测结果,从而导致分支预测过程较为繁琐,控制逻辑较为复杂,进而导致该多个分支指令的分支预测效率较低,且功耗较大。另外,由于pht被访问的地址会随着该多个分支指令的个数的增长而以指数式增长,例如,该多个分支指令的个数为2个时,pht被访问的地址有(20+21)个,该多个分支指令的个数为3个时,pht被访问的地址有(20+21+22)个,……,所以此时pht的表项将会较多,占用的存储资源较多。技术实现要素:为了解决相关技术中分支预测过程较为繁琐以及pht的表项较多的问题,本申请提供了一种分支预测方法及装置。所述技术方案如下:第一方面,提供了一种分支预测方法,所述方法包括:获取当前周期内待执行的指令簇,所述指令簇中包括多个有效指令;当所述多个有效指令中存在分支指令时,基于所述指令簇的地址和所述指令簇所属线程的历史分支信息,从pht中获取所述指令簇的分支预测信息;基于所述指令簇的分支预测信息,确定所述多个有效指令中每个分支指令的分支预测结果。本发明实施例中,仅从pht中获取一个分支预测信息,就可以得到该多个有效指令中每个分支指令的分支预测结果,从而可以简化该多个有效指令中的分支指令的分支预测过程,简化控制逻辑,进而可以提高分支预测效率,并降低功耗。另外,由于在对该多个有效指令中的分支指令进行分支预测的过程中,仅需访问pht中一个地址上的表项,也即是,在pht具有较少表项的情况下就可以完成分支预测,所以可以减少pht占用的存储资源。其中,所述基于所述指令簇的地址和所述指令簇所属线程的历史分支信息,从pht中获取所述指令簇的分支预测信息,包括:基于所述指令簇的地址和所述指令簇所属线程的历史分支信息,确定索引值;将所述索引值作为索引查询所述pht,得到所述指令簇的分支预测信息。由于各个指令簇的地址一般是预先设定的,因此,可以将指令簇的地址与pht中的表项进行对应。然而,如果直接将指令簇的地址与pht中的表项进行对应,则pht中的每个表项只能被一个指令簇所使用来进行分支预测,在指令簇的数量较多的情况下,pht的表项也会较多,从而导致pht占用的存储资源较多。为了解决这个问题,通常会将指令簇的地址的低位与pht中的表项进行对应,此时具有相同低位地址的指令簇可以使用pht中的同一表项来进行分支预测,从而可以减少pht中的表项。然而,此时具有相同低位地址的指令簇将会访问和修改pht中的同一表项,从而导致不同指令簇包括的分支指令的分支预测相互干扰。在此情况下,由于某个线程中将要执行的分支指令的分支跳转结果与该线程中在该分支指令之前获取的分支指令的分支结果具有很高的相关性,所以,为了避免不同指令簇包括的分支指令的分支预测相互干扰,可以将指令簇所属线程的历史分支信息与指令簇的地址结合后来访问或修改pht,从而可以使具有相同低位地址的指令簇使用pht中的不同表项来进行分支预测,进而提高分支预测的准确度。综上所述,本发明实施例中可以直接基于该指令簇的地址和该指令簇所属线程的历史分支信息,来从pht中获取该指令簇的分支预测信息。其中,基于该指令簇的地址和该指令簇所属线程的历史分支信息,确定索引值时,可以将该指令簇的地址的低位与该指令簇所属线程的历史分支信息通过哈希(hash)函数结合在一起,得到索引值。需要说明的是,哈希函数可以包括加法哈希、位运算哈希(如移位、异或等)、乘法哈希、混合哈希等,本发明实施例对此不作限定。另外,索引值可以为pht中存储的与表项对应的值,此时pht中不仅存储有多个表项,还存储有各个表项对应的索引值;或者,索引值可以为pht包括的表项的地址,本发明实施例对此不作限定。其中,将该索引值作为索引查询该pht,得到该指令簇的分支预测信息时,如果索引值为pht中存储的与表项对应的值,则可以基于该索引值,从pht中获取对应的表项,并将所获取的表项中的分支预测信息确定为该指令簇的分支预测信息;如果索引值为pht包括的表项的地址,则可以将该索引值作为地址,来获取pht中存储在该地址上的表项,并将所获取的表项中的分支预测信息确定为该指令簇的分支预测信息。其中,所述基于所述指令簇的分支预测信息,确定所述多个有效指令中每个分支指令的分支预测结果,包括:当所述指令簇的分支预测信息为指定值时,确定所述多个有效指令中所有分支指令的分支预测结果均为不跳转;当所述指令簇的分支预测信息不为指定值时,确定所述指令簇的分支预测信息所指示的跳转指令位置n,所述n为按照所述多个有效指令的存储地址对所述多个有效指令排序时,所述指令簇中被预测跳转的分支指令在所述多个有效指令中的所有分支指令中的位置;当所述多个有效指令中的分支指令的个数小于所述n时,确定所述多个有效指令中所有分支指令的分支预测结果均为不跳转;当所述多个有效指令中的分支指令的个数不小于所述n时,按照所述多个有效指令的存储地址的顺序,确定所述多个有效指令中的第n个分支指令的分支预测结果为跳转,并确定所述多个有效指令中的前n-1个分支指令的分支预测结果均为不跳转。需要说明的是,指定值可以预先进行设置,且指定值用于指示所有分支指令均被预测不跳转。另外,本发明实施例中将跳转指令位置用n表示,跳转指令位置为被预测跳转的分支指令的位置,对于该指令簇来说,跳转指令位置即为按照该指令簇包括的多个有效指令中的所有分支指令的存储地址对该所有分支指令排序时,该指令簇中被预测跳转的分支指令在该所有分支指令中的位置。例如,按照该指令簇包括的多个有效指令中的所有分支指令的存储地址对该所有分支指令进行排序,假设跳转指令位置为2,则该指令簇中被预测跳转的分支指令为该所有分支指令中的第2个分支指令。再者,当该多个有效指令中的分支指令的个数小于n时,表明该多个有效指令中最后一个分支指令的位置尚未达到该指令簇的分支预测信息所指示的跳转指令位置,则此时可以确定该多个有效指令中所有分支指令的分支预测结果均为不跳转。当该多个有效指令中的分支指令的个数不小于n时,表明该多个有效指令中最后一个分支指令的位置达到该指令簇的分支预测信息所指示的跳转指令位置,则此时可以按照该多个有效指令的存储地址的顺序,确定该跳转指令位置上的分支指令(即该多个有效指令中的第n个分支指令)的分支预测结果为跳转,并确定该跳转指令位置之前的位置上的分支指令(即该多个有效指令中的前n-1个分支指令)的分支预测结果均为不跳转。在本发明实施例中,仅根据该指令簇的分支预测信息,就可以确定该指令簇中的多个有效指令中每个分支指令的分支预测结果,此时该多个有效指令中的分支指令的分支预测过程较为简单,控制逻辑也比较简单,从而可以提高该多个有效指令中的分支指令的分支预测效率,并降低分支预测过程的功耗。进一步地,所述基于所述指令簇的分支预测信息,确定所述多个有效指令中每个分支指令的分支预测结果之后,还包括:在所述指令簇所属线程的历史分支信息中,增加所述多个有效指令中每个分支指令的分支预测结果,并删除m个存储时间最早的分支结果,所述m为所述多个有效指令中的分支指令的个数。在本发明实施例中,可以基于该多个有效指令中每个分支指令的分支预测结果,来更新该指令簇所属线程的历史分支信息,从而使得后续获取的分支指令的分支预测可以继续基于更新后的历史分支信息来正常进行。进一步地,所述pht的表项包括分支预测信息和状态信息,所述状态信息用于指示所述分支预测信息为强状态或弱状态;所述基于所述指令簇的分支预测信息,确定所述多个有效指令中每个分支指令的分支预测结果之后,还包括:执行所述多个有效指令,得到所述多个有效指令中每个分支指令的分支跳转结果;当所述多个有效指令中的所有分支指令的分支预测结果和分支跳转结果均为不跳转时,或者当所述多个有效指令中分支预测结果为跳转的分支指令的分支跳转结果为跳转时,如果所述pht中所述指令簇的分支预测信息所在表项中的状态信息指示强状态,则不对所述表项进行更新;如果所述pht中所述指令簇的分支预测信息所在表项中的状态信息指示弱状态,则将所述表项中的状态信息更新为指示强状态的状态信息;当所述多个有效指令中的所有分支指令的分支预测结果均为不跳转且所述多个有效指令中存在分支指令的分支跳转结果为跳转时,或者当所述多个有效指令中分支预测结果为不跳转的分支指令的分支跳转结果为跳转时,如果所述pht中所述指令簇的分支预测信息所在表项中的状态信息指示强状态,则将所述表项中的状态信息更新为指示弱状态的状态信息;如果所述pht中所述指令簇的分支预测信息所在表项中的状态信息指示弱状态,则将所述表项中的分支预测信息更新为用于指示所述指令簇的跳转指令位置的分支预测信息,所述指令簇的跳转指令位置为按照所述多个有效指令的存储地址对所述多个有效指令排序时,所述多个有效指令中分支跳转结果为跳转的分支指令在所述多个有效指令中的所有分支指令中的位置。在本发明实施例中,可以基于该多个有效指令中每个分支指令的分支跳转结果,来更新pht,从而保证后续获取的分支指令的分支预测可以基于更新后的pht来进行,保证后续分支预测时的准确度。其中,所述基于所述指令簇的地址和所述指令簇所属线程的历史分支信息,从pht中获取所述指令簇的分支预测信息,包括:当基于所述pht对正在运行的多个线程的分支指令进行分支预测时,基于所述指令簇的地址、所述指令簇所属线程的历史分支信息和所述指令簇所属线程的线程标识,从所述pht中获取所述指令簇的分支预测信息。由于正在运行的多个线程可以共享一个pht,所以,具有相同低位地址和历史分支信息的线程将会使用pht中的同一表项来进行分支预测,从而导致不同线程的分支指令的分支预测相互干扰。为了解决这个问题,可以将线程的线程标识也作为使用pht中的表项的一个依据,也即是,可以将指令簇的地址、指令簇所属线程的历史分支信息与指令簇所属线程的线程标识结合后来访问或修改pht,从而可以使具有相同低位地址和历史分支信息的线程使用pht中的不同表项来进行分支预测,进而提高分支预测的准确度。综上所述,本发明实施例中可以基于该指令簇的地址、该指令簇所属线程的历史分支信息和该指令簇所属线程的线程标识,从pht中获取该指令簇的分支预测信息。其中,所述基于所述指令簇的地址、所述指令簇所属线程的历史分支信息和所述指令簇所属线程的线程标识,从所述pht中获取所述指令簇的分支预测信息,包括:基于所述指令簇的地址、所述指令簇所属线程的历史分支信息和所述指令簇所属线程的线程标识,确定索引值;将所述索引值作为索引查询所述pht,得到所述指令簇的分支预测信息。第二方面,提供了一种分支预测装置,所述分支预测装置具有实现上述第一方面中分支预测方法行为的功能。所述分支预测装置包括至少一个模块,所述至少一个模块用于实现上述第一方面所提供的分支预测方法。第三方面,提供了一种分支预测装置,所述分支预测装置的结构中包括处理器和存储器,所述存储器用于存储支持分支预测装置执行上述第一方面所提供的分支预测方法的程序,以及存储用于实现上述第一方面所述的分支预测方法所涉及的数据。所述处理器被配置为用于执行所述存储器中存储的程序。所述分支预测装置还可以包括通信总线,所述通信总线用于在所述处理器与所述存储器之间建立连接。第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的分支预测方法。第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的分支预测方法。上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与上述第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。本申请提供的技术方案带来的有益效果是:获取当前周期内待执行的指令簇后,如果该指令簇包括的多个有效指令中存在分支指令,则开始对该多个有效指令中的分支指令进行分支预测。此时,先基于该指令簇的地址和该指令簇所属线程的历史分支信息,从pht中获取该指令簇的分支预测信息,再基于该指令簇的分支预测信息,确定该多个有效指令中每个分支指令的分支预测结果,从而完成对该多个有效指令中的分支指令的分支预测。本发明实施例中仅从pht中获取一个分支预测信息,就可以得到该多个有效指令中每个分支指令的分支预测结果,从而简化了该多个有效指令中的分支指令的分支预测过程,简化了控制逻辑,进而提高了分支预测效率,并降低了功耗。另外,由于在对该多个有效指令中的分支指令进行分支预测的过程中,仅需访问pht中一个地址上的表项,也即是,在pht具有较少表项的情况下就可以完成分支预测,所以可以减少pht占用的存储资源。附图说明图1a是本发明实施例提供的一种指令簇的示意图;图1b是本发明实施例提供的一种系统架构的示意图;图1c是本发明实施例提供的一种ghr的示意图;图1d是本发明实施例提供的一种pht的示意图;图2是本发明实施例提供的一种计算机设备的结构示意图;图3a是本发明实施例提供的一种分支预测方法的流程图;图3b是本发明实施例提供的另一种pht的示意图;图3c是本发明实施例提供的一种确定多个有效指令中每个分支指令的分支预测结果的操作的流程图;图3d是本发明实施例提供的一种ghr的投机更新过程的示意图;图3e是本发明实施例提供的一种修正分支信息的示意图;图3f是本发明实施例提供的另一种修正分支信息的示意图;图3g是本发明实施例提供的一种pht的修正更新过程的示意图;图4a是本发明实施例提供的一种分支预测装置的结构示意图;图4b是本发明实施例提供的一种第二获取模块的结构示意图;图4c是本发明实施例提供的一种确定模块的结构示意图;图4d是本发明实施例提供的另一种分支预测装置的结构示意图;图4e是本发明实施例提供的又一种分支预测装置的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请的实施方式作进一步地详细描述。首先,对本发明实施例涉及的名词进行说明。流水线:流水线通常由有联系的多个流水段组成,该多个流水段均有专门的功能模块对指令进行处理,且该多个流水段对指令的处理过程在时间上可以相互错开,从而使得多个指令能够被并行处理。例如,五级流水线包括5个流水段,依次可以为取指(instructionfetch,if)、译码(instructiondecode,id)、执行(execute,ex)、访问(memoryaccess,mem)、写回(writeback,wb)。指令簇(instructionbundle):存储器中存储的指令可以按照其存储地址被划分为多个指令簇,各个指令簇的地址为各个指令簇包括的第一个指令的存储地址,且各个指令簇的地址对齐于预设的指令边界(instructionboundary),此时每相邻两个指令边界之间均包括预设数值个指令,且每相邻两个指令边界之间包括的预设数值个指令组成一个指令簇,即各个指令簇均包括预设数值个指令。例如,各个指令簇的地址对齐于4-instructionboundary,此时每相邻两个指令边界之间均包括4个指令,且每相邻两个指令边界之间包括的4个指令组成一个指令簇,即各个指令簇均包括4个指令。处理器以指令簇为单位来获取指令,也即是,处理器每个周期只能从一个指令簇中获取指令,不能跨指令簇获取指令。分支指令:分支指令为用于改变指令的执行顺序的指令。通常情况下,处理器按照存储器中存储的指令的存储地址的顺序,依次从存储器中获取指令并执行。当处理器获取的指令中包括分支指令时,该分支指令被执行后得到分支跳转结果。当该分支跳转结果为不跳转时,指令的执行顺序不会被改变,此时处理器会继续依次获取位于该分支指令之后的指令来执行;当该分支跳转结果为跳转时,指令的执行顺序会被改变,此时处理器将不再继续依次获取位于该分支指令之后的指令来执行,而是会从该分支指令指示的目标存储地址开始依次获取指令并执行。例如,如图1a所示,处理器在某个周期从存储器中获取到指令簇1,指令簇1包括指令1、指令2和指令3,存储器中与指令簇1相邻的下一个指令簇为指令簇2。通常情况下,处理器在该周期获取到指令簇1后,会在下个周期继续获取指令簇2来执行。然而,如果指令簇1包括的指令2为分支指令,且指令2执行后得到的分支跳转结果为跳转,则处理器在下个周期将不再继续获取指令簇2来执行,而是会从指令2指示的目标存储地址开始依次获取指令并执行。假设指令2指示的目标存储地址上的指令为指令16,且指令16属于指令簇5,则指令簇5为指令2所跳转到的指令簇,处理器在下个周期将从指令簇5开始依次获取指令并执行。有效指令:有效指令为线程在当前周期内运行时所需的指令。对于处理器获取到的某个指令簇,当该指令簇是在其相邻的前一个指令簇后依次获取得到时,该指令簇中的所有指令均为有效指令;当该指令簇是某个分支指令所跳转到的指令簇时,即当该指令簇为某个分支指令指示的目标存储地址上的指令所属的指令簇时,由于处理器是从该分支指令指示的目标存储地址开始依次获取指令并执行,所以,有效指令为该指令簇中目标存储地址上的指令、该指令簇中的最后一个指令以及目标存储地址上的指令与该最后一个指令之间的指令。例如,如图1a所示,假设处理器在某个周期从存储器中获取到指令簇1,指令簇1包括指令1、指令2和指令3,指令簇1是在其相邻的前一个指令簇后依次获取得到的,则指令簇1包括的指令1、指令2和指令3均为有效指令。假设处理器在某个周期从存储器中获取到指令簇5,指令簇5包括指令15、指令16和指令17,指令簇5是指令簇1中的分支指令所跳转到的指令簇,且该分支指令指示的目标存储地址上的指令为指令16,则指令簇5中的指令16和指令17为有效指令。其次,对本发明实施例涉及的应用场景进行说明。分支指令是线程中频繁出现的指令,其使得指令得以灵活执行,带来了线程行为的多样性。在具有流水线结构的处理器中,由于分支指令的分支跳转结果只有在流水线后级才能得到,所以分支指令的存在会导致流水线产生“气泡”,从而影响了处理器的性能。为此,分支预测应运而生,分支预测是指在流水线后级返回分支指令的分支跳转结果之前,就在流水线前级对分支指令进行分支预测来得到分支预测结果,此时处理器可以在分支预测结果指示的跳转方向上继续获取指令,从而可以有效避免流水线产生“气泡”。其中,当分支预测结果为不跳转时,该分支预测结果指示的跳转方向为不跳转,此时处理器继续依次获取位于该分支指令之后的指令,当分支预测结果为跳转时,该分支预测结果指示的跳转方向为跳转到分支指令指示的目标存储地址,此时处理器从目标存储地址开始依次获取指令。目前,对多个分支指令进行分支预测时所需的pht表项往往比较多,从而导致pht占用的存储资源较多。另外,多个分支指令的分支预测过程往往也比较繁琐,控制逻辑比较复杂,从而导致多个分支指令的分支预测效率较低,且功耗较大。为此,本发明实施例提供了一种分支预测方法,来在减少pht表项的情况下,简化分支指令的分支预测过程,从而在占用较少存储资源的情况下,提高分支指令的分支预测效率,并降低功耗。最后,对本发明实施例涉及的系统架构进行说明。图1b是本发明实施例提供的一种系统架构的示意图。参见图1b,该系统架构可以包括:存储器101和处理器102。存储器101用于存储指令,且所存储的指令分属于多个指令簇。处理器102用于在每个周期从存储器101中获取该周期内待执行的指令簇,并执行该指令簇包括的多个有效指令来运行线程。另外,当该多个有效指令中存在分支指令时,处理器102还用于对该多个有效指令中的分支指令进行分支预测得到分支预测结果,以便后续可以在该分支预测结果指示的跳转方向上继续获取指令。再者,处理器102具有流水线结构,该流水线结构中可以包括多个功能模块,如可以包括取指模块1021、译码模块1022等,其中,取指模块1021可以执行获取指令、分支预测等操作。具体地,处理器102对所获取的指令簇包括的多个有效指令中的分支指令进行分支预测时,可以基于该指令簇的地址和该指令簇所属线程的历史分支信息,从pht中获取该指令簇的分支预测信息,并基于该指令簇的分支预测信息,确定该多个有效指令中的每个分支指令的分支预测结果。需要说明的是,某个线程的历史分支信息包括在运行该线程时所获取的分支指令的分支结果。其中,对于在运行该线程时所获取的每个分支指令,当该分支指令未被执行但已进行分支预测时,该分支指令的分支结果为该分支指令的分支预测结果,当该分支指令已被执行时,该分支指令的分支结果为该分支指令的分支跳转结果。例如,在运行线程1时所获取的指令包括指令1、指令2和指令16,且指令2和指令16均为分支指令,则线程1的历史分支信息中可以包括指令2和指令16的分支结果。假设指令2已被执行,指令16未被执行但已进行分支预测,则线程1的历史分支信息中可以包括指令2的分支跳转结果和指令16的分支预测结果。另外,某个线程的历史分支信息可以由该线程的ghr来记录,ghr是一个移位寄存器,多线程处理器正在运行的多个线程各自均可以具有独立的ghr,且对于该多个线程中的每个线程,该线程的ghr可以基于该线程的分支指令的分支结果来进行更新。其中,ghr的每个位上可以记录一个分支结果,例如,如图1c所示,某个线程的ghr中记录的历史分支信息可以为110…101,其中,0和1均为分支结果,且0表示不跳转,1表示跳转。需要说明的是,pht是用于预测分支指令是否跳转的表,多线程处理器正在运行的多个线程可以共享一个pht,且对于该多个线程中的每个线程,pht可以基于该线程的分支指令的分支跳转结果来进行更新。其中,pht具有多个表项,每个表项包括分支预测信息和状态信息。分支预测信息用于预测分支指令是否跳转,且当分支预测信息为指定值时,分支预测信息用于指示所有分支指令均被预测不跳转,当分支预测信息不为指定值时,分支预测信息用于指示跳转指令位置,该跳转指令位置为被预测跳转的分支指令的位置。状态信息用于指示该分支预测信息为强状态或弱状态,且该状态信息用于体现该分支预测信息的预测准确度,也即是,当该状态信息为强状态时,表明该分支预测信息的预测准确度较高,当该状态信息为弱状态时,表明该分支预测信息的预测准确度较低。例如,如图1d所示,pht中的多个表项为000、001…110、111,其中,每个表项的最高2位上的数值为分支预测信息,最低1位上的数值为状态信息,且状态信息1用于指示强状态,状态信息0用于指示弱状态。假设指定值为00,则表项000中的分支预测信息00用于指示所有分支指令均被预测不跳转,且状态信息0用于指示分支预测信息00的预测准确度较低;表项001中的分支预测信息00用于指示所有分支指令均被预测不跳转,且状态信息1用于指示分支预测信息00的预测准确度较高;……;表项110中的分支预测信息11用于指示跳转指令位置,且状态信息0用于指示分支预测信息11的预测准确度较低;表项111中的分支预测信息11用于指示跳转指令位置,且状态信息1用于指示分支预测信息11的预测准确度较高。其中,基于该指令簇的地址和该指令簇所属线程的历史分支信息,从pht中获取该指令簇的分支预测信息,并基于该指令簇的分支预测信息,确定该多个有效指令中的每个分支指令的分支预测结果的操作将在下文图3a实施例中进行详细阐述。图2是本发明实施例提供的一种计算机设备的结构示意图,图1中的系统架构可以通过图2所示的计算机设备来实现。参见图2,该计算机设备包括至少一个处理器201,通信总线202,存储器203以及至少一个通信接口204。处理器201可以是一个通用中央处理器(centralprocessingunit,cpu),微处理器,特定应用集成电路(application-specificintegratedcircuit,asic),或一个或多个用于控制本申请方案程序执行的集成电路。通信总线202在上述组件之间传送信息。存储器203可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其它类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器203可以是独立存在,通过通信总线202与处理器201相连接。存储器203也可以和处理器201集成在一起。通信接口204,使用任何收发器一类的装置,用于与其它设备或通信网络通信,如以太网,无线接入网(radioaccessnetwork,ran),无线局域网(wirelesslocalareanetworks,wlan)等。在具体实现中,作为一种实施例,处理器201可以包括一个或多个cpu,例如图2中所示的cpu0和cpu1。在具体实现中,作为一种实施例,计算机设备可以包括多个处理器,例如图2中所示的处理器201和处理器205。这些处理器中的每一个可以是一个单核处理器(single-cpu),也可以是一个多核处理器(multi-cpu)。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。在具体实现中,作为一种实施例,计算机设备还可以包括输出设备206和输入设备207。输出设备206和处理器201通信,用于显示信息。输出设备206可以为多种形态的显示设备。例如,输出设备206可以是液晶显示器(liquidcrystaldisplay,lcd),发光二级管(lightemittingdiode,led)显示设备,阴极射线管(cathoderaytube,crt)显示设备,或投影仪(projector)等。输入设备207和处理器201通信,可以以多种方式接收用户的输入。例如,输入设备207可以是鼠标、键盘、触摸屏设备或传感设备等。上述的计算机设备可以是一个通用计算机设备或者是一个专用计算机设备。在具体实现中,计算机设备可以是台式机、便携式电脑、网络服务器、掌上电脑(personaldigitalassistant,pda)、移动手机、平板电脑、无线终端设备、通信设备或者嵌入式设备。本发明实施例不限定计算机设备的类型。其中,存储器203用于存储执行本申请方案的程序代码210,处理器201用于执行存储器203中存储的程序代码210。该计算机设备可以通过处理器201以及存储器203中的程序代码210,来实现下文图3a实施例提供的分支预测方法。图3a是本发明实施例提供的一种分支预测方法的流程图,该方法应用于计算机设备,具体可以应用于计算机设备中的处理器。参见图3a,该方法包括:步骤301:获取当前周期内待执行的指令簇,该指令簇中包括多个有效指令。具体地,可以获取当前周期内待执行的指令簇的地址,基于该指令簇的地址获取该指令簇。其中,获取当前周期内待执行的指令簇的地址时,可以获取正在运行的线程的程序计数器(programcounter,pc)中存放的存储地址,并将获取的存储地址确定为当前周期内待执行的指令簇的地址。其中,基于该指令簇的地址获取该指令簇时,可以将该指令簇的地址作为起始存储地址,获取从该起始存储地址开始的预设数值个连续的存储地址上的指令,所获取的多个指令即可组成该指令簇。其中,预设数值可以预先进行设置,如预设数值可以为4等。需要说明的是,该多个有效指令为该线程在当前周期内运行时所需的指令。当该指令簇是在其相邻的前一个指令簇后依次获取得到时,该多个有效指令为该指令簇中的所有指令;当该指令簇是某个分支指令所跳转到的指令簇时,该多个有效指令为该指令簇中在该分支指令指示的目标存储地址上的指令、该指令簇中的最后一个指令以及目标存储地址上的指令与该最后一个指令之间的指令。步骤302:当该多个有效指令中存在分支指令时,基于该指令簇的地址和该指令簇所属线程的历史分支信息,从pht中获取该指令簇的分支预测信息。需要说明的是,该指令簇所属线程即为步骤301中所述的正在运行的线程,换句话说,该指令簇所属线程即为通过执行该指令簇中的多个有效指令就能够实现其运行的线程。另外,该指令簇所属线程的历史分支信息中包括在运行该线程时所获取的分支指令的分支结果。其中,对于在运行该线程时所获取的每个分支指令,当该分支指令未被执行但已进行分支预测时,该分支指令的分支结果为该分支指令的分支预测结果,当该分支指令已被执行时,该分支指令的分支结果为该分支指令的分支跳转结果。例如,在运行该线程时所获取的指令包括指令1、指令2和指令16,且指令2和指令16均为分支指令,则该线程的历史分支信息中可以包括指令2和指令16的分支结果。假设指令2已被执行,指令16未被执行但已进行分支预测,则该线程的历史分支信息中可以包括指令2的分支跳转结果和指令16的分支预测结果。实际应用中,该线程的历史分支信息可以通过该线程的ghr来进行记录,此时该线程的ghr的每个位上可以记录一个分支结果。再者,pht具有多个表项,每个表项包括分支预测信息和状态信息。分支预测信息用于预测分支指令是否跳转,且当分支预测信息为指定值时,分支预测信息用于指示所有分支指令均被预测不跳转,当分支预测信息不为指定值时,分支预测信息用于指示跳转指令位置,该跳转指令位置为被预测跳转的分支指令的位置。状态信息用于指示该分支预测信息为强状态或弱状态,且该状态信息用于体现该分支预测信息的预测准确度,也即是,当该状态信息为强状态时,表明该分支预测信息的预测准确度较高,当该状态信息为弱状态时,表明该分支预测信息的预测准确度较低。其中,基于该指令簇的地址和该指令簇所属线程的历史分支信息,从pht中获取该指令簇的分支预测信息的操作可以通过如下两种方式实现。第一种方式:基于该指令簇的地址和该指令簇所属线程的历史分支信息,确定索引值;将该索引值作为索引查询pht,得到该指令簇的分支预测信息。其中,基于该指令簇的地址和该指令簇所属线程的历史分支信息,确定索引值时,可以将该指令簇的地址的低位与该指令簇所属线程的历史分支信息通过哈希函数结合在一起,得到索引值。需要说明的是,哈希函数可以包括加法哈希、位运算哈希(如移位、异或等)、乘法哈希、混合哈希等,本发明实施例对此不作限定。另外,索引值可以为pht中存储的与表项对应的值,如图3b所示,此时pht中不仅存储有多个表项,还存储有各个表项对应的索引值;或者,索引值可以为pht包括的表项的地址,本发明实施例对此不作限定。其中,将该索引值作为索引查询该pht,得到该指令簇的分支预测信息时,如果索引值为pht中存储的与表项对应的值,则可以基于该索引值,从pht中获取对应的表项,并将所获取的表项中的分支预测信息确定为该指令簇的分支预测信息;如果索引值为pht包括的表项的地址,则可以将该索引值作为地址,来获取pht中存储在该地址上的表项,并将所获取的表项中的分支预测信息确定为该指令簇的分支预测信息。由于各个指令簇的地址一般是预先设定的,因此,可以将指令簇的地址与pht中的表项进行对应。然而,如果直接将指令簇的地址与pht中的表项进行对应,则pht中的每个表项只能被一个指令簇所使用来进行分支预测,在指令簇的数量较多的情况下,pht的表项也会较多,从而导致pht占用的存储资源较多。为了解决这个问题,通常会将指令簇的地址的低位与pht中的表项进行对应,此时具有相同低位地址的指令簇可以使用pht中的同一表项来进行分支预测,从而可以减少pht中的表项。然而,此时具有相同低位地址的指令簇将会访问和修改pht中的同一表项,从而导致不同指令簇包括的分支指令的分支预测相互干扰。在此情况下,由于某个线程中将要执行的分支指令的分支跳转结果与该线程中在该分支指令之前获取的分支指令的分支结果具有很高的相关性,所以,为了避免不同指令簇包括的分支指令的分支预测相互干扰,可以将指令簇所属线程的历史分支信息与指令簇的地址结合后来访问或修改pht,从而可以使具有相同低位地址的指令簇使用pht中的不同表项来进行分支预测,进而提高分支预测的准确度。综上所述,本发明实施例中可以通过上述第一种方式来从pht中获取该指令簇的分支预测信息。第二种方式:当基于pht对正在运行的多个线程的分支指令进行分支预测时,基于该指令簇的地址、该指令簇所属线程的历史分支信息和该指令簇所属线程的线程标识,从pht中获取该指令簇的分支预测信息。需要说明的是,线程标识用于唯一标识该线程,且该多个线程中每个线程的线程标识可以预先进行设置。具体地,可以基于该指令簇的地址、该指令簇所属线程的历史分支信息和该指令簇所属线程的线程标识,确定索引值;将该索引值作为索引查询pht,得到该指令簇的分支预测信息。其中,基于该指令簇的地址、该指令簇所属线程的历史分支信息和该指令簇所属线程的线程标识,确定索引值时,可以将该指令簇的地址的低位、该指令簇所属线程的历史分支信息与该指令簇所属线程的线程标识通过哈希函数结合在一起,得到索引值。其中,将该索引值作为索引查询该pht,得到该指令簇的分支预测信息的操作与上述第一种方式中将该索引值作为索引查询pht,得到该指令簇的分支预测信息的操作相同,本发明实施例对此不再赘述。由于正在运行的多个线程可以共享一个pht,所以,具有相同低位地址和历史分支信息的线程将会使用pht中的同一表项来进行分支预测,从而导致不同线程的分支指令的分支预测相互干扰。为了解决这个问题,可以将线程的线程标识也作为使用pht中的表项的一个依据,也即是,可以将指令簇的地址、指令簇所属线程的历史分支信息与指令簇所属线程的线程标识结合后来访问或修改pht,从而可以使具有相同低位地址和历史分支信息的线程使用pht中的不同表项来进行分支预测,进而提高分支预测的准确度。综上所述,本发明实施例中可以通过上述第二种方式来从pht中获取该指令簇的分支预测信息。步骤303:基于该指令簇的分支预测信息,确定该多个有效指令中每个分支指令的分支预测结果。具体地,参见图3c,步骤303可以包括如下步骤3031-3036。步骤3031:判断该指令簇的分支预测信息是否为指定值。需要说明的是,指定值可以预先进行设置,且指定值用于指示所有分支指令均被预测不跳转,如指定值可以为00等。当该指令簇的分支预测信息为指定值时,可以继续执行如下步骤3032来确定该多个有效指令中每个分支指令的分支预测结果。当该指令簇的分支预测信息不为指定值时,可以继续执行如下步骤3033来确定该多个有效指令中每个分支指令的分支预测结果。步骤3032:当该指令簇的分支预测信息为指定值时,确定该多个有效指令中所有分支指令的分支预测结果均为不跳转。由于指定值用于指示所有分支指令均被预测不跳转,因此,当该指令簇的分支预测信息为指定值时,可以确定该指令簇中的多个有效指令中的所有分支指令的分支预测结果均为不跳转。例如,指定值为00,该指令簇的分支预测信息为00,则可以确定该指令簇的分支预测信息为指定值。假设该指令簇包括的多个有效指令为指令2、指令3、指令4,且指令3和指令4为分支指令,则可以确定该多个有效指令中的所有分支指令(即指令3和指令4)的分支预测结果均为不跳转。步骤3033:当该指令簇的分支预测信息不为指定值时,确定该指令簇的分支预测信息所指示的跳转指令位置n。需要说明的是,本发明实施例中将跳转指令位置用n表示,跳转指令位置为被预测跳转的分支指令的位置,对于该指令簇来说,跳转指令位置即为按照该指令簇包括的多个有效指令中的所有分支指令的存储地址对该所有分支指令排序时,该指令簇中被预测跳转的分支指令在该所有分支指令中的位置。例如,按照该指令簇包括的多个有效指令中的所有分支指令的存储地址对该所有分支指令进行排序,假设跳转指令位置为2,则该指令簇中被预测跳转的分支指令为该所有分支指令中的第2个分支指令。其中,确定该指令簇的分支预测信息所指示的跳转指令位置(即n)时,可以基于该指令簇的分支预测信息,从存储的分支预测信息与跳转指令位置之间的对应关系中,获取对应的跳转指令位置,获取的跳转指令位置即为该指令簇的分支预测信息所指示的跳转指令位置。例如,该指令簇的分支预测信息为01,则可以基于该指令簇的分支预测信息01,从下表1所示的分支预测信息与跳转指令位置之间的对应关系中,获取对应的跳转指令位置为1,1即为该指令簇的分支预测信息所指示的跳转指令位置。表1分支预测信息跳转指令位置011102…………需要说明的是,本发明实施例中仅以上表1所示的分支预测信息与跳转指令位置之间的对应关系为例进行说明,上表1并不对本发明实施例构成限定。步骤3034:判断该多个有效指令中的分支指令的个数是否小于n。需要说明的是,当该多个有效指令中的分支指令的个数小于n时,表明该多个有效指令中最后一个分支指令的位置尚未达到该指令簇的分支预测信息所指示的跳转指令位置。当该多个有效指令中的分支指令的个数不小于n时,表明该多个有效指令中最后一个分支指令的位置已达到该指令簇的分支预测信息所指示的跳转指令位置。当该多个有效指令中的分支指令的个数小于n时,可以继续执行如下步骤3035来确定该多个有效指令中每个分支指令的分支预测结果。当该多个有效指令中的分支指令的个数不小于n时,可以继续执行如下步骤3036来确定该多个有效指令中每个分支指令的分支预测结果。步骤3035:当该多个有效指令中的分支指令的个数小于n时,确定该多个有效指令中所有分支指令的分支预测结果均为不跳转。当该多个有效指令中的分支指令的个数小于n时,表明该多个有效指令中最后一个分支指令的位置尚未达到该指令簇的分支预测信息所指示的跳转指令位置,则此时可以确定该多个有效指令中所有分支指令的分支预测结果均为不跳转。例如,n为3,该多个有效指令为指令2、指令3、指令4,且指令3和指令4为分支指令,该多个有效指令中的分支指令的个数为2。则此时该多个有效指令中的分支指令的个数小于n,可以确定该多个有效指令中所有分支指令(即指令3和指令4)的分支预测结果均为不跳转。步骤3036:当该多个有效指令中的分支指令的个数不小于n时,按照该多个有效指令的存储地址的顺序,确定该多个有效指令中的第n个分支指令的分支预测结果为跳转,并确定该多个有效指令中的前n-1个分支指令的分支预测结果均为不跳转。当该多个有效指令中的分支指令的个数不小于n时,表明该多个有效指令中最后一个分支指令的位置已达到该指令簇的分支预测信息所指示的跳转指令位置,则此时可以按照该多个有效指令的存储地址的顺序,确定该跳转指令位置上的分支指令(即该多个有效指令中的第n个分支指令)的分支预测结果为跳转,并确定该跳转指令位置之前的位置上的分支指令(即该多个有效指令中的前n-1个分支指令)的分支预测结果均为不跳转。例如,n为2,该多个有效指令按照其存储地址的顺序为指令2、指令3、指令4,且指令3和指令4为分支指令,该多个有效指令中的分支指令的个数为2。则此时该多个有效指令中的分支指令的个数不小于n,可以按照该多个有效指令的存储地址的顺序,确定该多个有效指令中的第2个分支指令(即指令4)的分支预测结果为跳转,确定该多个有效指令中的前1个分支指令(即指令3)的分支预测结果为不跳转。进一步地,确定该多个有效指令中每个分支指令的分支预测结果之后,还可以基于该多个有效指令中每个分支指令的分支预测结果,来更新该指令簇所属线程的历史分支信息,以便后续获取的分支指令的分支预测可以正常进行。其中,基于该多个有效指令中每个分支指令的分支预测结果,更新该指令簇所属线程的历史分支信息的操作将在接下来的实施例中进行详细阐述。更进一步地,确定该多个有效指令中每个分支指令的分支预测结果之后,还可以执行该多个有效指令,得到该多个有效指令中每个分支指令的分支跳转结果,并基于该多个有效指令中每个分支指令的分支跳转结果,来更新该指令簇所属线程的历史分支信息和pht,以保证后续获取的分支指令的分支预测的准确度。其中,基于该多个有效指令中每个分支指令的分支跳转结果,更新该指令簇所属线程的历史分支信息和pht的操作将在接下来的实施例中进行详细阐述。需要说明的是,本发明实施例如果应用于多线程处理器,则对于多线程处理器正在运行的多个线程中的每个线程,均可以通过上述步骤301-303来对该线程的分支指令进行分支预测,此时该多个线程中的每个线程的历史分支信息独立记录,而pht可以被该多个线程所共享,从而可以在保证分支预测的准确度的情况下节省存储资源。在本发明实施例中,获取当前周期内待执行的指令簇后,如果该指令簇包括的多个有效指令中存在分支指令,则开始对该多个有效指令中的分支指令进行分支预测。此时,先基于该指令簇的地址和该指令簇所属线程的历史分支信息,从pht中获取该指令簇的分支预测信息,再基于该指令簇的分支预测信息,确定该多个有效指令中每个分支指令的分支预测结果,从而完成对该多个有效指令中的分支指令的分支预测。本发明实施例中仅从pht中获取一个分支预测信息,就可以得到该多个有效指令中每个分支指令的分支预测结果,从而简化了该多个有效指令中的分支指令的分支预测过程,简化了控制逻辑,进而提高了分支预测效率,并降低了功耗。另外,由于在对该多个有效指令中的分支指令进行分支预测的过程中,仅需访问pht中一个地址上的表项,也即是,在pht具有较少表项的情况下就可以完成分支预测,所以可以减少pht占用的存储资源。需要说明的是,本发明实施例中可以对该指令簇所属线程的历史分支信息进行投机更新和修正更新。如前文所述,步骤303中基于该多个有效指令中每个分支指令的分支预测结果,更新该指令簇所属线程的历史分支信息的操作,即是对该指令簇所属线程的历史分支信息进行投机更新。步骤303中基于该多个有效指令中每个分支指令的分支跳转结果,更新该指令簇所属线程的历史分支信息的操作,即是对该指令簇所属线程的历史分支信息进行修正更新。下面分别对该指令簇所属线程的历史分支信息的投机更新和修正更新进行说明。具体地,该指令簇所属线程的历史分支信息的投机更新,即基于该多个有效指令中每个分支指令的分支预测结果,更新该指令簇所属线程的历史分支信息的操作可以为:在该指令簇所属线程的历史分支信息中,增加该多个有效指令中每个分支指令的分支预测结果,并删除m个存储时间最早的分支结果,m为该多个有效指令中的分支指令的个数。实际应用中,某个线程的历史分支信息往往是由该线程的ghr进行记录的,此时如果得到了该线程的某个分支指令的分支预测结果,则可以将该分支指令的分支预测结果保存到该线程的ghr的最低1位(或最高1位),并将该ghr中原先保存的分支结果均左移(或右移)一位,以将该ghr中存储时间最早的1个分支结果移出该ghr,完成对该ghr的投机更新。例如,该多个有效指令为指令2、指令3、指令4,且指令3和指令4为分支指令。如图3d所示,假设指令3的分支预测结果为不跳转(用0表示),指令4的分支预测结果为跳转(用1表示),则可以将指令3和指令4的分支预测结果保存到该指令簇所属线程的ghr的最低2位,并将该ghr中原先保存的分支结果均左移两位,以将该ghr中存储时间最早的2个分支结果移出该ghr,完成对该ghr的投机更新。具体地,该指令簇所属线程的历史分支信息的修正更新,即基于该多个有效指令中每个分支指令的分支跳转结果,更新该指令簇所属线程的历史分支信息的操作可以为:对于该多个有效指令中的每个分支指令,当该分支指令的分支预测结果与分支跳转结果相同时,不更新该指令簇所属线程的历史分支信息;当该分支指令的分支预测结果与分支跳转结果不同时,获取该分支指令对应的修正分支信息,将该分支指令对应的修正分支信息的最后一个分支结果进行翻转,得到该指令簇所属线程的历史分支信息。其中,将该分支指令对应的修正分支信息的最后一个分支结果进行翻转,是指将该最后一个分支结果更新为相反跳转状态。例如,当该最后一个分支结果为跳转时,将该最后一个分支结果进行翻转,即是将该最后一个分支结果更新为不跳转;当该最后一个分支结果为不跳转时,将该最后一个分支结果进行翻转,即是将该最后一个分支结果更新为跳转。需要说明的是,在基于该多个有效指令中每个分支指令的分支预测结果,对该指令簇所属线程的历史分支信息进行投机更新时,通常是按照该多个有效指令中的分支指令的存储地址的顺序,在该指令簇所属线程的历史分支信息中,依次增加该多个有效指令中每个分支指令的分支预测结果,并依次删除m个存储时间最早的分支结果。也即是,按照该多个有效指令中的分支指令的存储地址的顺序,每在该指令簇所属线程的历史分支信息中增加一个分支指令的分支预测结果,就同时删除一个存储时间最早的分支结果。此时,对于该多个有效指令中的每个分支指令,该分支指令对应的修正分支信息即为在该指令簇所属线程的历史分支信息中增加该分支指令的分支预测结果,并同时删除一个存储时间最早的分支结果时,得到的分支信息。例如,如图3e所示,该指令簇所属线程的历史分支信息为110…101,该多个有效指令中的分支指令按照其存储地址的顺序为指令3、指令4,且指令3的分支预测结果为不跳转(用0表示),指令4的分支预测结果为跳转(用1表示)。则在基于该多个有效指令中每个分支指令的分支预测结果,对该指令簇所属线程的历史分支信息进行投机更新时,可以在该指令簇所属线程的历史分支信息中,依次增加指令3和指令4的分支预测结果,并依次删除2个存储时间最早的分支结果。此时,指令3对应的修正分支信息即为在该指令簇所属线程的历史分支信息中增加指令3的分支预测结果0,并同时删除一个存储时间最早的分支结果1时,得到的分支信息100…010。指令4对应的修正分支信息即为在该指令簇所属线程的历史分支信息中增加指令4的分支预测结果1,并同时删除一个存储时间最早的分支结果1时,得到的分支信息001…101。由于该指令簇所属线程的历史分支信息往往是由该线程的ghr进行记录的,且该历史分支信息用于对分支指令进行分支预测,因此,为了保证在基于该多个有效指令中每个分支指令的分支预测结果,对该ghr进行投机更新后,可以从投机更新后的ghr中获取每个分支指令对应的修正分支信息,本发明实施例中可以在ghr中额外增加第一数值个位,第一数值个位上记录的分支结果不用于对分支指令进行分支预测,即第一数值个位上的信息不是用于对分支指令进行分支预测的历史分支信息,除第一数值个位之外的其它位上记录的分支结果用于对分支指令进行分支预测,即除第一数值个位之外的其它位上的信息是用于对分支指令进行分支预测的历史分支信息。此时,在基于该多个有效指令中每个分支指令的分支预测结果对该ghr进行投机更新时,该多个有效指令中每个分支指令的分支预测结果被保存到该ghr中后,m个存储时间最早的分支结果将不会被移出该ghr,而是移到了第一数值个位上。之后,对于该多个有效指令中的每个分支指令,可以将投机更新后的ghr中以该分支指令的分支预测结果作为最后一个分支结果的第二数值个连续的分支结果组成该分支指令对应的修正分支信息。需要说明的是,第一数值可以预先进行设置,且为了保证后续可以获取到该多个有效指令中每个分支指令对应的修正分支信息,第一数值可以不小于该指令簇包括的指令的个数减1所得的数值,即不小于预设数值减1所得的数值。另外,第二数值为历史分支信息包括的分支结果的个数。例如,如图3f所示,该指令簇所属线程的ghr的虚线框为额外增加的第一数值个位,第一数值个位上记录的分支结果不用于对分支指令进行分支预测,即第一数值个位上的信息不是用于对分支指令进行分支预测的历史分支信息,除第一数值个位之外的其它位(即实线框)上记录的分支结果用于对分支指令进行分支预测,即除第一数值个位之外的其它位上的信息是用于对分支指令进行分支预测的历史分支信息。假设该多个有效指令中的分支指令按照其存储地址的顺序为指令3、指令4,且指令3的分支预测结果为不跳转(用0表示),指令4的分支预测结果为跳转(用1表示),则基于该多个有效指令中每个分支指令的分支预测结果对该ghr进行投机更新后,该ghr中记录的分支结果依次可以为011001…101。其中,第一数值个位上记录的分支结果依次为011,历史分支信息为001…101,且该ghr中最后两位上依次记录指令3和指令4的分支预测结果。则此时可以将投机更新后的ghr中以指令3的分支预测结果0作为最后一个分支结果的第二数值个连续的分支结果组成指令3对应的修正分支信息100…010,将投机更新后的ghr中以指令4的分支预测结果1作为最后一个分支结果的第二数值个连续的分支结果组成指令4对应的修正分支信息001…101。之后,如果指令3的分支预测结果与分支跳转结果不同时,则将指令3对应的修正分支信息100…010的最后一个分支结果0翻转为1,得到该指令簇所属线程的历史分支信息100…011。如果指令4的分支预测结果与分支跳转结果不同时,则将指令4对应的修正分支信息001…101的最后一个分支结果0翻转为1,得到该指令簇所属线程的历史分支信息001…100。进一步地,将该分支指令对应的修正分支信息的最后一个分支结果进行翻转,得到该指令簇所属线程的历史分支信息之后,还可以丢弃在得到该分支指令的分支预测结果后获取的指令,并基于该指令簇所属线程的历史分支信息,对在该分支指令执行后获取的分支指令进行分支预测,基于得到的分支预测结果来继续获取指令,以保证获取的指令的准确度。需要说明的是,本发明实施例中可以对pht进行修正更新。如前文所述,步骤303中基于该多个有效指令中每个分支指令的分支跳转结果,更新pht的操作,即是对pht进行修正更新。下面对pht的修正更新进行说明。具体地,pht的修正更新,即基于该多个有效指令中每个分支指令的分支跳转结果,更新pht的操作可以包括如下四种情况。其中,当该多个有效指令中的所有分支指令的分支预测结果和分支跳转结果均为不跳转时,或者当该多个有效指令中分支预测结果为跳转的分支指令的分支跳转结果为跳转时,也即是,当该多个有效指令中的分支指令的分支预测正确时,基于该多个有效指令中每个分支指令的分支跳转结果,更新pht的操作可以包括如下第一种情况和第二种情况。第一种情况:如果pht中该指令簇的分支预测信息所在表项中的状态信息指示强状态,则不对该表项进行更新。当pht中该指令簇的分支预测信息所在表项中的状态信息指示强状态时,表明该表项中的分支预测信息的预测准确度较高。则在该多个有效指令中的分支指令的分支预测正确时,可以不对该指令簇的分支预测信息所在表项进行更新。第二种情况:如果pht中该指令簇的分支预测信息所在表项中的状态信息指示弱状态,则将该表项中的状态信息更新为指示强状态的状态信息。当pht中该指令簇的分支预测信息所在表项中的状态信息指示弱状态时,表明该表项中的分支预测信息的预测准确度较低。则在该多个有效指令中的分支指令的分支预测正确时,可以将该表项中的状态信息更新为指示强状态的状态信息,以增高该表项中的分支预测信息的预测准确度。其中,当该多个有效指令中的所有分支指令的分支预测结果均为不跳转且该多个有效指令中存在分支指令的分支跳转结果为跳转时,或者当该多个有效指令中分支预测结果为不跳转的分支指令的分支跳转结果为跳转时,也即是,当该多个有效指令中的分支指令的分支预测不正确时,基于该多个有效指令中每个分支指令的分支跳转结果,更新pht的操作可以包括如下第三种情况和第四种情况。第三种情况:如果pht中该指令簇的分支预测信息所在表项中的状态信息指示强状态,则将该表项中的状态信息更新为指示弱状态的状态信息。当pht中该指令簇的分支预测信息所在表项中的状态信息指示强状态时,表明该表项中的分支预测信息的预测准确度较高。则在该多个有效指令中的分支指令的分支预测不正确时,可以将该表项中的状态信息更新为指示弱状态的状态信息,以降低该表项中的分支预测信息的预测准确度。第四种情况:如果pht中该指令簇的分支预测信息所在表项中的状态信息指示弱状态,则将该表项中的分支预测信息更新为用于指示该指令簇的跳转指令位置的分支预测信息。需要说明的是,该指令簇的跳转指令位置为按照该多个有效指令的存储地址对该多个有效指令排序时,该多个有效指令中分支跳转结果为跳转的分支指令在该多个有效指令中的所有分支指令中的位置。当pht中该指令簇的分支预测信息所在表项中的状态信息指示弱状态时,表明该表项中的分支预测信息的预测准确度较低。则在该多个有效指令中的分支指令的分支预测不正确时,可以将该表项中的分支预测信息更新为用于指示该指令簇的跳转指令位置的分支预测信息,以更新该表项中的分支预测信息所指示的跳转指令位置。下面结合图3g来对上述四种情况下的pht更新过程进行说明。如图3g所示,假设该多个有效指令按照其存储顺序为指令2、指令3、指令4,且指令2、指令3和指令4为分支指令。pht包括八种表项,该八种表项分别为000、001、010、011、100、101、110、111,各个表项中的最高2位为分支预测信息,且分支预测信息00用于指示所有分支指令均被预测不跳转,分支预测信息01、10、11分别用于指示跳转指令位置1、2、3。各个表项中的最低1位为状态信息,且状态信息0、1分别用于指示弱状态、强状态。pht中的八种表项可以基于上述四种情况中的操作进行更新,该更新过程具体在图3g中示出,其中,t0表示该多个有效指令中的所有分支指令的分支跳转结果均为不跳转,t1表示该多个有效指令中的第1个分支指令(即指令2)的分支跳转结果为跳转,t2表示该多个有效指令中的第2个分支指令(即指令3)的分支跳转结果为跳转,t3表示该多个有效指令中的第3个分支指令(即指令4)的分支跳转结果为跳转。例如,对于pht中的表项001,如果该表项中的分支预测信息00为该指令簇的分支预测信息,则基于该指令簇的分支预测信息00,可以确定该多个有效指令中的所有分支指令的分支预测结果均为不跳转。此时由于该表项中的状态信息1用于指示强状态,所以如果该多个有效指令中的所有分支指令的分支跳转结果均为不跳转(即t0),则不对该表项进行更新。如果该多个有效指令中存在分支指令的分支跳转结果为跳转(即t1/t2/t3),则将该表项中的状态信息更新为指示弱状态的状态信息,即将该表项更新为000。同理,pht中的其它表项也可以基于上述四种情况中的操作进行更新。图4a是本发明实施例提供的一种分支预测装置的结构示意图,该分支预测装置可以由软件、硬件或者两者的结合实现成为计算机设备的部分或者全部,该计算机设备可以为图2所示的计算机设备。该分支预测装置可以以功能模块的形式来呈现,此时该分支预测装置中的各个功能模块可以通过图2中的处理器和存储器来实现,处理器能够执行或者控制其他器件完成本发明实施例的方法流程中的各步骤,实现各功能。参见图4a,该装置包括第一获取模块401,第二获取模块402和确定模块403。第一获取模块401,用于执行图3a实施例中的步骤301;第二获取模块402,用于执行图3a实施例中的步骤302;确定模块403,用于执行图3a实施例中的步骤303。可选地,参见图4b,第二获取模块402包括第一确定单元4021和查询单元4022。第一确定单元4021,用于基于指令簇的地址和指令簇所属线程的历史分支信息,确定索引值;查询单元4022,用于将索引值作为索引查询pht,得到指令簇的分支预测信息。可选地,参见图4c,确定模块403包括第二确定单元4031,第三确定单元4032,第四确定单元4033和第五确定单元4034。第二确定单元4031,用于执行图3a实施例中的步骤3032;第三确定单元4032,用于执行图3a实施例中的步骤3033;第四确定单元4033,用于执行图3a实施例中的步骤3035;第五确定单元4034,用于执行图3a实施例中的步骤3036。可选地,参见图4d,该装置还包括第一更新模块404。第一更新模块404,用于在指令簇所属线程的历史分支信息中,增加多个有效指令中每个分支指令的分支预测结果,并删除m个存储时间最早的分支结果,m为多个有效指令中的分支指令的个数。可选地,pht的表项包括分支预测信息和状态信息,状态信息用于指示分支预测信息为强状态或弱状态;参见图4e,该装置还包括执行模块405,第二更新模块406和第三更新模块407。执行模块405,用于执行多个有效指令,得到多个有效指令中每个分支指令的分支跳转结果;第二更新模块406,用于执行图3a实施例中的步骤303中的第一种情况和第二种情况;第三更新模块407,用于执行图3a实施例中的步骤303中的第三种情况和第四种情况。可选地,第二获取模块402用于执行图3a实施例中的步骤302中的第二种方式。在本发明实施例中,获取当前周期内待执行的指令簇后,如果该指令簇包括的多个有效指令中存在分支指令,则开始对该多个有效指令中的分支指令进行分支预测。此时,先基于该指令簇的地址和该指令簇所属线程的历史分支信息,从pht中获取该指令簇的分支预测信息,再基于该指令簇的分支预测信息,确定该多个有效指令中每个分支指令的分支预测结果,从而完成对该多个有效指令中的分支指令的分支预测。本发明实施例中仅从pht中获取一个分支预测信息,就可以得到该多个有效指令中每个分支指令的分支预测结果,从而简化了该多个有效指令中的分支指令的分支预测过程,简化了控制逻辑,进而提高了分支预测效率,并降低了功耗。另外,由于在对该多个有效指令中的分支指令进行分支预测的过程中,仅需访问pht中一个地址上的表项,也即是,在pht具有较少表项的情况下就可以完成分支预测,所以可以减少pht占用的存储资源。需要说明的是:上述实施例提供的分支预测装置在分支预测时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的分支预测装置与分支预测方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digitalsubscriberline,dsl))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digitalversatiledisc,dvd))、或者半导体介质(例如:固态硬盘(solidstatedisk,ssd))等。以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1