循环缓冲器打包的制作方法

文档序号:6507727阅读:174来源:国知局
循环缓冲器打包的制作方法
【专利摘要】本发明涉及循环缓冲器打包。公开了在循环缓冲器中打包循环的多个迭代的方法、装置和处理器。在由处理器执行的指令流中检测满足缓冲标准的循环候选。当循环被写入到循环缓冲器中并检测到循环末尾时,如果循环缓冲器还不是半满的,则循环的另一迭代被写入到循环缓冲器。这样,短循环被多次写入到循环缓冲器以在处理器处于循环缓冲模式时最大化循环缓冲器的每周期指令操作吞吐量。
【专利说明】循环缓冲器打包
【技术领域】
[0001]本发明总体上涉及处理器,更特别地,涉及用于在循环缓冲器中打包循环的多个迭代的方法和机制。
【背景技术】
[0002]现代的处理器系统趋向于以多级流水线方式构成。典型的流水线通常包括用于抓取指令、解码指令、映射指令、执行指令以及然后将结果写到另一单元诸如寄存器的单独单元。微处理器的指令抓取(fetch)单元负责为处理器流水线的下一级提供恒定的指令数据流。通常,抓取单元利用指令高速缓存以保持流水线其余部分被连续地供给有指令。抓取单元和指令高速缓存在执行其规定功能时往往消耗大量功率。现代微处理器的目标是尽可能多地减小功耗,特别是对于在电池供电的移动设备中使用的微处理器而言。
[0003]在许多软件应用(application)中,相同的软件步骤可能被重复多次以执行特定的功能或任务。在这些情况下,抓取单元将继续抓取指令和消耗功率,即使同一循环的指令被连续执行。如果循环可以被检测并被高速缓存在循环缓冲器中,则在循环执行时抓取单元可以关闭以降低功耗。但是,在使用循环缓冲器的同时最大化处理器流水线中的指令吞吐量可能是挑战性的。这可能导致处理器以低于全效率工作。

【发明内容】

[0004]公开了用于最大化循环缓冲器的每周期指令吞吐量的装置、处理器和方法。为了最大化每周期指令吞吐量,循环缓冲器可打包有循环的多个迭代。在一实施例中,处理器流水线的前端可包括抓取单元、循环缓冲器和循环缓冲器控制单元。循环缓冲器控制单元可监控和跟踪循环候选,并确定哪些循环候选应被高速缓存在循环缓冲器中。
[0005]在一实施例中,当循环候选满足高速缓存标准时,循环缓冲器控制单元可向抓取单元发回信号以告知循环的开始需被写入到循环缓冲器的第一时隙。在抓取单元中,循环候选的向后采纳分支可被识别和标记。然后,下一指令可被识别并标记为循环的开始。当抓取单元从循环缓冲器控制单元接收到循环候选应被高速缓存在循环缓冲器中的信号时,抓取单元可以在向后采纳分支之后故意停滞。然后,在下一时钟周期,抓取单元可将识别为循环开始的指令输出到循环缓冲器的第一时隙。另外,在将循环的最后迭代写入到循环缓冲器结束时,当遇到向后采纳分支时,抓取单元可在向后采纳分支被写入到循环缓冲器之后故意停滞。
[0006]在一实施例中,当循环迭代的向后采纳分支被写入到循环缓冲器时,可确定循环缓冲器是否至少是半满的。如果循环缓冲器不是半满的,则循环的另一迭代可被写入到循环缓冲器。如果循环缓冲器是半满的,则对循环缓冲器的写入可终止。在完成对循环缓冲器的写入之后,循环的迭代可从循环缓冲器分派到处理器流水线的下一级。
[0007]在一实施例中,一种装置可包括循环缓冲器和耦合到循环缓冲器的循环缓冲器控制单元。循环缓冲器控制单元可包括检测单元和写入单元。所述检测单元可以操作为检测指令流中的循环。写入单元可以操作为使循环的两个或更多迭代被写入到循环缓冲器。
[0008]在一示例中,写入单元可进一步操作为响应于确定循环缓冲器至少不是半满而使循环的另一迭代被写入到循环缓冲器。循环缓冲器控制单元可进一步包括防止单元,其操作为响应于确定循环缓冲器至少半满而防止循环的额外迭代被写入到循环缓冲器。
[0009]在一示例中,该循环缓冲器控制单元可进一步包括确定单元,其操作为基于到循环缓冲器的写指针的位置而确定循环缓冲器是否半满。
[0010]在一示例中,写入单元可进一步操作为,响应于确定给定迭代中的向后采纳分支没有写入到循环缓冲器中的行的最右条目,使所述循环的另一迭代被写入到循环缓冲器。循环缓冲器控制单元可进一步包括防止单元,其操作为响应于确定来自给定迭代的向后采纳分支被写入到循环缓冲器的行的最右条目而防止循环的额外迭代被写入到循环缓冲器。
[0011]在一示例中,该循环缓冲器控制单元可进一步包括确定单元,其操作为当所述装置处于循环缓冲模式时,基于循环缓冲器的最大每周期指令操作吞吐量而确定写入到循环缓冲器的循环的迭代数目。
[0012]在一示例中,该装置可进一步包括排列器,其配置为将循环的第一迭代的第一指令操作写入到循环缓冲器的第一行中的第一时隙。
[0013]在一示例中,循环缓冲器可进一步包括分派单元,其操作为响应于装置进入循环缓冲模式而分派所述循环的两个或更多迭代的指令操作。
[0014]在另一实施例中,处理器可包括循环缓冲器和耦合到循环缓冲器的循环缓冲器控制单元。循环缓冲器控制单元可配置为检测指令流中的循环。循环缓冲器可进一步包括操作为存储循环的多个迭代的存储单元和分派单元,所述分派单元操作为响应于处理器进入循环缓冲模式而分派循环的多个迭代的指令。
[0015]在一示例中,该处理器可以进一步包含配置为识别和标记循环的开始的抓取单
J Li ο
[0016]在一示例中,抓取单元可进一步包括排列器。排列器可以包括配置为识别循环迭代边界的识别单元。
[0017]在一示例中,排列器可进一步包括停滞单元,其操作为响应于所述处理器进入循环缓冲模式而在检测到循环的先前迭代的向后采纳分支之后导致停滞。
[0018]在一示例中,停滞单元可进一步操作为在检测到循环的最后迭代的向后采纳分支被写入到循环缓冲器之后导致停滞。
[0019]在一示例中,排列器可进一步包括分配单元,其操作为在第一时钟周期中将循环的第一迭代的向后采纳分支分配到第一时隙。在一示例中,分配单元可进一步操作为在第一时钟周期中将循环的第二迭代的第一指令操作分配到第二时隙。第二时隙与第一时隙相邻。
[0020]鉴于下面对这里给出的方案的详细描述,这些和其他特征和优点将对本领域技术人员而言变得显然。
【专利附图】

【附图说明】
[0021]结合附图参照下面的描述,可以更好地理解方法和机制的上述和其他优点,附图中:[0022]图1示出集成电路的一部分的一实施例。
[0023]图2是示出处理器核的一实施例的框图。
[0024]图3是示出处理器流水线的前端的一实施例的框图。
[0025]图4示出抓取和解码单元内的循环缓冲器的另一实施例的框图。
[0026]图5是排列器的一实施例。
[0027]图6示出在循环缓冲器中高速缓存的循环的一实施例。
[0028]图7示出在循环缓冲器中高速缓存的循环的多个迭代的一实施例。
[0029]图8示出在循环缓冲器中高速缓存的循环的多个迭代的另一实施例。
[0030]图9是示出跟踪循环候选者的方法的一实施例的概括流程图。
[0031]图10是系统的一实施例的框图。
[0032]图11是计算机可读介质的一实施例的框图。[0033]图12是根据一些实施例的装置的功能框图。
[0034]图13是根据一些实施例的处理器的功能框图。
具体实施例
[0035]在下面的描述中,阐述了许多特定细节以提供对本文所述方法和机制的透彻理解。然而,本领域普通技术人员应理解,没有这些特定细节也可以实施各种实施例。在某些情况下,公知的结构、部件、信号、计算机程序指令和技术未被详细示出,以避免模糊本文所描述的方法。将理解,为了简单和清楚地说明,在图中所示的元件不一定按比例绘制。例如,一些元件的尺寸相对于其他元件可能被夸大了。
[0036]本说明书中提及了“一实施例”。在不同上下文中短语“在一实施例中”的出现不一定是指同一实施例。特定的特征、结构或特性可以按与本公开一致的任何合适方式被组合。此外,在整个本申请中使用时,词语“可”用在许可的意义上(即,意思是具有可能性),而不是强制意义上(即,意思是必须)。类似地,词语“含有”、“包括”、“包含”是指包括但不限于。
[0037]术语。以下段落提供本公开(包括所附权利要求书)中发现的术语的定义和/或上下文。
[0038]“包括”。这个术语是开放式的。在所附权利要求中使用时,该术语并不排除另外的结构或步骤。考虑描述“一种处理器,包括循环缓冲器控制单元...”的权利要求,这种权利要求并不排除处理器包括其他组件(例如高速缓存、抓取单元、执行单元)。
[0039]“配置为”。各种单元、电路或其他组件可被描述为或声称为“配置为”执行一项或多项任务。在这样的上下文中,“配置为”用于通过描述单元/电路/组件包括在操作期间执行一项任务或多项任务的结构(例如,电路系统)来表示结构。因此,可以说单元/电路/组件配置为执行任务,即使当指定的单元/电路/组件当前没有运行(例如,没有开启)。与语言“配置为” 一起使用的单位/电路/组件包括硬件,例如电路、储存可执行来实施操作的程序指令的存储器等。对单位/电路/组件“配置为”执行一个或更多任务的描述明确地无意援引35U.S.C.§ 112第六款用于该单元/电路/组件。此外,“配置为”可以包括由软件和/或固件(例如,FPGA或执行软件的通用处理器)操纵从而以能够执行当前任务的方式操作的通用结构(例如,通用电路系统)。“配置为”还可以包括使制造工艺(例如,半导体制造设备)适应于制造适于实施或执行一个或多个任务的器件(例如,集成电路)。
[0040]“基于”。本文使用时,该术语用于描述影响确定(determination)的一个或多个因素。这个术语并不排除可能会影响确定的另外的因素。也就是说,确定可仅基于这些因素或至少部分地基于这些因素。考虑短语“基于B确定A”。虽然B可能是影响确定A的因素,但这样的短语并不排斥还基于C确定A。在其他情况中,也可以仅基于B确定A。
[0041]现在参见图1,显示了示出集成电路(IC)的一部分的一实施例的框图。在所示实施例中,IClO包括处理器复合体12、存储器控制器22以及存储器物理接口电路(PHY) 24和26。注意,IClO还可以包括图1未示出的许多其它组件。在各种实施方式中,IClO也可以被称为芯片上系统(SoC)、专用集成电路(ASIC)或装置。
[0042]处理器复合体12可以包括中央处理单元(CPU) 14和16、二级(L2)高速缓存18以及总线接口单元(BIU) 20。在其它实施例中,处理器复合体12可包括其它数目的CPU。CPU 14和16也可以被称为处理器或核。注意,处理器复合体12可包括图1未示出的其他组件。
[0043]CPU14和16可包括执行指令集架构中定义的指令的电路系统。具体而言,包括指令的一个或多个程序可以由CPU14和16执行。在各种实施例中可以实施任何指令集架构。例如在一实施例中,可以实施ARM?指令集架构(ISA)。ARM指令集包括16位(或Thumb)和32位指令。其他示例性ISA可包括PowerPC?指令集、MIPS?指令集、SPARC?指令集、x86指令集(也称为IA-32)、IA-64指令集等。
[0044]在一实施例中,由CPU14和16执行的每个指令可与程序计数器(PC)值相关联。另夕卜,可在用于读写的一些指令中指定一个或多个架构寄存器(architectural register)。这些架构寄存器通过寄存器重命名单元映射到实际物理寄存器。此外,一些指令(例如,ARMThumb指令)可被分解为指令操作(或微操作)的序列,序列的每个指令操作可由唯一微操作(或uop)数引用。
[0045]CPU14和16中的每个还可以包括一级(LI)高速缓存(未示出),每介LI高速缓存可以耦合到L2高速缓存18。其他实施方式可包括附加级别的高速缓存(例如,三级(L3)高速缓存)。在一实施例中,L2高速缓存18可配置为对指令和数据进行高进缓存以供CPU14和16低延迟地访问。L2高速缓存18可包括任何容量和配置(例如直接映射、集关联)。L2高速缓存18可通过BIU20耦合到存储器控制器22。BIU20还可以包括各种其它逻辑结构,以将CPU14和16以及L2高速缓存18耦合到各种其他器件和块。
[0046]存储器控制器22可包括任意数量的存储器端口,并可包括配置接口连接到存储器的电路系统。例如,存储器控制器22可配置为接口连接到动态随机存取存储器(DRAM),诸如同步 DRAM (SDRAM)、双数据速率(DDR) SDRAM、DDR2SDRAM、Rambus DRAM (RDRAM)等。存储器控制器22还可以耦合到存储器物理接口电路(PHY) 24和26。存储器PHY24和26代表可耦合到存储器控制器22的任意数量的存储器PHY。存储器PHY24和26可以配置为接口连接到存储器设备(未示出)。
[0047]注意,其它实施例可以包括组件的其他组合,包括图1所示的组件的子集或超集和/或其他组件。虽然给定组件的一个实例示于图1,但是其它实施例可包括给定组件的两个或更多实例。类似地,贯穿本详细描述,可包括给定组件的两个或更多个实例,即使只示出一个,和/或可以使用仅包括一个实例的实施例,即使示出多个实例。
[0048]现在转向图2,示出处理器核的一实施例。核30是处理器核的一个示例,核30可用在处理器复合体(诸如图1的处理器复合体12)中。在一实施例中,图1的CPU14和16中的每个可包括核30的组件和功能。核30可包括抓取和解码(FED)单元32、映射和分派单元36、存储器管理单元(MMU)40、核接口单元(CIF)42、执行单元44和加载-储存单元(LSU) 46。注意,核30可包括图2未示出的其他组件和接口。
[0049]FED单元32可包括配置为从存储器读取指令并将其置于一级(LI)指令高速缓存33中的电路系统。LI指令高速缓存33可以是用于存储供核30执行的指令的高速缓存存储器。LI指令高速缓存33可具有任何容量和结构(例如直接映射、集关联、完全关联等)。此外,LI指令高速缓存33可具有任何高速缓存线大小。FED单元32还可包括配置为预测分支指令并按预测路径进行抓取的分支预测硬件。FED单元32还可以被重定向(例如,通过预测错误、异常、中断、清除等)。
[0050]在一实施例中,FED单元32可配置为将指令解码为多个步骤中的指令操作。另外,FED单元32还可以配置为并行地解码多个指令。更具体地,指令可以被拉出LI指令高速缓存33,并被解码成预解码指令,排列器34可配置为将预解码指令递送到循环缓冲器35的适当通道(lane)和/或解码器单元(未示出)。解码器单元可配置为执行解码的剩余部分以将预解码指令转换为指令操作。
[0051]一般而言,指令操作可以是执行单元44和LSU46中包括的硬件能执行的操作。每个指令可以转化为一个或多个指令操作,其在执行时引起根据指令集架构为该指令定义的操作的执行。注意,贯穿本公开,术语“指令操作”和“微操作(UOP)”可互换地使用。在其他实施例中,FED单元32内包括的功能可被分成两个或更多单独单元,诸如抓取单元、解码单元和/或其它单元。
[0052]在各种ISA中,一些指令可解码成单个uop。FED单元32可配置为识别指令类型、源操作数等,每个解码指令操作可包括该指令以及一些解码信息。在每个指令转换为单个uop的另一些实施例中,每个uop可以仅是相应指令或其一部分(例如,指令的一个或多个操作码字段)。在一些实施例中,FED单元32可包括用于产生指令的uop的电路系统和/或微码的任何组合。例如,相对简单的uop生成(例如,每条指令一个或两个uop)可以在硬件中处理,而更大规模的uop生成(例如,一指令有三个以上uop)可在微码中处理。
[0053]解码的uop可被提供到映射/分派单元36。映射/分派单元36可配置为将uop和架构寄存器映射到核30的物理寄存器。映射/分派单元36可实施寄存器重命名以将uop的源寄存器地址映射到标识重命名源寄存器的源操作数编号。映射/分派单元36也可配置为将Uop分派到执行单元44和LSU46中的保留站(未示出)。
[0054]在一实施例中,映射/分派单元36可包括重排序缓冲器(ROB) 38。在另一些实施例中,R0B38可以位于其他位置。在被分派之前,uop可以被写入到R0M38。R0B38可配置为保持uop,直至他们能被顺序提交。可向每个uop分配对应R0M38中的特定条目的ROB索引(RNUM)。RNUM可用于跟踪核30中运行的操作。映射/分派单元36还可包括图2未示出的其他组件(例如映射器阵列、分派单元、分派缓冲器)。此外,在其它实施例中,映射/分派单元36中包含的功能可分成两个或更多个单独单元,诸如映射单元、分派单元和/或其他单元。
[0055]执行单元44可包括任何数量和类型的执行单元(例如整数、浮点、矢量)。每个执行单元44还可包括一个或多个保留站(未示出)。CIF42可耦合到LSU46、FED单元32、MMU40和L2高速缓存(未示出)。CIF42可配置为管理核30和L2高速缓存之间的接口。MMU40可配置为执行地址转换和存储器管理功能。
[0056]LSU46可包括LI数据高速缓存48、存储队列50和加载队列52。加载和存储操作可从映射/分派单元36分派到LSU46中的保留站。存储队列50可存储对应于存储操作的数据,加载队列52可以存储与加载操作相关的数据。LSU46还可以经CIF42耦合到L2高速缓存。注意,LSU46还可包括图2未示出的其它组件(例如保留站、寄存器文件、预抓取单元、转换旁视缓冲器)。
[0057]应理解,图2所示的功能分布不是可用于处理器核的唯一可行微架构。其他处理器核可包括其它组件,省略一个或多个所示组件,和/或包括组件之间的不同功能布置。
[0058]现在参考图3,示出处理器流水线的前端的一实施例的框图。在一实施例中,图3所示的前端逻辑可位于抓取和解码单元内,诸如FED单元32 (图2)。应理解,图3所示的功能分布仅是实现处理器流水线内的循环缓冲器的一种可行结构。实现循环缓冲器的逻辑器的其他合适分布是可行且可预期的。
[0059]抓取前端60可配置为抓取和预解码指令,然后将预解码的uop输送到循环缓冲器62和解码器70A-F (通过多路复用器68)。在一实施例中,抓取前端60可配置为每周期输出6个预解码uop。在其它实施例中,抓取前端60可配置为每周期输出其它数量的预解码uop。
[0060]循环缓冲器62、多路复用器68和解码器70A-F可具有用于每周期处理和/或存储六个UOP的六个通道。每个通道可包含有效位以表示通道是否包含有效uop。注意,循环缓冲器62、多路复用器68和解码器70A-F的“通道”也可以被称为“时隙(slot) ”或“条目”。在其它实施例中,循环缓冲器62、多路复用器68和解码器70A-F可包括多于或少于六个通道,抓取前端60可配置为每周期输出流水线的下一级可容纳的那么多的uop。
[0061]抓取前端60可从指令高速缓存(未示出)获取原始指令数据,检测数据中的指令边界,将指令缓存在指令高速缓存器(未示出)和/或排列器(未示出)中,将指令扩展为高达六个UOP的集合,并为这些UOP生成适当的有效负载。将每个高达六个UOP的集合称为“解码组”。在其它实施例中,解码组可包括其它数量的uop。解码组可在每个时钟周期被传递到循环缓冲器62和多路复用器68的通道。这里使用时,“通道”可定义为包括逻辑器的路径,所述逻辑器配置为在每个时钟周期中处理和/或存储uop。
[0062]抓取前端60可将指令扩展成uop并将这些uop馈送到循环缓冲器62和多路复用器68。在一实施例中,由抓取前端60抓取并解码为预解码uop的指令可以基于ARM ISA。每个预解码uop可包括指令操作码位、指令预解码位和uop编号。指令操作码位指定将执行的操作。预解码位指示指令映射到的uop的编号。uop编号表示应产生多uop指令序列中的哪个uop。在其它实施例中,可以利用其他ISA,指令可以被解码并以多种方式格式化。
[0063]当处理器不是循环缓冲模式时,则抓取前端60所产生的预解码uop可以通过多路复用器68传送到解码器70A-F。来自循环缓冲器控制单元64的选择信号可耦合到多路复用器68以确定哪条路径通过多路复用器68耦合到解码器70A-F的输入端。当处理器是循环缓冲模式时,可从循环缓冲器62读出预解码uop并输送到解码器70A-F。预解码uop可被解码,然后从解码器70A-F的输出端输送到处理器流水线的下一级。在一实施例中,处理器流水线的下一级可以是映射/分派单元,诸如图2的映射/分派单元36。[0064]循环缓冲器控制单元64可配置为识别所抓取和预解码的指令中的循环。一旦循环被识别为具有某一确定程度,则循环缓冲器控制单元64可使循环被高速缓存在循环缓冲器62中,抓取前端60可以关闭,然后可从循环缓冲器62向其余的处理器流水线进行馈送。循环的多个迭代可被高速缓存在循环缓冲器62中,这些高速缓存的迭代可以重复地沿流水线分派。当将循环的迭代写到循环缓冲器62时,循环缓冲器控制单元64可利用写指针以确定哪一行正被写入到循环缓冲器62。类似地,当从循环缓冲器62读取时,读指针可用于指向正读取的行。
[0065]为了识别用于高速缓存的循环,首先检测抓取指令中的“向后采纳分支”(backwards taken branch)。“向后采纳分支”可定义为分支到指令序列中的先前指令的采纳分支。向后采纳分支到达的指令可被视为循环的开始。在一实施例中,只有某些类型的循环可以被认为是用于缓冲的候选。例如,在一实施例中,对于所考虑的用于缓冲的循环候选,该循环的所有迭代都应是不变的。
[0066]循环缓冲器控制单元64可监视指令流以寻找形成满足循环缓冲标准的循环的指令。循环缓冲器控制单元64可以捕获给定循环候选的所有信息。对于某一时段,循环候选可被跟踪多个迭代以确保该循环候选保持相同。例如,从循环起始到循环内的一个或多个指令的距离可在第一迭代时被记录,并在随后的迭代中被监视,以确定这些距离是否保持相同。
[0067]在一些实施例中,即使循环候选是不变的并满足上面列出的其他标准,循环候选的其他特性也可能使其不满足被高速缓存在循环缓冲器62中的条件。例如,如果循环候选的尺寸过大而不适应循环缓冲器62,则循环候选可能不符合条件。此外,可能有循环内最大容许采纳分支数,等于分支跟踪表66的大小。如果采纳分支的数量超过这个数字,则循环可被排除到考虑高速缓存在循环缓冲器62中的候选之外。在一实施例中,分支跟踪表66可包括用于循环内采纳分支的八个条目。在其它实施例中,分支跟踪表66可具有用于循环内采纳分支的多于或少于8个的条目。
[0068]在一实施例中,一旦已不止一次检测到相同的向后采纳分支,则捕获循环的该信息的状态机可由循环缓冲器控制单元64启动。例如,循环缓冲器控制单元64可利用分支跟踪表66来跟踪循环候选的采纳分支。分支跟踪表66可跟踪从循环开始到每个采纳分支的距离。
[0069]如果循环的每个迭代执行为使得从循环的开始到每个分支有相同数量的uop,则循环候选可被认为是不变的。在确定循环候选是不变的且应被高速缓存之前,到表66中的每个分支的距离可被跟踪一定的迭代次数。所分配的跟踪循环候选的不变性的时间量可以基于循环迭代次数和/或遇到分支的次数。
[0070]现在转向图4,显示抓取和解码单元中的循环缓冲器的另一实施例。在一实施例中,循环缓冲器84可在处理器流水线中位于解码器82A-F下游,如图4所示。这与(图3的)循环缓冲器62相反,其在处理器流水线中位于解码器70A-F上游。在一实施例中,循环缓冲器84可以被组织为行和列(或通道)。在一实施例中,循环缓冲器84可以有16行和6列。在其它实施例中,循环缓冲器84可以包括其它数量的行和列。
[0071]抓取前端80可抓取指令并将所抓取的指令预解码成预解码uop。然后,预解码的UOP可被输送到解码器82A-F。在一实施例中,抓取前端80可配置为每周期产生和传输六个预解码的Uop到解码器82A-F的六个通道。解码器82A-F可将预解码uop解码为解码uop。然后,解码器82A-F可将解码的uop通过多路复用器90传输到处理器流水线的下一级。此夕卜,当循环候选已被识别并满足被高速缓存到循环缓冲器84的标准时,解码器82A-F可将uop传输到循环缓冲器84。多路复用器90的输出可以耦合到处理器流水线的下一级。在一实施例中,处理器流水线的下一级可以是映射/分派单元。
[0072]循环缓冲器84、循环缓冲器控制单元86和分支跟踪表88可配置为执行与关于图3所示的处理器前端描述的那些类似的功能。图4中的一个关键区别在于,循环缓冲器84可以存储解码U0P,与图3中存储预解码UOP的循环缓冲器62相反。因此,循环缓冲器84的尺寸可以大于循环缓冲器62,以容纳更大数据量,因为解码uop通常比预解码uop具有更多信息。注意,除了图3和4所示的两个位置之外,循环缓冲器84也可以位于处理器流水线内的其他位置。例如,循环缓冲器84可以位于抓取前端内,或替换地,循环缓冲器84可以位于映射/分派单元内。取决于循环缓冲器位于流水线中的位置,循环缓冲器中存储的循环内容可根据流水线中在该点已执行的指令处理量而有所不同。
[0073]在一实施例中,在循环候选的初始迭代时,循环缓冲器控制单元86可使用从循环开始到循环的每个采纳分支的距离填充分支跟踪表88。在循环的后续迭代中,控制单元86可确定每个分支与循环开始的距离是否与表88中存储的对应距离相同。在循环候选对于某一迭代次数一直不变之后,则循环候选可高速缓存在循环缓冲器84中并从循环缓冲器84馈送到流水线的其余部分。当循环正被从循环缓冲器84分派到处理器流水线的其余部分时,抓取前端80和解码器82A-F可被断电。
[0074]现在参考图5,不出排列器的一实施例。排列器100可以是抓取单兀的一部分,排列器100可包括指令队列102和指令闩(crossbar) 104。可在指令高速缓存(未示出)中的指令数据内检测指令边界,然后指令可被传送到指令队列102。指令队列102可具有任何容量和结构。排列器100可配置为保持每时钟周期向解码器单元供给适当数目的预解码指令,其中该适当数目基于处理器架构。例如,在一实施例中,可以有6个解码器,因此排列器100可配置为每时钟周期产生并输送多达六个预解码uop到六个解码器。在其它实施例中,排列器100可配置为每时钟周期生成其它数目的预解码uop。
[0075]每个时钟周期,排列器100可以查看指令队列102中与指令序列的下六个uop对应的指令。排列器100可以通过指令円104将这些指令分配到合适的解码器时隙。排列器100还可配置为识别循环迭代的边界(例如,迭代边界103)。例如,当循环候选满足高速缓存标准时,则可识别最近迭代的向后采纳分支(BTB),即指令C。
[0076]在图5所示的示例中,指令队列102中所示指令包括指令A、B、C (BTB)、D、E和F。由于指令D跟随BTB,所以D可被标记为循环的开始。每个指令可以被分解成一个或多个uop,当指令被填充到指令高速缓存时,指令映射的多个uop可被预解码。当确定循环应被高速缓存在循环缓冲器(未示出)中时,循环缓冲器控制单元(未示出)可向排列器100发送信号以在循环的BTB后停滞(stall)。
[0077]如图5所示,排列器100可在在时钟周期‘N’中仅将三个uop写到解码器时隙中。这三个uop是A、B和C(BTB)。指令A、B和C中的每个在这个示例中是单uop指令。可以看出,在时钟周期‘N’中,时隙3-5为空,因为BTB (指令C)被分配到时隙2。排列器100在BTB分配到解码器时隙后停滞,于是在时钟周期‘N’剩余时隙未被填充。在下一时钟周期,排列器100将循环的开始分配到时隙O。指令D是循环的开始,在这个示例中,指令D是3个uop的指令,所以相应的三个uop(D-0、D-l和D-2)在时钟周期‘Ν+1中被分配给解码器时隙0-2。对应于指令E的两个uop占用时隙3和4,对应于指令F的uop可以在时钟周期‘Ν+1中被分配给时隙5。
[0078]在时钟周期‘N’和‘Ν+1中所示的uop可被输送到解码器单元和循环缓冲器。当循环被写入到循环缓冲器时,循环可继续被馈送到流水线的下一级(例如,解码器)。在循环的一个或多个迭代被写入到循环缓冲器之后,流水线的后端可由循环缓冲器馈送,前端可断电。
[0079]排列器100也可在被写到循环缓冲器的循环的最后迭代的末尾以类似方式停滞。BTB被分配到的任何时隙将是循环缓冲器内的该行中被写入的最后时隙。例如,如果BTB在将最后循环迭代写到循环缓冲器的最后时钟周期中被写入到时隙1,则剩余时隙(时隙2-5)可留为空。以此方式,当从位于循环缓冲器第一行的时隙O的循环的第一迭代的第一uop开始将循环从循环缓冲器读出时,在下一时钟周期可以有干净的切换(handoff)。
[0080]现在参考图6,显示将循环的单次迭代打包到循环缓冲器中的一实施例。在这个示例中,循环可以是7个uop的循环,每个uop在循环缓冲器110中标有“循环I”。注意,这仅是循环的一个示例,其他循环可包括其它数量的uop。还应注意,循环缓冲器110可位于处理器流水线内的任何不同位置,两个位置示例示于图3和图4中。虽然循环缓冲器110示为包括六个通道(标记为0-5),但是应注意,其他循环缓冲器可具有其它通道数。还应注意,循环缓冲器110的“通道”也可被称为“时隙”或“列”。
[0081]循环I的头六个uop可被写入到循环缓冲器110中的第一行。最后的uop(对应于向后采纳分支)可填充循环缓冲器110的第二行的第一条目。对于该循环,将花费两个周期来将循环分派到处理器流水线的下一级,每周期输出的平均UOP将是3.5 (两个时钟周期中七个uop)。这远小于每周期六个uop的最大可行每周期uop吞吐量。为了提高每周期uop吞吐量,循环的多于一个迭代可被写入到循环缓冲器110,这将在下面更详细地进行说明。
[0082]在其他实施例中,循环缓冲器110可包括除了六以外其它数量的通道。例如在另一实施例中,循环缓冲器110可具有八通道。在该实施例中,当从循环缓冲器110分派九uop的循环时,九uop的循环将具有低效率的每周期uop吞吐量。每周期指令在该示例中平均为4.5,每两个时钟周期分派九个uop。这将远低于最大可行的每周期uop吞吐量,此实施例中为八。
[0083]在各种实施例中,不同格式的指令可存储在循环缓冲器110中。利用的不同格式可包括指令、指令操作、预解码uop、解码u0p、u0p、0p或其他格式。术语“每周期指令”、“每周期指令操作”以及“每周期uop”通常可用于描述吞吐量,应理解,这些术语可涉及任何不同指令格式。
[0084]现在转向图7,显示打包到循环缓冲器中的循环的多个迭代的一实施例。在一实施例中,循环可以是七个UOP那么长。写入到循环缓冲器110的循环的第一迭代对于循环的每个uop都标有“循环1”,并显示在循环缓冲器110内的第一行和第二行的通道O中。标记为“循环2”的循环的第二迭代可写入到循环缓冲器110中,从循环的第一迭代结束的位置开始。“循环2”的第一 uop可置于与“循环I”的最后uop相同行中的相邻条目中。此外,循环的第二迭代的头五个uop可写入到循环缓冲器110的第二行的通道1-5,第二迭代的最后两个uop可写入到循环缓冲器110的第三行。该模式可对于写入到循环缓冲器110的循环的接下来的五个迭代继续。写入循环缓冲器110的每个循环迭代与其他循环迭代相同。换句话说,每个循环迭代包含与写入到循环缓冲器110的其他循环迭代准确相同的uop,并且与任何其他循环迭代不可区分。
[0085]如图7所示,循环缓冲器110具有16行条目,中间点112在第八行之后。在一实施例中,当循环的迭代被写入到循环缓冲器110时,在循环的最后uop (即向后采纳分支)已被写入到循环缓冲器110时,则循环缓冲器控制单元可以检查以查看是否已经达到中间点112。如果已经达到中间点112,则没有更多的循环迭代可被写入到循环缓冲器110。如果还没有达到中间点112,则循环的另一迭代可被写入到循环缓冲器110。
[0086]在图7所示的示例中,当处理器在循环缓冲模式时,从循环缓冲器110输出的每周期平均Uop将大约是每周期5.4个uop的吞吐量(9个周期49个uop)。与图6所示的示例中的3.5个uop的每周期平均uop吞吐量相比,这是一个改进。
[0087]现在参考图8,示出将循环的多个迭代写入到循环缓冲器的另一实施例。在本实施例中,类似于图7所示的示例,循环的多个迭代可被写入到循环缓冲器110。然而在本实施例中,当达到循环迭代的末尾时,可检查单独的条件。可检查的条件可以是,循环迭代的最后uop是否写到循环缓冲器110的最后通道(即通道5)。如果满足此条件,则循环迭代到循环缓冲器110的写入可停止。如果没有满足此条件,则可判断是否达到中间点112。如果已达到中间点112,则到循环缓冲器110的写入可停止。如果还没有达到中间点112,则循环的另一迭代可被写入到循环缓冲器110。
[0088]基于这些条件,七uop循环的六个迭代可被写入到循环缓冲器110。在循环的第六迭代被写入到循环之后,第六迭代的最后UOP被写到第七行的通道5。因此,从循环缓冲器110输出的每周期uop将被最大化,所以,不需要更多的迭代被写入到循环缓冲器110。即使尚未达到中间点112,写入也可停止。
[0089]应注意,在其他实施例中,可以在将迭代写到循环缓冲器之前确定将写入到循环缓冲器的迭代的数目。例如,循环的检测和指令的监视可包括:对包括在循环的迭代中的指令或UOP数目进行计数。此外,循环缓冲器中的可用空间可以是已知的或确定的。基于循环迭代的大小和可用的缓冲存储,可以计算多少迭代被写入到循环缓冲器。在各种实施例中,可以选择要写入的迭代数以便实现来自缓冲器的最大指令吞吐量。在其它实施例中,可对循环的多少迭代被写入到缓冲器施加附加限制。例如,可写入不超过缓冲器的给定部分(例如,一半)。许多这样的替选方案是可行的并且可预期的。
[0090]当处理器在循环缓冲模式时,利用这些条件可实现来自循环缓冲器110的高的每周期UOP吞吐量。在其它实施例中,对于其它循环尺寸,可利用这些条件。例如,九UOP尺寸的循环将导致两个迭代被写入到循环缓冲器110。循环缓冲器110的头三行会被填充,然后九uop循环没有更多迭代将被写入到循环缓冲器110。这将实现每周期六个uop的最大
可行吞吐量。
[0091]在其它实施例中,可以利用其他条件以确定是否将循环的另一迭代写入到循环缓冲器110。例如在另一实施例中,如果迭代的最后uop被写入到行的两个最右时隙中的任一个,则对循环缓冲器110的写入可终止。在又一实施例中,可以在循环迭代写入到循环缓冲器110之后计算吞吐量,然后吞吐量可与阈值进行比较。如果吞吐量在阈值之上,则对循环缓冲器110的写入可终止。如果吞吐量在阈值以下,则另一循环迭代可被写入到循环缓冲器110。这些和其它条件可被独立地使用,或在其他实施例中以任何适当的方式组合使用。
[0092]现在参考图9,显示在循环缓冲器中打包循环的多个迭代的方法120的一实施例。为了论述方便,在本实施例中的步骤按序列的顺序示出。应指出的是,在如下所述的方法的各种实施例中,所述元素中的一个或多个可以按与所示不同的顺序执行或同时执行,或者可以完全省略。还可以按需要执行其他附加元素。
[0093]在一实施例中,可以在指令流中检测循环候选(块122)。然后,循环缓冲器控制单元可确定循环候选符合循环缓冲的标准(块124)。循环缓冲器控制单元然后可以为循环候选启动循环缓冲模式(块126)。当循环缓冲模式启动时,可标记循环终止分支uop,以便它可被识别为循环末尾。循环终止分支可定义为不包括子例程调用的直接向后采纳分支。此夕卜,循环的第一 uop (循环终止分支之后的下一个uop)可被标记为循环开始。抓取单元的排列器可在循环终止分支之后停滞,以便循环的第一 uop被写入到循环缓冲器的第一行的时隙0(块128)。
[0094]接着,循环的单个迭代可被写入到循环缓冲器(块130)。由于循环的迭代正被写入到循环缓冲器,所以在迭代的末尾可检测到循环终止分支(块132)。响应于检测到循环终止分支,循环缓冲器控制单元可以检查以查看循环缓冲器是否已经半满(条件块134)。在一实施例中,循环缓冲器控制单元可以监视循环缓冲器的写指针,并查看写指针是否已经经过了循环缓冲器的中间点。
[0095]如果循环缓冲器小于半满(条件块134),则循环的另一迭代可被写入到循环缓冲器(块130)。对于该迭代,该循环的第一 uop (即,循环开始)可被写入到在循环的先前迭代的循环终止分支之后的下一相邻时隙,其可以是循环缓冲器的同一行,如果循环终止分支位于行的除了最右时隙之外的任何时隙的话。这与循环的第一迭代如何被写入到循环缓冲器相反。对于该第一迭代,排列器可以在先前迭代的循环终止分支之后停滞,使得第一迭代的第一 uop被写入到循环缓冲器的第一行的第一(或最左)时隙。
[0096]如果循环缓冲器超过半满(条件块134),则循环缓冲器控制单元可以向前端发信号以停止向循环缓冲器写入循环的更多迭代(块136)。对于循环的最后迭代,在分派循环终止分支之后抓取单元的排列器可以被停止。以此方式,当处理器进入循环缓冲模式时,可以有干净的切换以从循环缓冲器派出uop。此外,当处理器进入循环缓冲模式时,指令队列中的uop和处理器流水线前端中进一步上游的指令可被冲刷。在块136之后,循环缓冲器可以将循环的一个或多个迭代令派到处理器流水线的下一级(块138)。在循环正被分派出循环缓冲器时,处理器的前端可被关闭。
[0097]在一实施例中,可储存已写入到循环缓冲器的行数。循环缓冲器控制单元可使用所存储的有效行数来确定什么时候没有更多的有效行要从循环缓冲器读出。例如,当成行的uop被分派到处理器流水线的下一级时,读指针可步进通过循环缓冲器的行,当如所存储的有效行数指示的那样,循环缓冲器中没有更多的有效行时,读指针可重置回到循环缓冲器的顶部。
[0098]在块138后,当循环终止时,方法120可结束。在循环终止之后,前端可被重新启动,抓取单元可向处理器流水线的其余部分提供指令。[0099]接下来参照图10,显示系统140的一实施例的框图。如图所示,系统140可表示桌面计算机150、膝上型计算机160、平板计算机170、手机180或其他设备的芯片、电路系统、组件等。在图示的实施例中,系统140至少包括耦合到外部存储器142的IClO(图1)的一个实例。
[0100]IClO被耦合到一个或多个外围设备144和外部存储器142。还提供电源146,其向IClO提供电源电压并向存储器142和/或外围设备144提供一个或多个电源电压。在各种实施方式中,电源146可以表示电池(例如,智能电话、膝上型或平板计算机的可充电电池)。在一些实施例中,可包括IClO的多个实例(也可包括一个以上的外部存储器142)。
[0101]存储器142可以是任何类型的存储器,诸如动态随机存取存储器(DRAM)、同步DRAM (SDRAM)、双数据速率(DDR,DDR2, DDR3等)SDRAM (包括诸如mDDR3等的SDRAM的移动版本、和/或诸如LPDDR2等的SDRAM的低功率版本)、RAMBUS DRAM (RDRAM)、静态RAM (SRAM)等。一个或多个存储设备可以耦合到电路板上以形成存储模块,诸如单列直插存储模块(SIMM)、双列直插存储模块(DIMM)等。
[0102]外围设备144可根据系统140的类型而包括任何所需电路。例如在一实施例中,夕卜围设备144可以包括用于不同类型的无线通信(例如WiF1、蓝牙、蜂窝、全球定位系统等)的设备。外围设备144还可以包括额外的储存器,包括RAM储存器、固态储存器材或磁盘储存器。外围设备144可以包括诸如显示屏的用户接口设备,包括触控显示屏或多点触控显示屏、键盘或其它输入设备、麦克风、扬声器等。
[0103]现在转向图11,显示了包括一个或多个数据结构(表示(图1的)IClO中包括的电路系统)的计算机可读介质190的框图的一实施例。一般而言,计算机可读介质190可以包括诸如磁介质或光介质的任何非暂时性储存介质,例如盘、CD-ROM或DVD-R0M,易失性或非易失性存储介质,诸如RAM(例如,SDRAM、RDRAM、SRAM等)、ROM等,以及通过传输介质或信号(诸如电、电磁或数字信号)可访问的介质,所述传输介质或信号通过通信介质(诸如网络和/或无线链路)被传送。
[0104]一般来说,计算机可读介质190上的电路系统的数据结构可通过程序读出并直接或间接使用,以制造包含电路系统的硬件。例如,数据结构可包括高级设计语言(HDL)(例如Verilog或VHDL)编写的硬件功能的一个或多个行为级描述或寄存器传输级(RTL)描述。描述可由合成工具读取,该合成工具对描述进行合成以产生包括来自合成库的门的列表的一个或多个网表。网表包括一组门,门还表不包含电路系统的硬件的功能。网表然后被安置和路由以产生描述将应用到掩模的几何形状的一个或多个数据集。掩模然后可以应用于各种半导体制造步骤中以产生与所述电路系统对应的半导体电路。可替换地,根据需要,计算机可读介质190上的数据结构可以是网表(具有或不具有合成库)或数据集。在另一替代中,数据结构可以包括示意性程序的输出或者从其衍生的网表或数据集。
[0105]虽然计算机可读介质190包括IClO的表示,其它实施例可以包括IClO的任何部分或部分组合的表示(例如循环缓冲器、循环缓冲器控制单元、排列器)。
[0106]根据一些实施例,图12示出根据上述本发明的原理配置的装置200的功能框图,图13示出根据上述本发明的原理配置的处理器300的功能框图。装置和处理器的功能块可以由硬件、软件或硬件和软件的组合实现以执行本发明的原理。本领域技术人员将理解,图12和13所述的功能块可以组合或分成子块以实施如上所述的本发明的原理。因此,本文的描述可以支持本文所述功能块的任何可能的组合或分割或进一步的定义。
[0107]在一实施例中,如图12所示,装置200可包括循环缓冲器210和循环缓冲器控制单元220。循环缓冲器控制单元220可耦合到循环缓冲器210。循环缓冲器控制单元220可包括检测单元221和写入单元222。检测单元221可操作来检测指令流中的循环。写入单元222可以操作来使该循环的两个或更多迭代被写入到循环缓冲器210。
[0108]在一实例中,响应于确定循环缓冲器210不是至少半满,写入单元222可还操作为使循环的另一迭代被写入到循环缓冲器210。循环缓冲器控制单元220还可包括防止单元223。响应于确定循环缓冲器210是至少半满,防止单元223可以例如操作为防止循环的额外迭代被写入到循环缓冲器210。
[0109]在一实例中,循环缓冲器控制单元220还可包括确定单元224。确定单元224可以例如操作为基于到循环缓冲器210的写指针的位置确定循环缓冲器210是否是半满。
[0110]在一实施例中,响应于确定给定迭代中的向后采纳分支没有被写入到循环缓冲器210中的行的最右条目,写入单元222可操作为使循环的另一迭代被写入到循环缓冲器210。响应于确定来自给定迭代的向后采纳分支被写入到循环缓冲器210中的行的最右条目,防止单元223可操作为防止循环的额外迭代被写入到循环缓冲器210。
[0111]在一示例中,当装置200在循环缓冲模式时,确定单元224可操作为基于循环缓冲器210的每周期最大指令操作吞吐量来确定循环的写入到循环缓冲器210的迭代数。
[0112]在一示例中,装置200还可包括排列器230,其配置为将循环的第一迭代的第一指令操作写入到循环缓冲器210的第一行中的第一时隙。
[0113]在一个示例中,循环缓冲器210还可包括分派单元211,其响应于装置200进入循环缓冲模式而操作为分派循环的两个或更多迭代的指令操作。
[0114]现在参见图13,在另一实施例中,处理器300可包括循环缓冲器210和耦合到循环缓冲器210的循环缓冲器控制单元220。循环缓冲器控制单元220可配置为检测指令流中的循环。循环缓冲器210还可包括操作来存储循环的多个迭代的储存单元212和分派单元211,分派单元211操作为响应于处理器300进入循环缓冲模式而分派循环的多个迭代的指令。
[0115]在一示例中,处理器300还可包括抓取单元240,其配置为识别和标记循环的开始。
[0116]在一示例中,抓取单元240还可包括排列器230。排列器230可以包括配置为识别循环迭代边界的识别单元231。
[0117]在一示例中,排列器230还可包括停滞单元232。在一示例中,响应于处理器300进入循环缓冲模式,停滞单元232可操作为在检测到循环的前一迭代的向后采纳分支之后导致停滞。在另一示例中,停滞单元232还可操作为在检测到循环的最后迭代的向后采纳分支被写入到循环缓冲器210之后导致停滞(stall)。
[0118]在一示例中,排列器230还可包括分配单元233,分配单元233操作为将循环的第一迭代的向后采纳分支在第一时钟周期分配到第一时隙。在一示例中,分配单元233还可操作为将循环的第二迭代的第一指令操纵在该第一时钟周期分配到第二时隙。第二时隙和第一时隙相邻。
[0119]应强调的是,上述实施例仅仅是实施方式的非限制性示例。一旦完全理解上述公开,多种变化和修改对于本领域技术人员将是显而易见的。下面的权利要求旨在理解为包含所有这些变化和修改。
【权利要求】
1.一种装置,包括: 循环缓冲器;以及 耦合到所述循环缓冲器的循环缓冲器控制单元,其中所述循环缓冲器控制单元配置为: 检测指令流中的循环;以及 使所述循环的两个或更多迭代写入到所述循环缓冲器。
2.如权利要求1所述的装置,其中,所述循环缓冲器控制单元还配置为: 响应于确定所述循环缓冲器不是至少半满,使所述循环的另一迭代写入到所述循环缓冲器;以及 响应于确定所述循环缓冲器是至少半满,防止所述循环的额外迭代写入到所述循环缓冲器。
3.如权利要求2所述的装置,其中,所述循环缓冲器控制单元配置为基于到循环缓冲器的写指针的位置确定所述循环缓冲器是否半满。
4.如权利要求1所述的装置,其中,所述循环缓冲器控制单元还配置为: 响应于确定给定迭代中的向后采纳分支没有被写入到所述循环缓冲器中的行的最右条目,使所述循环的另一迭代被写入到所述循环缓冲器;以及 响应于确定来自所述给定迭代的向后采纳分支被写入到所述循环缓冲器中的行的最右条目,防止所述循环的额外迭代被写入到所述循环缓冲器。
5.如权利要求1所述的装置,其中,当所述装置处于循环缓冲模式时,基于所述循环缓冲器的最大每周期指令操作吞吐量,确定写入到所述循环缓冲器的所述循环的迭代的数目。
6.如权利要求1所述的装置,还包括排列器,所述排列器配置为将所述循环的第一迭代的第一指令操作写入到所述循环缓冲器的第一行中的第一时隙。
7.如权利要求1所述的装置,其中,所述循环缓冲器配置为响应于所述装置进入循环缓冲模式而分派所述循环的两个或更多迭代的指令操作。
8.一种处理器,包括: 循环缓冲器;以及 耦合到所述循环缓冲器的循环缓冲器控制单元,其中所述循环缓冲器控制单元配置为检测指令流中的循环; 其中所述循环缓冲器配置为: 存储所述循环的多个迭代;以及 响应于所述处理器进入循环缓冲模式,分派所述循环的多个迭代的指令。
9.如权利要求8所述的处理器,其中,所述循环的多个迭代中的每个迭代是相同的。
10.如权利要求8所述的处理器,还包括配置为识别和标记所述循环的开始的抓取单元 ο
11.如权利要求10所述的处理器,其中,所述抓取单元包括配置为识别循环迭代边界的排列器。
12.如权利要求11所述的处理器,其中,所述排列器还配置为响应于所述处理器进入循环缓冲模式而在检测到所述循环的先前迭代的向后采纳分支之后导致停滞。
13.如权利要求12所述的处理器,其中,所述排列器还配置为在检测到所述循环的最后迭代的向后采纳分支被写入到所述循环缓冲器之后导致停滞。
14.如权利要求13所述的处理器,其中,所述排列器还配置为: 在第一时钟周期中,将所述循环的第一迭代的向后采纳分支分配到第一时隙;以及在所述第一时钟周期,将所述循环的第二迭代的第一指令操作分配到第二时隙,其中所述第二时隙与所述第一时隙相邻。
15.一种方法,包括: 检测指令流中的循环候选; 确定所述循环候选满足在循环缓冲器中缓冲的标准; 将所述循环候选的第一迭代写入到所述循环缓冲器; 响应于检测到所述循环候选的第一迭代的循环终止分支,确定所述循环缓冲器是否是至少半满的;以及 响应于确定所述循环缓冲器不是至少半满,将所述循环候选的第二迭代写入到所述循环缓冲器。
16.如权利要求15所述的方法,所述方法还包括: 响应于检测到所述循环候选的第二迭代的循环终止分支,确定所述循环缓冲器是否是半满的;以及 响应于确定所述循环缓冲器是至少半满的,从所述循环缓冲器分派所述循环候选的第一和第二迭代。
17.如权利要求16所述的方法,所述方法还包括:响应于从所述循环缓冲器分派所述循环候选的第一和第二迭代,关闭抓取单元。
18.如权利要求17所述的方法,还包括:存储与储存在所述循环缓冲器中的有效行数相等的第一值。
19.如权利要求18所述的方法,其中,从所述循环缓冲器分派所述循环候选的第一和第二迭代包括:使读指针步进通过与所述第一值相等的所述循环缓冲器的行数。
20.如权利要求19所述的方法,还包括:响应于所述读指针步进通过与所述第一值相等的所述循环缓冲器的行数,将所述读指针复位到所述循环缓冲器的第一行。
【文档编号】G06F12/08GK103513964SQ201310353450
【公开日】2014年1月15日 申请日期:2013年6月14日 优先权日:2012年6月15日
【发明者】C·布拉斯考-阿鲁, I·D·考恩坦尼斯 申请人:苹果公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1