首页> 中国专利> 循环预测器指导的循环缓冲器

循环预测器指导的循环缓冲器

摘要

循环预测器训练分支指令来确定循环的经训练的循环计数。当循环适合于指令缓冲器时,处理器停止从指令高速缓存取指,将循环指令从缓冲器发送到执行引擎而不从高速缓存取指循环指令,维持一循环弹出计数,其指示分支指令从指令缓冲器被发送到执行引擎的次数,并且当循环弹出计数小于经训练的循环计数时预测分支指令为被采用,否则,则预测为不被采用。

著录项

  • 公开/公告号CN104298488A

    专利类型发明专利

  • 公开/公告日2015-01-21

    原文格式PDF

  • 申请/专利权人 上海兆芯集成电路有限公司;

    申请/专利号CN201410512577.0

  • 申请日2014-09-29

  • 分类号G06F9/32;

  • 代理机构北京市柳沈律师事务所;

  • 代理人钱大勇

  • 地址 201203 上海市张江高科技园区金科路2537号301室

  • 入库时间 2023-12-17 04:06:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-06-27

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F 9/32 专利号:ZL2014105125770 变更事项:专利权人 变更前:上海兆芯集成电路有限公司 变更后:上海兆芯集成电路股份有限公司 变更事项:地址 变更前:201203 上海市张江高科技园区金科路2537号301室 变更后:201203 上海市浦东新区张江高科技园区金科路2537号301室

    专利权人的姓名或者名称、地址的变更

  • 2018-02-23

    授权

    授权

  • 2015-02-18

    实质审查的生效 IPC(主分类):G06F9/32 申请日:20140929

    实质审查的生效

  • 2015-01-21

    公开

    公开

说明书

技术领域

背景技术

计算机程序普遍包含循环。循环是通常被称为循环本体的、重复地运行 的指令序列,该循环本体重复地运行直到导致循环退出并进行到接着该循环 的下一条指令的条件(condition)发生为止。在机器语言级别,一般来说, 循环以通常回到位于循环本体的开始处的指令的条件分支指令来结束,但是 当条件发生时,循环不再被采用(not taken)并且向下执行顺序的下一条指 令。例如,条件可以是被初始化为正值然后通过循环每次递减的变量达到0。

对于现代处理器,循环呈现潜在的性能问题,因为它们包括条件分支指 令,尤其是对于流水线和/或超标量处理器。一般而言,为了足够快地取指和 解码指令以将它们提供给运行指令的处理器的功能单元,取指单元必须预测 指令流中条件分支指令的存在并预测它们的结果,即,它们是将被采用 (taken)或是不被采用(not taken)以及它们的目标地址。如果条件分支指 令被误预测,则误预测必须被纠正,当流水线的前端开始在被纠正的地址处 取指和解码指令时,会造成执行单元由于缺乏要执行的指令而饥饿的一个时 段,常被称作流水线气泡。另外,对执行发生之前的所获取的指令的解码可 能是复杂的,尤其对于一些指令集架构,并且因此引入的延迟也可能导致流 水线气泡。

现代处理器中另外关心的是功耗。这在很多环境中是存在的。例如,在 诸如移动电话或笔记本电脑或平板电脑的电池供电的环境中,总是希望减少 处理器功耗以便延长所需要的电池再充电之间的时间。又例如,在服务器环 境中,除了环境考虑之外,相对大的-确实有时候巨大的-数量的服务器导致 功耗方面非常显著的成本。如上面讨论的,包括循环本体指令的指令解码可 能是复杂的,因此除了由取指逻辑和从其获取指令的指令高速缓存以及预测 所获取的循环的条件分支指令的分支预测器所消耗的功率之外,解码逻辑需 要消耗相当大量的功率。

因此,理想的是提供一种装置用于处理器在运行循环时提高性能和/或减 少功耗。

发明内容

在本发明的一方面中提供了一种处理器。处理器包括指令高速缓存、执 行引擎、指令缓冲器和循环预测器。循环预测器训练(train)分支指令来确 定循环的经训练的循环计数。循环包括以分支指令的目标开始并以该分支指 令结束的指令序列。循环预测器还判断循环的尺寸是否不大于指令缓冲器的 尺寸。当循环的尺寸不大于指令缓冲器的尺寸时,处理器停止从指令高速缓 存取指,将循环指令从指令缓冲器发送到执行引擎而不从指令高速缓存取指 循环指令,维持一循环弹出计数,其指示分支指令从指令缓冲器被发送到执 行引擎而不从指令高速缓存取指的次数,当循环弹出计数少于经训练的循环 计数时预测分支指令为被采用,否则,则预测分支指令为不被采用。在另一 个方面中,本发明提供了通过具有指令高速缓存、指令缓冲器和执行引擎的 处理器执行的方法。该方法包括训练分支指令来确定循环的经训练的循环计 数。循环包括以分支指令的目标开始并以分支指令结束的指令序列。该方法 还包括判断循环的尺寸是否不大于指令缓冲器的尺寸。该方法还包括,当循 环的尺寸不大于指令缓冲器的尺寸时:停止从指令高速缓存取指,将循环指 令从指令缓冲器发送到执行引擎而不从指令高速缓存取指循环指令,维持一 循环弹出计数,其指示分支指令从指令高速缓存发送到执行引擎而不从指令 高速缓存取指的次数,当循环弹出计数少于经训练的循环计数时预测分支指 令为被采用,否则,则预测分支指令为不被采用。

本发明的上述处理器及其执行方法在循环缓冲器模式中利用循环预测 器结合指令缓冲器工作的方式来潜在地精确预测循环退出,从而避免不具有 循环预测器指导的循环缓冲器模式操作的优点的常规处理器所经历的误预 测。

附图说明

图1是示出处理器的框图。

图2是示出图1的循环预测器的框图。

图3是示出图1的处理器的操作的流程图。

图4是示出图1的处理器的操作的流程图。

被统称为图5的图5A和5B是示出图1的处理器的操作的流程图。

图6是进一步示出根据替换实施例的图1的处理器的操作的流程图。

图7是作为示例示出向图1的执行引擎提供嵌套循环的指令的工作在循 环缓冲器模式中的图1的指令缓冲器的框图。

具体实施方式

现在参照图1,显示了示出处理器100的框图。处理器100包括取指单 元108,其控制从指令高速缓存104的指令的获取,这些指令被提供到指令 解码单元118。解码单元118将经解码的指令提供到指令缓冲器114,在此 也被称为循环缓冲器(loop buffer)114,指令缓冲器114将指令提供给执行 引擎112用于执行。取指单元108耦接到解码单元118、指令缓冲器114和 执行引擎112。处理器100还包括多个分支预测器。在一个实施例中,分支 预测器包括分支历史表116、分支目标地址高速缓存(Branch Target Address  Cache,BTAC)106和循环预测器102,其中每个耦接到取指单元108。循环 预测器102还耦接到解码单元118、指令缓冲器114和执行引擎112。

对本公开来说,一个循环是以一后向分支的条件分支指令结束并且以该 条件分支指令的目标指令(即,条件分支指令分支所到的指令)开始的指令 序列。条件分支指令可以被称为循环分支指令。循环的迭代(iteration)指 的是循环的全部指令的单次运行。循环的执行例程(execution instance)指 的是运行多次迭代直到由于它的循环分支指令的不被采用的方向而退出循 环为止。如在此描述的,循环预测器102被有利地用于预测循环的退出,并 且从而避免分支误预测及其伴随的性能损失。有利地,循环预测器102可以 在两种模式中的每种中被用来预测循环的退出。在第一种模式中,循环太大 而不能适合于循环缓冲器114,所以循环指令在被提供给执行引擎112之前 被重复地从指令高速缓存104获取并通过解码单元118解码。每次从指令高 速缓存104获取循环分支指令时,循环预测器102就进行预测它是否将被采 用(taken or not taken)。循环预测器102跟踪在当前的循环执行例程期间该 循环分支指令已经被执行的次数,并且也知道在循环的前一个(last)执行 例程期间它被采用的次数,并且使用此信息来进行预测。在被称为“循环缓 冲器模式”(loop buffer mode)的第二种模式中,已经解码的循环的指令之 大小可以适合于循环缓冲器114,并且从循环缓冲器114中被弹出(pop)用 于提供给执行引擎112,而不需要重复地从指令高速缓存104中获取并通过 解码单元118解码。在循环缓冲器模式中,当循环分支指令从循环缓冲器114 中弹出的次数已经达到在循环的前一个执行例程期间它被采用的次数之后, 循环预测器102则指示循环缓冲器退出循环。

取指单元108将指令指针或程序计数器值提供给指令高速缓存104来存 取指令高速缓存104。作为响应,指令高速缓存104将指令字节区块提供给 解码单元118。在一个实施例中,该区块是每个时钟周期16字节。一般而言, 取指单元108取指顺序的下一指令区块;然而,在分支指令的情况中,取指 单元108在分支指令的目标地址处取指指令区块。该分支目标地址可以由分 支预测器102/106/116之一的预测而提供,或者在诸如为了纠正分支误预测 而由执行引擎112提供。

分支历史表116存储用于先前运行的分支指令的被采用/不被采用 (T/NT)预测,也被称为分支方向或方向。在一个实施例中,分支历史表 116通过分支指令在指令高速缓存104中的获取地址与分支历史图案的布尔 异或的值来索引,其中之前执行的N个分支指令中的每一个在该分支历史图 案中包含一个比特,其中N是预定值,并且每个比特指示该分支指令是否被 采用。在一个实施例中,分支历史表116包括与多个分支指令对应的饱和计 数器,并且每个饱和计数器在当分支被采用时递增计数(count up),而当分 支不被采用时递减计数(count down),并且T/NT预测基于计数器的值。

循环预测器102存储用于先前运行的循环分支指令的一经训练的循环计 数,其可以用于进行先前被识别为循环分支指令的条件分支指令的T/NT预 测。循环分支指令是在指令流中后向分支的条件分支指令。因此,循环分支 指令在程序次序上出现在循环的末尾。例如,条件分支指令可以是包括有符 号偏移的相对跳转指令,所述有符号偏移被添加到条件分支指令的指令指针 值来计算分支目标地址。优选地,另外,条件分支指令在最近一次的循环执 行例程中被采用的次数达到一阈值次数,才有资格被称为循环分支指令。所 述经训练的循环计数指示在循环的前一个执行例程期间该循环分支指令被 采用的次数,其可能是对于在循环的下一个执行例程中将采用的循环分支指 令的次数的有用指示。例如,如果该经训练的循环计数是37,那么循环预测 器102可以预测该循环分支指令在它从指令高速缓存104被取指的前37次 都将被采用,并且循环预测器102可以预测循环分支指令在它被取指的第38 次将不被采用,即,循环预测器102可以预测循环将退出。

有利地,循环预测器102也可以用在处理器100的循环缓冲器模式中。 在循环缓冲器模式中,处理器100检测到它正在运行一全部暂存于循环缓冲 器114中的循环。因此,处理器100停止从指令高速缓存104取指。替代为, 处理器100从循环缓冲器114弹出已经解码的循环指令,用于提供给执行引 擎112。有利地,循环预测器102可以用类似于循环预测器102预测从指令 高速缓存104取指的循环分支指令的方向(通常因为循环太大而不能适合于 循环缓冲器114,所以处理器100不工作在循环缓冲器模式中时)所用的方 式,来预测从循环缓冲器114弹出的循环分支指令何时将被采用或不被采用。 有利地,当处理器100工作在二者的任何模式中时,循环预测器102都可以 用来预测循环分支指令的方向。下面相对于图2更详细地描述循环预测器 102,并且下面相对于其余图更详细地描述其操作。

BTAC 106存储用于先前执行的分支指令的方向预测和分支目标地址, 并且提供分支指令的方向预测以及指令高速缓存104取指地址所选择的分支 目标地址。BTAC 106还存储与每个分支指令有关的其它信息。例如,其它 信息可以包括分支指令的类型,诸如指令是否是调用指令、返回指令、间接 分支指令、条件有关分支指令、非条件有关分支指令或者循环分支指令,如 在此描述的。有利地,在一个实施例中,额外的信息还包括一经训练的循环 分支标志(参照图2作为经训练的循环分支标志278),其该指示条件分支指 令是否是一个经训练的循环分支指令。在一个实施例中,条件分支指令仅在 它具有图2的经训练的循环计数表201中的有效的经训练的循环计数206的 情况下才将其经训练的循环分支标志278置位,如下面更详细地描述的。在 一个实施例中,分支历史表116通过作为指令高速缓存104的取指地址的值 来索引。在一个实施例中,处理器100包括其它分支预测器,诸如基于堆栈 的调用/返回预测器。优选地,BTAC 106提供来自分支历史表116、循环预 测器102(例如,经由经训练的循环分支标志278的设置值)或BTAC 106 自身的预测是否应该被用来预测分支指令的指示。

解码单元118解码从指令高速缓存104取指的指令。解码可以包括根据 处理器100的指令集架构(ISA)将从指令高速缓存104接收的未分化的 (undifferentiated)指令字节流打断(break)为分立的(distinct)指令。这 也被称为指令格式化。例如,在一个实施例中处理器100是x86ISA处理器。 x86ISA中的指令是可变长度,并且可以在存储器中的任何字节边界处开始。 因此,x86指令可以跨越从指令高速缓存104取指的多个区块。目前,x86ISA 指令可以在1和15字节长之间。又例如,在一个实施例中,处理器100是 高级RISC机器(ARM)ISA处理器。在ARM ISA处理器的某些模式中的 指令也可以是可变长度。例如,在一些模式中,ARM ISA指令可以是16比 特长或32比特长。可以包括或不包括可变长度指令的其它ISA的实施例是 预期的。

通常,解码/格式化可变长度指令需要大量逻辑,这可能需要显著的功耗 并且可能在提供经解码/格式化的指令给执行引擎112时造成延迟。更具体 地,依赖于指令混合,解码单元118可能难以足够快地向指令缓冲器114提 供经解码的指令来保持执行引擎112的高利用率。有利地,当工作在循环缓 冲器模式中时,循环缓冲器114可能能够以足够的速率将循环指令提供给执 行引擎112来充分地利用执行引擎112,尤其是具有如在此描述的通过循环 预测器102来预测循环分支指令的方向的额外优势,以避免当循环退出发生 时的误预测,从而潜在地改善处理器100的性能。另外,有利地,当工作在 循环缓冲器模式中时,可以节省大量电力,因为在循环缓冲器模式的操作期 间中相当长的一段时间,可以临时关闭指令高速缓存104、取指单元108、 分支历史表116和/或解码单元118。在一个实施例中,缓冲器(未显示)存 在于指令高速缓存104和解码单元118之间用于缓冲指令字节的区块;当工 作在循环缓冲器模式中时也可以关闭此缓冲器。

常规地,在循环缓冲器模式中的操作有效地总是预测循环分支指令将被 采用,这意味着,在循环退出时,即,运行循环分支指令的最后一次,误预 测将发生,这将必须由处理器100纠正。有利地,在此描述的实施例中,在 循环缓冲器模式中循环预测器102结合循环缓冲器114工作来潜在地精确预 测循环退出,并且从而避免不具有循环预测器指导的循环缓冲器模式操作的 优点的常规处理器100所经历的误预测。

解码也可以包括解码指令字节来生成额外的微架构控制比特,其随着它 们流下处理器100流水线而变为指令的一部分。例如,额外的控制比特可以 被执行引擎112用来减少执行引擎112所需要的解码量,从而改善性能和/ 或功耗。无论ISA和/或微架构,处理器100可以从如在此描述的基于循环 预测的循环缓冲器操作中受益。

指令缓冲器114或循环缓冲器114从解码单元118接收经解码的指令, 并且要求将它们提供给执行引擎112。优选地,指令缓冲器114包括构成一 循环(circular)队列的多个条目(entry),解码单元118将经解码的指令推 入(push)到这些条目中,并且执行引擎112将它们从这些条目中弹出(pop)。 推送指针被维持用以指向指令被推入到其中的下一条目,并且弹出指针被维 持用以指向从其弹出指令的下一条目。指针值被用来确定哪些条目是有效 的,并且也用来确定指令缓冲器114何时是满的以及何时是空的。在一个实 施例中,循环缓冲器114的尺寸或长度是24个条目,即,循环缓冲器114 能够保存24个经解码的指令。在这样的实施例中,包括24个指令或者更短 的循环将可以完全适合于循环缓冲器114。循环缓冲器114的尺寸大于或小 于24的其它实施例是预期的。

指令缓冲器114还包括控制逻辑,其与循环预测器102合作地控制如在 此描述的操作,诸如指针的更新。如在此描述的,当处理器100确定它遇到 完全适合于循环缓冲器114的循环(“完全适合”意思是循环的尺寸不大于 循环缓冲器114的尺寸)并且进入循环缓冲器模式时,暂停从指令高速缓存 104的取指,这有利地避免循环缓冲器114中的循环指令被覆写。当进入循 环缓冲器模式时控制逻辑重新调整指针。具体地,弹出指针被更新为指向循 环分支指令的目标。当循环预测器102有效地预测在循环迭代的末尾该循环 分支指令将被采用时,控制逻辑将弹出指针更新为循环分支指令的目标。

执行引擎112执行从指令缓冲器114接收的格式化的指令。在一个实施 例中,指令缓冲器114每个时钟周期能够向执行引擎112提供多达三个指令。 执行引擎112包括根据处理器100的ISA来执行指令以产生结果的执行单 元。在一个实施例中,执行引擎112包括一超标量乱序运行微架构。然而, 具有其它微架构的实施例也是可以预期的。在一个实施例中,执行引擎112 还包括指令翻译器(未显示),指令翻译器将每个格式化的ISA指令翻译成 被执行单元运行的一个或多个微指令。在一个实施例中,处理器100包括微 指令缓冲器,指令翻译器将等待被发送到执行单元的微指令写到该微指令缓 冲器中。微指令缓冲器充当不同于指令缓冲器114的循环缓冲器或者除了指 令缓冲器114之外的循环缓冲器的实施例是可以预期的。执行引擎112还可 以包括指令结果被写入的架构状态,诸如架构寄存器集。执行引擎112还可 以包括数据操作数被写到/从其读取的存储器子系统,诸如高速缓存层级和存 储器次序缓冲器。

现在参照图2,显示更详细地示出图1的循环预测器102的框图。循环 预测器102包括经训练的循环计数表201、循环取指计数器234、循环弹出 计数器254、经训练的循环计数寄存器242和训练计数器264。图2中还显 示了经训练的循环分支标志278。经训练的循环分支标志278表示多个经训 练的循环分支标志278。经训练的循环分支标志278优选地存储在与各个分 支指令对应的BTAC 106的条目中,并且当根据包括各个分支指令的指令高 速缓存104区块的取指地址对BTAC 106进行存取时,经训练的循环分支标 志278被提供给循环预测器102的控制逻辑262。如在此描述的,控制逻辑 262按照需要来清除和/或增加循环取指计数器234、循环弹出计数器254和 训练计数器264。优选地,控制逻辑262包括组合和时序逻辑,其可以包括 状态机器。

经训练的循环计数表201包括多个条目,每个条目包括有效比特202、 标签204和经训练的循环计数206。按照需要使用训练计数器264的值来更 新给定条目的该经训练的循环计数206,如下面参照图3描述的。经训练的 循环计数表201通过条件分支指令地址212的索引214部分来索引。通常, 当经训练的循环计数表201被读取时,分支指令地址212是用来存取指令高 速缓存104和BTAC 106的指令指针,例如,如在下面描述的图5的框503。 通常,当经训练的循环计数表201被写入时,分支指令地址212是使用中的 分支指令的地址,例如,如在下面描述的图3的框312或图4的框404处。 在一些实施例中,经训练的循环计数表201可以是直接映射的或集合关联的。 通过第一比较器208将条件分支指令地址212的标签216部分与所选择的条 目的标签204比较来生成被提供给控制逻辑262的命中(hit)信号218。通 过第二比较器232将所选择的经训练的循环计数206与循环取指计数器234 比较来生成提供给2输入复用器272的一个输入端的第一采用/不采用 (T/NT)指示符236。所选择的经训练的循环计数206还被提供给一经训练 的循环计数寄存器242,该经训练的循环计数寄存器242存储当处理器100 处于循环缓冲器模式中时使用的经训练的循环计数206的经流水线向下输送 的版本(piped-down version)。在一个实施例中,经训练的循环计数寄存器 242包括用于存储多个经训练的循环计数206的多个寄存器242。通过第三 比较器252将存储在经训练的循环计数寄存器242中的经训练的循环计数 206的经流水线向下输送的版本与循环弹出计数器254比较来生成提供给2 输入复用器272的另一输入端的第二T/NT指示符256。由控制逻辑262生 成的模式指示符274控制复用器272选择输入之一以输出提供给控制逻辑 262的第三T/NT指示符276。当处理器100在循环缓冲器模式(下面会更详 细地描述)中时,控制逻辑262生成模式指示符274的值来使得复用器272 选择第三比较器252的输出,否则生成模式指示符274的值来使得复用器272 选择第二比较器232的输出。下面参照其余图来更详细地描述循环预测器 102的操作。

现在参照图3,显示了示出图1的处理器100的操作的流程图。流程在 框302处开始。

在框302处,执行引擎112运行后向分支的条件分支指令。即,执行引 擎112确定分支指令的正确的方向和正确的目标地址。优选地,如果分支指 令被误预测,即,正确的方向和目标地址不匹配于预测的方向和目标地址, 则执行引擎112纠正误预测。更具体地,执行引擎112使得处理器100的前 端被刷新(flush),并且使得取指单元108在正确的目标地址处开始取指。 另外,执行引擎112将分支指令的执行通知循环预测器102。流程进行到判 定框304。

在判定框304,循环预测器102从执行引擎112确定分支指令的正确方 向是否被采用。如果被采用,则流程进行到框306;否则,流程进行到判定 框308。

在框306处,循环预测器102增加训练计数器264。流程在框306处结 束。

在判定框308处,循环预测器102确定分支指令是否满足循环分支的标 准。优选地,如果该分支指令后向分支,且经训练的循环计数表201没有包 括用于该分支指令的条目,并且训练计数器264的值足够大,则该分支指令 满足循环分支标准。例如,在一个实施例中,训练计数器264的值必须至少 为24。在一个实施例中,为了满足循环分支标准,循环预测器102还必须确 定对于该循环的至少N个连续的例程都具备相同的训练计数器264值。在一 个实施例中,例如N是3。在另一个实施例中,例如N是7。如果分支指令 满足标准,流程进行到框312;否则,流程结束。

在框312处,循环预测器102在经训练的循环计数表201中分配条目。 优选地,循环预测器102基于分支指令地址212的索引部分214来分配条目。 优选地,分配条目包括设置条目的有效比特202。循环预测器102还使用分 支指令地址212的标签部分来填充所分配的条目的标签字段204,并且使用 训练计数器264值来填充所分配的条目的经训练的循环计数字段206。流程 进行到框314。

在框314处,循环预测器102使得在与分支指令相关的BTAC 106的条 目中的经训练的循环分支标志278被设置。流程在框314处结束。

现在参照图4,显示了进一步示出图1的处理器100的操作的流程图。 流程在框402处开始。

在框402处,执行引擎112执行了误预测的循环分支指令并通知循环预 测器102。优选地,执行引擎112知道条件分支指令是循环分支指令,因为 由BTAC 106提供的经训练的循环分支标志278被经流水线向下输送到执行 引擎112。流程进行到框404。

在框404处,循环预测器102使与误预测的循环分支指令对应的经训练 的循环计数表201中的条目无效。另外,循环预测器102使得在与循环分支 指令对应的BTAC 106的条目中的经训练的循环分支标志278被清除。循环 分支指令可以在其循环的随后的执行例程中被再次训练。流程在框404处结 束。

现在参照由图5A和图5B组成的图5,显示了进一步示出图1的处理器 100的操作的流程图。流程在框502处开始。

在框502处,取指单元108从指令高速缓存104取指分支指令。同时, 以用于存取指令高速缓存104的取指地址来存取BTAC 106。响应地,BTAC 106向取指单元108提供分支指令的预测,并且向循环预测器102提供所取 指的分支指令的经训练的循环分支标志278。流程进行到框503。

在框503处,假设分支指令是循环分支指令并且存在一经训练的循环计 数206可用,循环预测器102从分支指令的经训练的循环计数表201获得其 经训练的循环计数206。流程进行到判定框504。

在判定框504处,循环预测器102通过判断经训练的循环分支标志278 是否被设置来确定所取得的分支指令是已经被训练的循环分支。如果如此, 则流程进行到判定框508;否则,流程进行到框506。

在框506中,取指单元108使用由BTAC 106和/或分支历史表116所提 供的预测来预测分支指令。流程在框506处结束。

在判定框508处,循环预测器102确定循环取指计数器234是否已经被 分配用于该循环分支指令。如果如此,则流程进行到框514;否则,流程进 行到框512。

在框512处,针对该循环分支指令,循环预测器102分配一循环取指计 数器234。分配循环取指计数器包括将它重置为0。在一个实施例中,只存 在一个循环取指计数器234,所以分配循环取指计数器234仅包括重置它。 然而,在另一实施例中,循环预测器102包括保存多个循环取指计数器的一 循环取指计数器表,在这种情况下分配循环取指计数器234包括选择表条目 之一。优选地,该循环取指计数器表中的不同循环取指计数器通过它们各自 的循环分支地址来区分。这可以适用于嵌套循环(nested loops),该嵌套循 环的多个循环分支指令均可以通过循环预测器102精确地预测。流程进行到 框514。

在框514处,循环预测器102增加所分配的循环取指计数器234。流程 进行到框518。

在框518,循环预测器102确定循环的长度或尺寸。优选地,指令缓冲 器114的控制逻辑为指令缓冲器114中的每个指令维持一指令指针值或一程 序计数器值。如下所述,循环预测器102使用这些指令指针值来找到循环分 支指令的目标指令并确定循环的尺寸。优选地,循环预测器102将BTAC 106 提供的循环分支指令的目标地址与所维持的指令指针值进行比较来找到匹 配。在指令缓冲器114中具有匹配于该目标地址的指令指针值的、按程序次 序最新的指令便是循环分支指令的目标指令。然后,循环预测器102减去(考 虑指令缓冲器114的循环性质)循环分支指令的索引和匹配的目标指令的索 引来计算该循环的长度。流程进行到判定框522。

在判定框522处,循环预测器102基于在框518处确定的长度和指令缓 冲器114的尺寸来确定循环是否适合于指令缓冲器114。如果循环的尺寸不 大于指令缓冲器114的尺寸,则流程进行到框532;否则,流程进行到判定 框524。

在判定框524处,循环预测器102确定在框514处增加的循环取指计数 器234的值是否小于在框503处获得的经训练的循环计数206的值。如果循 环取指计数器234的值小于经训练的循环计数206的值,则流程进行到框 526;否则,流程进行到框528。

在框526处,循环预测器102预测循环分支指令被采用,并且取指单元 108重定向在由BTAC 106(或其它分支预测器)提供的目标地址处取指。 流程在框526处结束。

在框528处,循环预测器102预测循环分支指令不被采用,并且取指单 元108继续在下一连续的取指地址处取指。流程在框528处结束。

在框532处,循环预测器102使得取指单元108停止从指令高速缓存104 取指,并且使得处理器100进入循环缓冲器模式,这包括提供关于模式指示 符274的值来指示如此。优选地,进入循环缓冲器模式还包括关闭处理器100 流水线的前端的一些功能单元,诸如指令高速缓存104、取指单元108、解 码单元118和/或分支历史表116。在一个实施例中,关闭功能单元包括关闭 功能单元的时钟。在一个实施例中,关闭功能单元还包括关断到功能单元的 电源,尤其是如果经训练的循环计数206相当大时。在这样的实施例中,在 达到经训练的循环计数206之前将电源恢复到这些功能单元。流程进行到框 534。

在框534,在框503获得的经训练的循环计数206与循环分支指令一起 被经流水线向下输送,以便它可以在循环缓冲器模式期间与循环弹出计数器 比较,如下面描述。优选地,经流水线向下输送的经训练的循环计数206被 存储在图2的经训练的循环计数寄存器242中。流程进行到框536。

在框536,循环预测器102将循环分支指令推入到指令缓冲器114中。 这里值得注意的是,循环本体指令已经在指令缓冲器114中。流程进行到框 538。

在框538处,循环预测器102分配循环弹出计数器254用于该循环分支 指令。分配循环弹出计数器包括将它重置为0。在一个实施例中,只存在一 个循环弹出计数器254,所以分配循环弹出计数器254仅包括重置它。然而, 在另一实施例中,循环预测器102包括保存多个循环弹出计数器的一循环弹 出计数器表,在这种情况下分配循环弹出计数器254包括选择表条目之一。 优选地,循环弹出计数器表中的不同循环弹出计数器通过它们各自的循环分 支地址来区分。这可以适用于可适合(fit)于循环缓冲器114之内的嵌套循 环(nested loops),该嵌套循环的多个循环分支指令均可以通过循环预测器 102精确地预测,如下面相对于图7描述的。流程进行到框542。

在框542,工作在循环缓冲器模式中的处理器100从指令缓冲器114中 弹出从循环分支指令的目标处开始的循环本体的指令,并且将它们发送到执 行引擎112用于执行。优选地,在框518处确定的循环的长度被提供给循环 缓冲器114的控制逻辑,使得它知道多少指令要弹出并提供给执行引擎112 (包括在下面的框544的循环分支指令),也知道何时增加循环弹出计数器 254(在下面的框546处)。流程进行到框544。

在框544,处理器100从指令缓冲器114弹出循环分支指令,并且将它 发送到执行引擎112用于执行,并且通知循环预测器102。流程进行到框546。

在框546处,循环预测器102增加在框538处分配的循环弹出计数器 254,因为循环分支指令已经从指令缓冲器114弹出。流程进行到判定框548。

在判定框548处,循环预测器102判断循环弹出计数器254的值是否小 于在框534处经流水线向下输送的经训练的循环计数206的值。如果是,循 环预测器102有效地预测循环分支指令被采用,并且流程返回到框542以开 始循环的另一次迭代;否则,流程进行到框552。

在框552,循环预测器102有效地预测循环分支指令不被采用,并且使 得取指单元108苏醒并且在循环分支指令之后的顺序下一指令处恢复从指令 高速缓存104取指。循环预测器102还使得处理器100退出循环缓冲器模式, 这包括提供关于模式指示符274的值来指示如此。流程在框552处结束。

现在参照图6,显示了进一步示出图1的处理器100的操作的流程图。 流程在框602处开始。与从图5的框546到判定框548的流程同时地,流程 从框546进行到框602。

在框602处,循环预测器102计算一个值X。X的值是经训练的循环计 数206减去((A*C)/B)表示的值,其中A、B和C如下。A的值是处理器 100从指令高速缓存取指一指令字节区块、解码它们并将经解码的指令提供 给指令缓冲器所需要的处理器时钟周期数。优选地,此值是基于处理器100 的设计而预定的。B的值是在框518处确定的循环中的指令数量。C的值是 每个时钟周期处理器100能够从指令缓冲器114提供给执行引擎112的指令 数量。流程进行到判定框604。

在判定框604处,循环预测器102确定循环弹出计数器254是否等于在 框602处计算的值X。如果如此,则流程进行到框606;否则,流程结束。

在框606,循环预测器102使得处理器100留在循环缓冲器模式中,但 是使得取指单元108苏醒,并且开始在循环分支指令之后的顺序下一指令处 从指令高速缓存104获取指令。有利地,比起等到循环执行例程的最后一次 迭代才恢复取指的实施例,这可以基本上避免将气泡引入到处理器100的流 水线中,并且从而改善执行引擎112的利用率。流程在框606处结束。

现在参照图7,显示了作为示例示出工作在循环缓冲器模式中的图1的 指令缓冲器114向图1的执行引擎112提供嵌套循环的指令的框图。在图7 的示例中,指令缓冲器114包括24个条目,表示为条目0至23。条目0位 于指令缓冲器114的顶部,并且条目23位于底部。指令被推入到指令缓冲 器114的顶部,并且从指令缓冲器114的底部弹出。图7描绘了嵌套在外部 循环之内的内部循环。当处理器100进入循环缓冲器模式时,内部循环分支 指令位于条目4,内部循环分支目标指令位于条目19,外部循环分支指令位 于条目1,并且外部循环分支目标指令位于条目23。因而,在该示例中,内 部循环和外部循环二者的全部指令都可适合(fit)于循环缓冲器114之内。

在图7的示例中,假定内部循环和外部循环分支指令已经按照图3被训 练,而没有按照图4被使无效。根据上述处理器100的操作,在框502处从 指令高速缓存104第一次取指内部循环分支指令(在已经被训练之后),或 不久之后,直到但不包括内部循环分支指令的外部循环的循环本体指令已经 被解码并分别被推入到循环缓冲器114的条目23至条目5中,其包括了内 部循环的本体指令(到条目19至条目5中),并且按照框503从经训练的循 环计数表201获得内部经训练的循环计数206。随后,处理器100按照框532 进入循环缓冲器模式,按照框534在经训练的循环计数寄存器242中捕捉内 部经训练的循环计数206,按照框536将内部循环分支指令推入到条目4中, 按照框538分配内部循环弹出计数器254,并且处理器100开始将内部循环 的指令从循环缓冲器114发送给执行引擎112用于循环缓冲器模式下的内部 循环的第一执行例程。

最后,循环预测器102按照框548预测内部循环的第一执行例程的退出, 并且处理器100按照框552退出循环缓冲器模式,并且开始取得被解码并且 被推入到循环缓冲器114中的外部循环的其余指令。当在框502处从指令高 速缓存104取指外循环分支指令时,按照框503从经训练的循环计数表201 获得外部经训练的循环计数206。随后,处理器100按照框532进入循环缓 冲器模式,按照框534在另一分配的经训练的循环计数寄存器242中捕捉外 部经训练的循环计数206,按照框536将外部循环分支指令推到条目1中, 按照框538分配外部循环弹出计数器254,并且处理器100开始将外部循环 的指令从循环缓冲器114发送给执行引擎112用于外部循环的第二次迭代, 其在循环缓冲器模式中执行,并且其将包括循环缓冲器模式下的内部循环的 另一执行例程。优选地,本发明包括用于检测嵌套循环的机制。例如,可以 包括嵌套级计数器,该计数器被初始化为0,并且每次在框532进入另一级 包含循环缓冲器(loop buffer-contained)的嵌套时所述计数器递增计数,并 且每次在框552退出一包含循环缓冲器的嵌套级时所述计数器递减计数。处 理器100仅当嵌套级计数器具有值0时才在框552处退出循环缓冲器模式。 另外,在框552处,循环预测器102将执行例程是的循环的循环弹出计数器 254重置为0。

最后,循环预测器102按照框548预测外部循环的执行例程的退出,并 且处理器100按照框552退出循环缓冲器模式。然后,如可看到的,在循环 缓冲器模式中更多循环可以被嵌套并被循环预测器102预测,循环的数量多 达可分配的循环弹出计数器254、经训练的循环计数器206和经训练的循环 计数器寄存器242的数量,只要所嵌套的循环全部适合于循环缓冲器114。

虽然已经在此描述了本发明的各种实施例,但是应该理解它们作为示例 而不是限制被呈现。对于相关计算机领域的技术人员来说将显而易见的是, 在不脱离本发明的范围的情况下,可以在此进行形式和细节上的各种改变。 例如,软件可以使能例如在此描述的装置和方法的功能、构造、建模、仿真、 描述和/或测试。这可以通过通用编程语言(例如,C、C++)、包括Verilog HDL、 VHDL等等的硬件描述语言(HDL)或者其它可用程序的使用来实现。这样 的软件可以被布置在任何已知的计算机可用介质中,诸如磁带、半导体、磁 盘、或光盘(例如,CD-ROM、DVD-ROM等)、网络、有线、无线或其它 通信介质。在此描述的装置和方法的实施例可以包括在半导体知识产权核心 中,诸如处理器核心(例如,用HDL实现或指定的),并在集成电路的生产 中被转换为硬件。另外,在此描述的装置和方法可以被实现为硬件和软件的 组合。因此,本发明不应该被在此描述的任何示范性实施例限制,但是应该 仅根据以下权利要求及其等效物来限定。具体地,本发明可以在可以用在通 用计算机中的处理器设备之内实现。最终,本领域技术人员应该理解,在不 脱离由所附权利要求所限定的本发明的范围的情况下,他们可以容易地使用 所公开的构思和特定实施例作为设计或修改用于实践本发明的相同目的的 其它结构的基础。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号