专利名称:实现现代处理器间接转移预测的装置及方法
技术领域:
本发明涉及现代微处理器及其应用系统的设计,尤其涉及实现现代处理器间接转移指令的预测的装置及方法。
背景技术:
现代高性能处理器利用分支指令预测技术开发指令级并行,从而提高处理器性能。之前的研究主要集中在开发高准确率的直接转移指令预测技术,而对于间接转移指令预测,通常很难达到较高的准确率。近年来,随着面向对象语言程序的广泛应用,间接转移指令使用的场合也更多了起来。该类型指令通常用于实现虚函数指针、函数指针以及 Switch-Case语句等常见的数据结构。此外,Intel Pentium M处理器中也已经加入了专用的间接转移预测部件。因此,提高间接转移预测的准确率,对处理器性能的提升具有重要意义。间接转移指令的转移目标地址保存在其指令指定的寄存器中,该寄存器中的值可能会随着程序的执行而发生各种变化,即可能存在多个转移目标地址。现代处理器通常使用分支目标缓冲器(BTB,Branch Target Buffer)和方向预测器对分支指令进行预测。其中,BTB用来负责记录分支转移指令的目标地址,而方向预测器则用来预测该分支转移指令执行的方向,即预测是否进行转移。然而,这种传统的分支转移预测方式对直接转移有着很高的分支转移预测效率,但是对间接转移指令的预测准确率却很低。首先,是由于方向预测器总是预测跳转与否(在使用预译码的处理器中,间接转移指令必定会跳转,故分支方向预测器不必对该类指令的方向进行预测);其次,由于BTB结构是一种缓存(Cache)结构, 其记录的每个目标地址只能使用指令地址进行索引,即每个分支指令最多只有一个目标地址与之对应,如图1所示。因此,BTB结构只能记录最近一次间接转移指令的目标地址。当间接转移指令拥有多个目标地址时,BTB的预测准确率会很低。已有的一些使用专用部件的间接转移预测技术,可以有效地提升间接转移预测准确率。Chang等人提出的TTC结构,使用记录在全局历史寄存器(GHR,Global History Register)中的分支转移历史信息区分不同的间接转移场景,并使用一个类似Cache结构的专用结构记录各个间接转移场景下间接转移目标地址及其索引,如图2所示,其设计类似两级分支预测方案(即异或器XOR前的一级与XOR后的一级)。当取得一条间接转移指令时,TTC预测器(其结构如图2所示右端)通过异或器XOR获取程序计数器(PC)和分支转移历史信息(GHR)的异或值作为索引,获得预测的目标地址。当该间接转移指令提交时, 使用正确的目标地址更新对应的TTC项。通过组合使用多个目标地址预测器,Driesen等人提出了另一种直接地址预测技术,即Cascade预测器。该方法对于可简单预测(只有一个目标地址)的间接转移指令使用简单的一级预测器预测(通常为BTB结构),而对于拥有多个目标地址的间接转移指令,使用复杂的二级或多级预测器进行预测。kznec和Michaud提出了与该设计非常类似的一种预测器,由一个基础预测器及一系列能够捕捉非常长的历史信息的预测表组成;在预测时,选择历史信息最长的预测表中的命中项值作为输出结果。虚拟程序计数器(VPC,Virtual Program Counter)预测技术,侧重于使用已有的条件转移预测部件进行间接转移预测,它是将一条具多个目标地址的间接转移指令的每个目标地址等价地表示成一个虚拟的条件分支转移指令的转移目标地址;当进行间接转移指令预测时,VPC每个周期以不同的虚拟分支指令循环访问条件分支预测器,如图3所示,直到一条虚拟指令被预测为发生或达到循环访问的上界时才停止预测。该VPC技术的效果, 与流水线的长度以及间接转移目标地址的数目密切相关。以上研究提出的基于硬件的间接转移预测技术,使用分支转移历史信息(GHR)区分不同的间接转移场景,并直接将对应不同转移场景的目标地址保存在一个专用的存储部件中。这种使用专用部件一类技术的预测速度较快,但其额外的存储单元需求会在芯片中占用一定面积,并产生大量的能耗。而侧重使用已有分支预测部件的VPC技术虽可以取得较高的预测准确率,但这种需要多次循环才能完成一次间接转移的预测,一方面会阻碍处理器性能的进一步提升,另一方面会带来更多的能耗开销,从而导致处理器的能效性降低。
发明内容
本发明所要解决的技术问题是提供一种实现现代处理器间接转移预测的装置及方法,能够在提高预测准确率的同时提高处理器的能效性。为了解决上述技术问题,本发明提供了一种实现现代处理器间接转移预测的装置,包括方向预测器、组-路指针寄存器以及分支目标缓冲器,其中方向预测器,用于在预测间接转移指令方向的同时选择模式历史记录的第一次访问索引和第二次访问索引,并通过该模式历史记录生成及输出相应的组-路指针;组-路指针寄存器,用于保存模式历史记录输出的组-路指针;分支目标缓冲器,用于建立子块和分配项,其中,子块为每一间接转移指令分配通过组-路指针索引的目标地址项;分配项用于记录每一间接转移指令目标地址项的使用情况。进一步地,模式历史记录生成的组-路指针为4位,通过每一表项的2个记录项分别保存生成的2位的组指针和2位的路指针并输出;组-路指针寄存器保存模式历史记录输出的4位组-路指针。进一步地,该装置还包括一移位器和一索引寄存器,方向预测器还包括一全局历史寄存器和一异或器;其中异或器,用于获取全局历史寄存器之值与程序计数器之值的异或值,作为模式历史记录的第一次访问索引;通过移位器将异或值左移一位的值作为模式历史记录的第二次访问索引。进一步地,方向预测器还包括第一多选器,其中分支目标缓冲器在预测的第一周期通过程序计数器被访问时,如果访问命中,则输出分配项;如果访问未命中,则通过预测程序中止并暂停流水线,直到所述间接转移完成;方向预测器在预测的第一周期通过第一多选器选择第一次访问索引,模式历史记录据第一次访问索引的索引结果作为所述组-路指针中的路指针获取,将该路指针与假设为0的组指针构成4位临时的组-路指针,分别通过2个记录项保存4位临时的组-路指针并输出;组-路指针寄存器保存模式历史记录输出的4位临时的组-路指针。进一步地,分支目标缓冲器的子块在预测的第二周期通过程序计数器作为标签被访问时, 如果访问命中,即该标签和间接转移指令的地址匹配,则从组-路指针寄存器获取临时的组-路指针,将通过该临时的组-路指针索引的目标地址项所存储的目标地址作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;方向预测器在预测的第二周期通过第一多选器选择第二次访问索引,模式历史记录据第二次访问索引的索引结果作为组-路指针中的组指针获取,将该组指针与上一周期获取的所述路指针组合成4位完整的组-路指针,通过2个记录项项保存组合成的所述4 位完整的组-路指针并输出;组-路指针寄存器保存模式历史记录输出的4位完整的组-路指针。进一步地,分支目标缓冲器的子块在预测的第三周期通过程序计数器作为标签被访问时,如果访问命中,则从组-路指针寄存器获取完整的组-路指针,将通过该完整的组-路指针索引的目标地址项所存储的目标地址作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;如果上一周期已发射目标地址,则之前发射的目标地址将被新发射的目标地址取代;如果访问未命中,则继续使用最近的已被发射的目标地址进行预测。进一步地,分支目标缓冲器的子块通过完整的组-路指针被访问时,若组-路指针中的组指针仍为0,则将分支目标缓冲器当前的访问位置作为该组-路指针指向的目标地址发射到流水线和指令缓存中。进一步地,该装置还包括一训练循环计数器和第二多选器,其中训练循环计数器,用于输出循环计数值;第二多选器,用于在预测时选择模式历史记录生成的组-路指针输出,在出现预测错误时选择训练循环计数器输出的循环计数值作为更新的组-路指针输出;组-路指针寄存器保存第二多选器选择输出的由模式历史记录生成的组-路指针或更新的组-路指针。分支目标缓冲器将分配项作为遍历间接转移指令全部已分配的目标地址项的依据,遍历情况用于作为更新分配项或组-路指针的依据。为了解决上述技术问题,本发明提供了一种实现现代处理器间接转移预测的方法,涉及方向预测器和分支目标缓冲器,该方法包括在分支目标缓冲器中建立子块,其中,子块为每一间接转移指令分配通过所述组-路指针索引的目标地址项;分配项用于记录每一间接转移指令目标地址项的使用情况;在预测时,为方向预测器中的模式历史记录选择第一次访问索引和第二次访问索弓I,使得该模式历史记录生成相应的组-路指针;通过组-路指针索引访问分支目标缓冲器的目标地址项。进一步地,在预测时,为方向预测器中的模式历史记录选择第一次访问索引和第二次访问索引,使得该模式历史记录生成相应的组-路指针,具体包括获取全局历史寄存器之值与程序计数器之值的异或值,作为第一次访问索引;将该异或值左移一位的值作为第二次访问索引;方向预测器在预测的第一周期选择第一次访问索引,模式历史记录据第一次访问索引的索引结果作为组-路指针中的路指针获取,将该路指针与假设为O的组指针构成4 位临时的组-路指针,分别通过2个记录项保存4位临时的组-路指针并输出;方向预测器在预测的第二周期选择第二次访问索引,模式历史记录据第二次访问索引的索引结果作为组-路指针中的组指针获取,将该组指针与上一周期获取的路指针组合成4位完整的组-路指针,通过2个记录项项保存组合成的所述4位完整的组-路指针并输出。进一步地,通过组-路指针索引访问分支目标缓冲器的所述目标地址项,具体包括分支目标缓冲器在预测的第一周期通过程序计数器作为标签被访问时,如果访问命中,即标签和间接转移指令的地址匹配,则输出分配项;如果访问未命中,则通过预测程序中止并暂停流水线,直到间接转移完成;分支目标缓冲器的子块在预测的第二周期通过程序计数器作为标签被访问时,如果访问命中,则通过获取的临时的组-路指针索引的目标地址项所存储的目标地址,作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;分支目标缓冲器的子块在预测的第三周期通过程序计数器作为标签被访问时,如果访问命中,则通过获取的完整的组-路指针索引的目标地址项所存储的目标地址,作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;如果上一周期已发射目标地址,则之前发射的目标地址将被新发射的目标地址取代;如果访问未命中,则继续使用最近的已被发射的目标地址进行预测。进一步地,分支目标缓冲器的子块通过完整的组-路指针被访问时,若组-路指针中的组指针仍为0,则将当前的访问位置作为该组-路指针指向的目标地址发射到流水线和指令缓存中。进一步地,该方法还包括在出现预测错误时选择一训练循环计数器输出的循环计数值作为更新的组-路指针;分支目标缓冲器将所述分配项作为遍历间接转移指令全部已分配的目标地址项的依据,遍历情况用于作为更新分配项或组-路指针的依据;遍历情况及其更新包括以下三种中任意一种第一种,遍历时一旦出现使用一个组-路指针访问分支目标缓冲器而未命中的情况,则将分配项中的对应位更新为未使用状态;第二种,遍历时如果一个目标地址项中的目标地址与正确的目标地址相同,则更新相应的组-路指针指向该目标地址项,包括分别针对组指针和路指针进行更新,并存入相应的2个记录项中;第三种,遍历时如果遍历全部已分配的目标地址项后,没有找到与正确地址匹配的目标地址项,则根据分配项中的信息,随机地分配一个新的目标地址项或替换一项已使用的目标地址项来记录正确的目标地址,并更新相应的组-路指针指向该目标地址项,包括分别针对组指针和路指针进行更新,并存入相应的2个记录项中。本发明基于组路指针的间接转移预测技术,通过使用指针结构将快速、高准确率的TTC结构融入到现有的分支预测部件中,对已有的PHT和BTB部件进行拓展和重定义, 将间接转移目标地址保存在BTB中,而将用于索引该目标地址的组-路指针定义及保存在 PHT中。本发明通过组-路指针可以快速获得其所指向的数据。这种通过指针获得数据的方式,只需花费较小的时间开销(与直接获得数据的时间开销相近)就能获得;并且,更新逻辑较为简单;在不需要大容量存储结构支持的基础上,可取得与直接地址预测相类似的预测效果,由此可提高处理器的能效性。
图1为现有的BTB结构的目标地址预测机制示意图;图2为现有的TTC结构与BTB关系示意图(左)以及TTC内部结构示意图(右);图3为现有的采用VPC技术的预测流程图;图4为本发明的将BTB结构与TTC结构进行融合的结构示意图;图5为本发明的间接转移指令预测装置实施例预测工作的示意图;图6为本发明的间接转移预测装置的BTB中目标地址项与子块的排布方式示意图;图7为本发明的实现间接转移预测的方法实施例中预测周期示意图;图8为本发明的间接转移指令的预测装置实施例的硬件结构示意图;图9为是用来说明如何使用本发明的基于组-路指针索引的间接转移指令的预测方法及装置而给出的Perlbench程序实例;图10为本发明的间接转移指令的预测方法实施例的流程图。
具体实施例方式以下结合附图和优选实施例对本发明的技术方案进行详细地说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明的技术方案。本发明提供的实现现代处理器间接转移预测的方法及装置,具有以下三个关键点。1)如何将同一间接转移指令的多个目标地址存入目标地址预测结构中;2)如何辨识不同的间接转移场景,并与目标地址相对应3)当发生预测错误时如何进行更新。针对上述三个问题,本发明分别采用以下方式予以解决(1)同一间接转移指令的多目标地址映射本发明通过使用组-路指针来标识目标地址在BTB中的位置,以区分和访问BTB 中一个间接转移指令所对应的多个目标地址。
传统的BTB结构的访问只能使用PC对目标地址进行索引,因此对于一个间接转移指令只能访问到其最近转移的一目标地址。本发明为了将一个间接转移指令的多个目标地址映射保存在BTB中的不同位置, 将BTB结构中目标地址的索引改进为一个二维数组,即BTB中的每个目标地址的位置由组 (Set)和路(Way) 二维信息所标识,该二维信息称为组-路指针。为了使用尽可能短的组-路指针来标识目标地址在BTB中的位置,本发明将存储一个间接转移指令的多个目标地址的BTB项称为目标地址项,如图5所示,这些目标地址项被集中分配在一块BTB区域内,该区域称为“子块”。每个子块使用PC进行索引,每个子块其列由多个连续的Set标识及索引,其行则由多个连续的Way标识及索引。由此,一个目标地址项由子块中的kt、Way 二维信息及PC低位索引,由此使得目标地址索引的开销大大地缩短了。本发明根据程序运行时遇到的间接转移目标地址的数目,动态地在子块中分配相应数目的未使用的目标地址项,每个目标地址项的访问标签(Tag)与该间接转移指令的高位相同。通过以往分析和本文评测结果表明,通常大多数间接转移指令的目标地址不会超过16个。基于这种情况,本发明为一条间接转移指令最多会分配16个目标地址项。如果一条间接转移指令的目标地址超过16个,则将最新遇到的目标地址替换已有的目标地址项, 即以最新遇到目标地址来刷新一已有的目标地址项。由于程序运行时可能占用多个目标地址项,本发明通过使用一个分配项(如图5 中所示)来记录每个间接转移指令目标地址项的使用情况,譬如通过一个16位的寄存器作为分配项,其中每一位对应于转移指令的一目标地址项的使用情况,如值1为使用,值0为未使用。为了在预测时尽快确认BTB中是否存在该间接转移指令的目标地址项,将分配项放置在BTB中处于子块外而由PC直接索引的Set中,如图6的左边所示,而将子块的索引设置为PC+4。以一个4路组相联BTB为例,若BTB中一个子块由4个连续的Set构成,则该子块使用的索引设为PC+4,该子块中的16个目标地址项由4位组-路指针索引,其高2 位用于标识子块中的组Get)号信息,称为“组指针”,其低2位用于标识该目标地址项在子块中的路(Way)号信息,称为“路指针”。图6的右边表示间接转移目标的分散排布,它是实现本发明的优选排布方案;图6的左边表示间接转移目标的集中排布。(2)间接转移场景的映射本发明根据不同的间接转移场景(可通过分配项的不同记录结果表示)预测指向 BTB中一个目标地址项的组-路指针。现代处理器中通常使用基于模式历史记录(PHT,Pattern History Table)的方向预测器预测分支转移方向。由于PHT结构与TTC结构二者的索引生成方式完全一致,因此本发明可借用PHT中的存储空间保存索引BTB中目标地址项的组-路指针而复用PHTjB 图5所示。原有PHT中使用2位饱和计数器预测该分支转移场景下的转移方向,本发明通过对PHT的表项进行重定义,将4位组-路指针保存在PHT中每个表项的2个PHT项中,一项保存组Get)指针,另一项保存路(Way)指针。 本发明为了索引生成的简便,将路指针保存在异或器XOR输出(PC与GHR相异或的值)的项中,而将组指针保存在异或器XOR输出左移一位(PC与GHR相异或的值<< 1) 的项中。
10
(3)更新机制如果间接转移指令提交时发现预测正确,本发明对BTB的操作与条件转移指令更新BTB时相同。一旦发现预测错误,本发明需要更新PHT中存储的组-路指针,以使间接转移场景映射到BTB中正确的目标地址项。本发明的预测可能会产生如下两类错误1)组-路指针错误BTB中一个目标地址项已存放了正确的间接转移地址,但组-路指针映射到了其它目标地址项;该情况主要是由于PHT中条件转移方向预测与指针预测信息的别名冲突所致。2)组路指针无意义BTB中没有目标地址项存储正确目标地址,因此获得的组-路指针无意义;该情况主要是由于BTB中记录间接转移目标地址时的义务失效所致。为了能够区分这两种情况并据此更新分配项,本发明需要根据分配项中的记录, 遍历BTB中该间接转移指令全部已分配的目标地址项。该遍历过程可能需要多个周期完成,然而,由于本发明只需访问那些已分配的目标地址项(根据分配记录项中记录的信息获知),它相比于VPC技术需要遍历全部间接转移目标地址的存储项而言,已较大幅降低了更新所需花费的时间代价。本发明在上述遍历过程中通过依次生成组-路指针,遍历已分配的目标地址项1)对分配项的更新遍历时,一旦出现使用某个组-路指针访问BTB而未命中的情况,说明其索引的目标地址项已被其他分支指令替换,此时需要将分配项中的对应位更新为未使用状态。2)组-路指针错误情况下的更新遍历时,如果某个目标地址项中目标地址与正确目标地址相同,则更新组-路指针指向该目标地址项将组-路指针的4位分为2部分,分别更新及存入PHT中的2个对应项中。3)无意义指针情况下的更新遍历时,如果遍历全部的地址仍没有发现与正确地址匹配的目标地址项,则需要根据分配项中的信息,随机分配一个新的目标地址项或替换一项已使用的目标地址项来记录正确的目标地址,并更新相应的组-路指针。本发明提供的实现现代处理器间接转移预测的方法及装置实施例,使用指针结构将快速、高准确率的TTC结构融入到现有的分支预测部件中,如图4所示,通过指针结构对已有的TTC和方向预测器中的PHT部件进行拓展和重定义,在不需要大容量存储结构支持的基础上,以与已有的间接转移预测技术类似的时间代价,换取同时提高预测准确率和处理器能效的效果。如图7所示,表示了本发明的方法实施例经过准备周期(周期0)后进行间接转移预测的周期,包括第一个周期(周期1),同时访问BTB和方向预测器的PHT,该访问操作与条件分支指令的访问时间相同。在本周期内,对BTB的访问结果用来判断该间接转移的目标地址是否保存在BTB 中,如果访问BTB命中,则BTB输出为记录子块中目标地址项使用情况的分配项(Lfu-inf); 如果访问BTB未命中,则说明这个间接转移指令没有遇到过,此时,预测程序中止并暂停流水线直到间接转移完成。在本周期内,通过索引0对方向预测器的PHT的访问结果作为组-路指针的路指针。本发明采用一种预测加速机制,用以加快预测的组路指针中组指针为0的情况本周期假设尚未得到的组指针为0,由此与获得的低位路指针(Way)组成一个临时的组-路指针, 如图7周期1中所示。第二个周期(周期2),使用临时的组路指针访问BTB,并通过改变索引(索引1) 再次访问方向预测器PHT。在本周期内,如果访问BTB命中,即标签域和间接转移地址匹配,则将BTB中存储的目标地址作为预测的间接转移指令的目标地址发射到流水线和指令缓存中。反之,如果访问BTB未命中,则忽略BTB输出。在本周期内,PHT输出作为组指针(Set);在本周期末,将该组指针与上一周期获取的路指针组合,获取完整的组-路指针(Set-Way)。需要注意的是,在本周期如果PHT组指针输出为0,则当前BTB访问位置即为该组路指针指向的位置,这意味着预测成功及其所存储的目标地址在本周期已经被取出,因而可以提前结束此次间接转移预测。在第三个周期(周期幻,使用上一周期获得的完整组-路指针访问BTB。在本周期内,如果访问BTB命中,则使用对应的目标地址项所保存的目标地址作为间接转移预测地址发射到流水线和指令缓存中;如果上周期已向流水线发射目标地址, 则之前发射的目标地址将被新目标地址取而代之。如果访问BTB未命中,则继续使用最近那个已经被发射到流水线和指令缓存中预测的目标地址。至此,一个完全的间接转移指令预测完成。如图8所示,表示了本发明提供的实现现代处理器间接转移预测的装置实施例, 包括方向预测器、组-路指针寄存器以及BTB,其中方向预测器,用于在预测间接转移方向的同时,选择PHT的第一次访问索引和第二次访问索引,并通过PHT生成及输出相应的组-路指针;组-路指针寄存器,用于保存PHT输出的组-路指针;BTB,用于建立子块和分配项,该子块为每一间接转移指令分配通过组-路指针索引的目标地址项;该分配项记录每一间接转移指令的目标地址项的使用情况。PHT生成的组-路指针为4位,通过每一表项的2个PHT记录项分别保存生成的2 位的组(Set)指针和2位的路(Way)指针并输出;组-路指针寄存器保存方向预测器输出的4位组-路指针。在上述装置实施例中,还包括一移位器和一索引寄存器,方向预测器还包括一全局历史寄存器(GHR)和一异或器M)R ;其中方向预测器通过该XOR获取该GHR与PC的异或值作为第一次访问索引,即索引0 ; 并通过该移位器将该GHR与PC的异或值左移一位的值作为第二次访问索引,即索引1。在上述装置实施例中,方向预测器还包括第一多选器,其中BTB在预测的第一周期通过PC作为标签被访问时,如果访问命中,即该标签和间接转移指令的地址匹配,则输出作为记录子块中目标地址项使用情况的分配项(Lfu-inf, 即最少使用频度信息);如果访问未命中,则通过预测程序中止并暂停流水线直到间接转移完成;方向预测器在预测的第一周期通过该多选器选择索引0,PHT据索引0生成组指针设为0及路指针为索引结果的临时的组_路指针,通过2个PHT项保存及输出该临时的组-路指针;组-路指针寄存器保存PHT生成的4位临时的组-路指针。在上述装置实施例中,BTB的子块在预测的第二周期通过PC作为标签被访问时,如果访问命中,即该标签和间接转移指令的地址匹配,则从组_路指针寄存器获取临时的组_路指针,将通过该组_路指针索引的目标地址项所存储的目标地址,作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;方向预测器在预测的第二周期通过该多选器选择索引1,PHT据索引1生成组-路指针中的组指针,将该组指针与上一周期获取的路指针组合,生成完整的组_路指针,通过 2个PHT项保存及输出该完整的组-路指针;组-路指针寄存器保存PHT生成的4位完整的组-路指针。在上述装置实施例中,BTB的子块在预测的第三周期通过PC作为标签被访问时,如果访问命中,则从组_路指针寄存器获取上一周期生成的完整的组_路指针,将通过该组_路指针索引的目标地址项所存储的目标地址作为预测的间接转移指令的目标地址发射到所述流水线和指令缓存中;如果上周期已向流水线发射目标地址,则之前发射的目标地址将被新发射的目标地址取而代之;如果访问未命中,则继续使用最近的已被发射到流水线和指令缓存中预测的目标地址。BTB的子块中目标地址项通过上一周期生成的完整的组-路指针被访问时,若其中的组指针输出仍为0,则将当前BTB访问位置作为该组路指针指向的目标地址发射到流水线和指令缓存中。这意味着预测成功及其所存储的目标地址在本周期已经被取出,因而可提前结束此次间接转移预测。在上述装置实施例中,还包括一训练循环计数器和第二多选器,其中训练循环计数器,用于输出循环计数值;第二多选器,用于在预测时选择输出方向预测器的PHT生成的组-路指针,在出现预测错误时选择输出训练循环计数器输出的循环计数值作为更新的组_路指针;组-路指针寄存器保存第二多选器选择输出的由PHT生成的组_路指针或更新的组_路指针;BTB的分配项的记录用于作为遍历间接转移指令全部已分配的目标地址项的依据,遍历情况用于作为更新分配项或组-路指针的依据,遍历情况及其更新包括以下三种中任意一种第一种,遍历时一旦出现使用某个组_路指针访问BTB而未命中的情况,则将分配项中的对应位更新为未使用状态;第二种,遍历时如果一个目标地址项中的目标地址与正确的目标地址相同,则更新相应的组_路指针指向该目标地址项,包括分别针对组指针和路指针进行更新,并存入相应的2个PHT项中;
第三种,遍历时如果遍历全部已分配的目标地址项后,没有发找到与正确地址匹配的目标地址项,则根据分配项中的信息,随机地分配一个新的目标地址项或替换一项已使用的目标地址项来记录正确的目标地址,并更新相应的组_路指针指向该目标地址项, 包括分别针对组指针和路指针进行更新,并存入相应的2个PHT项中。如图9所示,是本发明给出的SPEC CPU 2006中的Perlbench程序实例,用来说明如何使用本发明的基于组_路指针索引的间接转移指令的预测方法及装置。 图9所示的Perlbench程序模拟了一个与操作系统无关的实用摘录和报告语言 (PERL, Practical Extraction and Reporting Language)解释器的程序片段,该程序片段中函数指针(sortsvp)调用对应一条间接转移指令(jsr$26,($27),0);随着程序的执行, 位于程序中第13行的条件转移指令(即if语句)执行的不同结果,会对应不同的函数指针,即对应不同的间接转移目标($27的值不同)。该程序在被执行时,使用本发明进行间接转移预测的流程,如图10所示。当取得该间接转移指令时在第一周期,同时访问方向预测器和BTB。BTB的访问结果用来判断该间接转移目的地址是否保存在BTB中,若访问BTB命中,则输出分配项信息;在本周期通过第一次访问索引(PC XOR GHR)访问方向预测器的PHT,得到组-路指针中的路指针,并假设尚未得到的组指针为0,由此与获得的低位路指针组成一个临时的组_路指针。在第二周期,通过使用临时的组路指针访问BTB进行预测,并改变索引为第二次访问索引(PC XOR GHR << 1)再次访问方向预测器的PHT ;若访问BTB命中,则将对应的目标地址项中存储的目标地址作为间接预测地址发射到流水线和指令缓存中;反之,若访问 BTB未命中,则忽略BTB输出;在本周期通过第二索引访问PHT,得到的组路指针中的组指针,并在本周期末,将得到的组指针与上一周期获取的路指针组合获得完整的组-路指针。需要注意的是,若第13行的if指令中的条件为假(false),调用的函数指针是S_ mergesortsv (如图10中上半部所示),则本周期PHT输出的组指针为0,那么在本周期BTB 当前的访问位置(目标地址项)即为该组-路指针指向的位置,这意味着对应的目标地址项所存储的目标地址在本周期已被取出,表示预测成功,因而可提前结束此次间接转移预测;若第13行的if指令中的条件为真(True),调用的函数指针是Sjsortsv(如图10中下半部所示),那么本周期PHT输出的组指针不为0,需要继续进行预测。在第三周期,通过使用上周期获得的完整的组路指针访问BTB进行预测,如果访问BTB命中,则使用对应的目标地址项所保存的目标地址作为间接转移预测地址发射到流水线和指令缓存中;如果上周期已向流水线发射目标地址,则之前发射的目标地址将被新目标地址取而代之。如果访问BTB未命中,则继续使用最近那个已被发射流水线和指令缓存中的目标地址进行预测。至此,一个完整的预测过程完成。本发明使用指针将快速、高准确率的TTC结构融入到现有的分支预测部件中,通过指针结构对已有的BTB和PHT部件进行拓展和重定义,以指针作为媒介进行间接转移预测,在不需要大容量存储结构支持的基础上,取得了只需花费与直接地址预测相类似的时间代价而获取处理器高预测准确率和能效性的效果。本发明不需要容量大的或复杂的结构来存储目标地址,通过组-路指针索引访问的间接转移目标地址被保存在BTB中,而组-路指针则保存在PHT中;通过先获得指针再获得数据的方式,花费的时间开销较小;另外,预测和更新逻辑很简单。
对于本领域的专业人员来说,在了解了本发明内容和原理后,能够在不背离本发明的原理和范围的情况下,根据本发明的方法进行形式和细节上的各种修正和改变,但是这些基于本发明的修正和改变仍在本发明的权利要求保护范围之内。
权利要求
1.一种实现现代处理器间接转移预测的装置,其特征在于,包括方向预测器、组-路指针寄存器以及分支目标缓冲器,其中方向预测器,用于在预测间接转移指令方向的同时选择模式历史记录的第一次访问索引和第二次访问索引,并通过该模式历史记录生成及输出相应的组-路指针;组-路指针寄存器,用于保存所述模式历史记录输出的所述组-路指针;分支目标缓冲器,用于建立子块和分配项,所述子块为每一间接转移指令分配通过所述组-路指针索引的目标地址项;所述分配项用于记录每一间接转移指令目标地址项的使用情况。
2.按照权利要求1所述的装置,其特征在于,所述模式历史记录生成的组-路指针为4位,通过每一表项的2个记录项分别保存生成的2位的组指针和2位的路指针并输出;所述组-路指针寄存器保存所述模式历史记录输出的4位组-路指针。
3.按照权利要求2所述的装置,其特征在于,还包括一移位器和一索引寄存器,所述方向预测器还包括一全局历史寄存器和一异或器;其中所述异或器,用于获取所述全局历史寄存器之值与程序计数器之值的异或值,作为所述模式历史记录的第一次访问索引;通过所述移位器将所述异或值左移一位的值作为所述模式历史记录的第二次访问索引。
4.按照权利要求3所述的装置,其特征在于,所述方向预测器还包括第一多选器,其中所述分支目标缓冲器在预测的第一周期通过所述程序计数器被访问时,如果访问命中,则输出所述分配项;如果访问未命中,则通过预测程序中止并暂停流水线,直到所述间接转移完成;所述方向预测器在预测的第一周期通过第一多选器选择第一次访问索引,所述模式历史记录据第一次访问索引的索引结果作为所述组-路指针中的路指针获取,将该路指针与假设为0的组指针构成4位临时的组-路指针,分别通过2个记录项保存所述4位临时的组-路指针并输出;所述组-路指针寄存器保存所述模式历史记录输出的所述4位临时的组-路指针。
5.按照权利要求4所述的装置,其特征在于,所述分支目标缓冲器的子块在预测的第二周期通过所述程序计数器作为标签被访问时,如果访问命中,即所述标签和间接转移指令的地址匹配,则从所述组-路指针寄存器获取所述临时的组-路指针,将通过该临时的组-路指针索引的目标地址项所存储的目标地址作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;所述方向预测器在预测的第二周期通过第一多选器选择第二次访问索引,所述模式历史记录据第二次访问索引的索引结果作为组-路指针中的组指针获取,将该组指针与上一周期获取的所述路指针组合成4位完整的组-路指针,通过2个记录项项保存组合成的所述4位完整的组-路指针并输出;组-路指针寄存器保存所述模式历史记录输出的所述4位完整的组-路指针。
6.按照权利要求5所述的装置,其特征在于,所述分支目标缓冲器的子块在预测的第三周期通过所述程序计数器作为标签被访问时,如果访问命中,则从所述组-路指针寄存器获取所述完整的组-路指针,将通过该完整的组-路指针索引的目标地址项所存储的目标地址作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;如果上一周期已发射所述目标地址,则之前发射的目标地址将被新发射的所述目标地址取代;如果访问未命中,则继续使用最近的已被发射的目标地址进行预测。
7.按照权利要求6所述的装置,其特征在于,所述分支目标缓冲器的子块通过所述完整的组-路指针被访问时,若所述组-路指针中的所述组指针仍为0,则将所述分支目标缓冲器当前的访问位置作为该组-路指针指向的目标地址发射到流水线和指令缓存中。
8.按照权利要求1至7任一项所述的装置,其特征在于,还包括一训练循环计数器和第二多选器,其中训练循环计数器,用于输出循环计数值;第二多选器,用于在预测时选择所述模式历史记录生成的组-路指针输出,在出现预测错误时选择训练循环计数器输出的循环计数值作为更新的组-路指针输出;所述组-路指针寄存器保存第二多选器选择输出的由所述模式历史记录生成的组-路指针或所述更新的组-路指针。所述分支目标缓冲器将所述分配项作为遍历间接转移指令全部已分配的目标地址项的依据,遍历情况用于作为更新分配项或组-路指针的依据。
9.一种实现现代处理器间接转移预测的方法,涉及方向预测器和分支目标缓冲器,该方法包括在分支目标缓冲器中建立子块和分配项,所述子块为每一间接转移指令分配通过所述组-路指针索引的目标地址项;所述分配项用于记录每一间接转移指令目标地址项的使用情况;在预测时,为方向预测器中的模式历史记录选择第一次访问索引和第二次访问索引, 使得该模式历史记录生成相应的组-路指针;通过所述组-路指针索引访问所述分支目标缓冲器的所述目标地址项。
10.按照权利要求9所述的方法,其特征在于,在预测时,为方向预测器中的模式历史记录选择第一次访问索引和第二次访问索引,使得该模式历史记录生成相应的组-路指针,具体包括获取所述全局历史寄存器之值与程序计数器之值的异或值,作为第一次访问索引;将所述异或值左移一位的值作为第二次访问索引;所述方向预测器在预测的第一周期选择第一次访问索引,所述模式历史记录据第一次访问索引的索引结果作为所述组-路指针中的路指针获取,将该路指针与假设为0的组指针构成4位临时的组-路指针,分别通过2个记录项保存所述4位临时的组-路指针并输出;所述方向预测器在预测的第二周期选择第二次访问索引,所述模式历史记录据第二次访问索引的索引结果作为组-路指针中的组指针获取,将该组指针与上一周期获取的所述路指针组合成4位完整的组-路指针,通过2个记录项项保存组合成的所述4位完整的组-路指针并输出。
11.按照权利要求10所述的方法,其特征在于,通过所述组-路指针索引访问所述分支目标缓冲器的所述目标地址项,具体包括所述分支目标缓冲器在预测的第一周期通过程序计数器作为标签被访问时,如果访问命中,即所述标签和间接转移指令的地址匹配,则输出所述分配项;如果访问未命中,则通过预测程序中止并暂停流水线,直到所述间接转移完成;所述分支目标缓冲器的子块在预测的第二周期通过所述程序计数器作为标签被访问时,如果访问命中,则通过获取的所述临时的组-路指针索引的目标地址项所存储的目标地址,作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;所述分支目标缓冲器的子块在预测的第三周期通过所述程序计数器作为标签被访问时,如果访问命中,则通过获取的所述完整的组-路指针索引的目标地址项所存储的目标地址,作为预测的间接转移指令的目标地址发射到流水线和指令缓存中;如果上一周期已发射所述目标地址,则之前发射的目标地址将被新发射的目标地址取代;如果访问未命中, 则继续使用最近的已被发射的目标地址进行所述预测。
12.按照权利要求11所述的方法,其特征在于,所述分支目标缓冲器的子块通过所述完整的组-路指针被访问时,若所述组-路指针中的所述组指针仍为0,则将当前的访问位置作为该组-路指针指向的目标地址发射到流水线和指令缓存中。
13.按照权利要求10至12任一项所述的方法,其特征在于,还包括在出现预测错误时选择一训练循环计数器输出的循环计数值作为更新的组-路指针;所述分支目标缓冲器将所述分配项作为遍历间接转移指令全部已分配的目标地址项的依据,遍历情况用于作为更新分配项或组-路指针的依据;所述遍历情况及其更新包括以下三种中任意一种第一种,遍历时一旦出现使用一个组-路指针访问所述分支目标缓冲器而未命中的情况,则将所述分配项中的对应位更新为未使用状态;第二种,遍历时如果一个目标地址项中的目标地址与正确的目标地址相同,则更新相应的组-路指针指向该目标地址项,包括分别针对组指针和路指针进行更新,并存入相应的2个记录项中;第三种,遍历时如果遍历全部已分配的目标地址项后,没有找到与正确地址匹配的目标地址项,则根据分配项中的信息,随机地分配一个新的目标地址项或替换一项已使用的目标地址项来记录正确的目标地址,并更新相应的组-路指针指向该目标地址项,包括分别针对组指针和路指针进行更新,并存入相应的2个记录项中。
全文摘要
本发明披露了实现现代处理器间接转移预测的装置及方法,其中装置包括方向预测器在预测间接转移指令方向的同时选择模式历史记录的第一次访问索引和第二次访问索引,并通过该模式历史记录生成及输出相应的组-路指针;组-路指针寄存器保存模式历史记录输出的组-路指针;以及分支目标缓冲器建立子块和分配项,其中,子块为每一间接转移指令分配通过组-路指针索引的目标地址项;分配项用于记录每一间接转移指令目标地址项的使用情况。本发明在不需要大容量存储结构支持的基础上,可取得与直接地址预测相类似的预测效果,由此可提高处理器的能效性。
文档编号G06F9/38GK102306093SQ20111022183
公开日2012年1月4日 申请日期2011年8月4日 优先权日2011年8月4日
发明者佟冬, 史秦青, 宋天宝, 程旭, 谢子超, 陆俊林, 黄明凯 申请人:北京北大众志微系统科技有限责任公司