分支预测单元和1级指令高速缓存中的带宽增加的制作方法

文档序号:10663545阅读:347来源:国知局
分支预测单元和1级指令高速缓存中的带宽增加的制作方法
【专利摘要】本发明呈现用于在处理器中执行分支预测的一种处理器、一种设备和一种非暂时性计算机可读介质。所述处理器包括前端单元。所述前端单元包括1级分支目标缓冲器(BTB)、BTB索引预测器(BIP)和1级散列感知器(HP)。所述BTB被配置来预测目标地址。所述BIP被配置来基于程序计数器和全局历史产生预测,其中所述预测包括推测性部分目标地址、全局历史值、全局历史移位值和路径预测。所述HP被配置来预测分支指令是取用还是不取用。
【专利说明】分支预测单元和1级指令高速缓存中的带宽増加
[0001]相关申请的交叉引用
[0002]本申请要求2013年10月25日申请的美国临时申请第61/895,624号的权益,所述申请如同在本文中完全提出般以引用的方式并入。
技术领域
[0003]公开的实施方案一般针对一种处理器,且特定来说,涉及一种处理器中的分支预测单元和I级指令高速缓存。
[0004]发明背景
[0005]在多种应用中利用包括中央处理单元(CPU)和图形处理单元(GPU)的处理器。标准配置将处理器与存储单元(诸如高速缓存、系统存储器等等)耦接。处理器可以执行提取操作以根据需要从存储单元提取指令。处理器管线包括用于处理指令的若干级。在一个实施中,四级管线可被使用且包括提取级、解码级、执行级和回写级。指令按顺序前进通过管线级。
[0006]为了加快处理器的操作,期望具有全管线。填充管线的一种方法将为在正处理先前指令之同时,提取随后指令。为了能够提取先行若干指令,可以使用分支预测器。分支预测器在分支指令到达管线中的执行阶段之前预测分支指令的方向(即,取用或不取用)和分支目标地址。
[0007]这称作“预取”指令和“推测性执行”指令。因为在分支指令到达执行阶段以前不知道预测是否正确,所以推测性执行指令。虽然在不知道分支指令的实际方向下预取和推测性执行指令可导致加快指令处理,但是如果误预测分支方向,那么可具有相反效果且可导致使管线暂停。如果发生分支误预测,那么管线需要被清除且执行来自正确分支方向的指令。此可严重影响系统的性能。
[0008]已使用若干不同类型的分支预测器。双模态预测器基于特定分支执行的最近历史作出预测且提供取用或不取用的预测。全局预测器基于所有分支的执行,而非仅仅所关注的特定分支的最近历史作出预测。还可以使用具有全局共享历史缓冲器、模式历史表和额外局部饱和计数器的两级自适应预测器,使得局部预测器和全局预测器的输出彼此进行异或以提供最终预测。可以同时使用多于一个预测机构,且基于记住哪个预测器已在过去作出最佳预测的元预测器或基于奇数数量的不同预测器的多数投票函数作出最终预测。
[0009]图1是现有I级分支预测器100的框图。分支预测器100包括第一预测器(Pl)102、第二预测器(P2)104、多路复用器(mux)106和选择器108。程序计数器110(正被预测的分支的地址)和其它输入112由第一预测器102和第二预测器104两者评估且各者作出其自身预测。
[0010]程序计数器110还可以作为输入供应至选择器108的输入,所述选择器108使用程序计数器110以确定哪个预测器(第一预测器102或第二预测器104)更准确。选择器108作出预测选择114,其作为选择者供应至多路复用器106。所选预测器的输出用作分支预测器100的预测116。
[0011]图2是另一现有I级分支预测器200的框图。在一个实施中,I级预测器200可以是McFarling混合预测器。分支预测器200在构造上类似于分支预测器100,但是对于一些组件具有不同实施。分支预测器200包括第一预测器202(实施为双模态计数器阵列)、第二预测器204(实施为双模态计数器阵列)、多路复用器(muX)206和双模态选择器208。各个预测器202、204作出其自身预测。第二预测器204包括XOR单元210和双模态计数器阵列212。
[0012]程序计数器220 (分支地址)作为输入供应至第一预测器202、第二预测器204和选择器208。第一预测器202使其预测基于由程序计数器220的低阶地址位索引的饱和双模态两位计数器。
[0013]全局历史222保持由最近N个分支取用的方向(由分支地址索引)的历史且作为输入供应至第二预测器204 JOR单元210对程序计数器220和全局历史222执行异或操作,其将用作索引的散列产生至阵列212中。
[0014]选择器208使用程序计数器220以在表中查找哪个预测器(第一预测器202或第二预测器204)更准确。选择器208作出预测选择224,其作为选择者供应至多路复用器206。所选预测器用作分支预测器200的I级预测226。
[0015]图3是称作散列化感知器300的现有2级分支预测器的框图。散列化感知器300包括偏置权重阵列302、多个权重阵列304^3042^,3044^加法器306。程序计数器310作为输入供应至偏置权重阵列302和权重阵列30^-304。
[0016]偏置权重阵列302是权重阵列,其中各个权重是位数量(例如,四个或八个)。偏置权重阵列302被索引至使用程序计数器310或程序计数器310的散列中以获得供应至加法器306的权重值。
[0017]各个权重阵列304-304由程序计数器310的散列和全局历史312的不同位索引以获得权重值。各个权重阵列304-304包括XOR单元314,其通过对程序计数器310和全局历史312的部分执行异或操作来产生散列。全局历史是所有分支的过去结果的列表(无论分支被取用还是未被取用),但并不包括当前分支。全局历史的最低有效位包含关于遇到的最近分支的信息,而全局历史的最高有效位包含关于遇到的较旧分支的信息。
[0018]加法器306将从偏置权重阵列302和权重阵列30^-304的各者获得的权重相加以获得和值且和值的最高有效位(MSB)是预测316。例如,如果和值的MSB是“I”,那么预测是“不取用”且如果和值的MSB是“O”,那么预测是“取用”。
[0019]应注意,在散列化感知器300的一个实施中,所有权重值在加法之前被符号扩展以防止加法器306的溢出,溢出可能导致不正确预测。因为程序计数器310和全局历史312两者可以各包含较大数量的位,所以使用散列函数以产生至偏置权重阵列302中的索引且权重阵列304-304的各者产生小索引(就组成索引的位数量而言)。
[0020]分支预测器为通常较大和复杂的结构。结果,其消耗大量功率且对于预测分支引发延时惩罚。因为更好的分支预测对处理器的性能和功率效率具有影响,所以期望具有更好的分支预测。
发明概要
[0021]—些实施方案提供一种包括前端单元的处理器。前端单元包括I级分支目标缓冲器(BTB)、BTB索引预测器(BIP)和I级散列感知器(HP) ATB被配置来预测目标地址。BIP被配置来基于程序计数器和全局历史产生预测,其中预测包括推测性部分目标地址、全局历史值、全局历史移位值和路径预测。HP被配置来预测分支指令是取用还是不取用。
[0022]一些实施方案提供一种用于在处理器中执行分支预测的方法,所述处理器包括I级分支目标缓冲器(BTB)和BTB索引预测器(BIP)。产生索引以用来查找至BTB和BIP中。使用索引在BTB中执行查找以预测目标地址。使用索引在BIP中执行查找以预测推测性部分目标地址。使用来自BTB的目标地址和来自BIP的推测性部分目标地址以产生用于下一个流的索引。
[0023]—些实施方案提供一种非暂时性计算机可读存储介质,其存储用于由通用计算机执行以在处理器中执行分支预测的指令集,所述处理器包括I级目标缓冲器(BTB)和BTB索引预测器(BIP)。指令集包括产生代码段、第一执行代码段、第二执行代码段和使用代码段。产生代码段产生索引以用来查找至BTB和BIP中。第一执行代码段使用索引在BTB中执行查找以预测目标地址。第二执行代码段使用索引在BIP中执行查找以预测推测性部分目标地址。使用代码段使用来自BTB的目标地址和来自BIP的推测性部分目标地址以产生用于下一个流的索引。
[0024]附图简述
[0025]可从通过实例结合附图给出的以下描述获得更详细理解,其中:
[0026]图1是现有I级分支预测器的框图;
[0027]图2是另一现有I级分支预测器的框图;
[0028]图3是现有2级分支预测器(散列化感知器)的框图;
[0029]图4是其中可以实施一个或多个公开的实施方案的实例设备的框图;
[0030]图5是BTB索引预测器(BIP)和BTB路径预测器的框图;
[0031]图6是BIP中的单个条目的图;
[0032]图7是使用BIP以产生BP匹配信号的方法的流程图;和
[0033]图8是指令标签(IT)和指令高速缓存(IC)管线的框图。
【具体实施方式】
[0034]图4是其中可以实施一个或多个公开的实施方案的实例设备400的框图。设备400可以包括(例如)计算机、游戏设备、手持设备、机顶盒、电视机、移动电话或平板计算机。设备400包括处理器402、存储器404、存储装置406、一个或多个输入设备408和一个或多个输出设备410。设备400还可以视情况包括输入驱动器412和输出驱动器414。应理解,设备400可以包括未在图4中示出的额外组件。
[0035]处理器402可以包括中央处理单元(CPU)、图形处理器单元(GPU)、位于相同晶粒上的CPU和GPU或一个或多个处理器核心,其中各个处理器核心可以是CPU或GPU。存储器404可以位于与处理器402相同的晶粒上或可以位于与处理器402分开处。存储器404可以包括易失性或非易失性存储器,例如,随机存取存储器(RAM)、动态RAM或高速缓存。
[0036]存储装置406可以包括固定或可卸除式存储装置,例如,硬盘驱动器、固态驱动器、光盘或闪存驱动器。输入设备408可以包括键盘、小键盘、触摸屏、触摸垫、检测器、麦克风、加速计、陀螺仪、生物特征扫描仪或网络连接(例如,用于无线IEEE 802信号的传输和/或接收的无线局域网卡)。输出设备410可以包括显示器、扬声器、打印机、触觉反馈设备、一个或多个灯、天线或网络连接(例如,用于无线IEEE 802信号的传输和/或接收的无线局域网卡)O
[0037]输入驱动器412与处理器402和输入设备408通信且允许处理器402从输入设备408接收输入。输出驱动器414与处理器402和输出设备410通信且允许处理器402将输出发送至输出设备410。应注意,输入驱动器412和输出驱动器414是可选组件,且如果输入驱动器412和输出驱动器414不存在,那么设备400将以相同方式操作。
[0038]处理器中的前端单元(FE)负责提取指令且将指令发送至解码单元(DE)AE包括两个子单元:分支预测(BP)和指令高速缓存(IC)13BP子单元预测提取地址序列和在各个地址处提取的特定字节。IC子单元执行页转译且从高速缓存阶层提取特定字节。应注意,FE包括其它子单元和功能性,但是这样的功能性与本公开内容无关且不在本文中进一步描述。
[0039]在FE中存在三个主要管线:BP管线、指令标签(IT)管线和IC管线。在BP管线与IT/IC管线之间存在使BP管线与指令提取(IT/IC)管线解耦的预测队列(PRQ) AP管线产生预测地址且PRQ保持地址直至IT/IC管线可以处理预测地址。PRQ是提取地址的有序队列。其由IT/IC管线读取和更新。
[0040]在各个周期,预测虚拟提取地址(程序计数器PC)和呈现最近分支行为的矢量(全局历史GHist)沿着BP管线向下流动。各个流可以发现待提取的至多接下来64个字节。PC用于查找分支目标缓冲器(BTB)中的条目ATB条目识别分支且预测其目标。PC和GHist用于访问散列感知器(HP)表。HP表用于预测条件分支的方向(S卩,取用或不取用)。
[0041]返回和可变目标分支具有用于帮助其预测的额外结构。如果BTB指示取用分支是一个调用,那么调用之后的指令的地址推送至堆栈上。关联返回指令将从堆栈弹出这个地址,而非使用来自BTB的预测目标。如果BTB指示分支具有可变目标,那么提取地址和全局历史用于在间接目标阵列(ITA)中查找地址。
[0042]BTB和HP结构两者实施为两级结构。从I级(Ll)BTB和LI HP预测的提取方向上的改变(重新导向)将一个气泡(例如,“不操作”)插入至BP管线中。如果分支是在LI BTB中,但是具有可变目标,那么其在L2 BTB中发现或如果L2 HP重写来自LI预测器的方向预测,那么三个气泡插入至BP管线中。最终,具有可变目标的L2 BTB中的分支将四个气泡插入至BP管线中。
[0043]除了三个主要预测器之外,存在被设计来改善FE的效率的两个结构。如上文提及,在典型情况下,取用或不取用分支将气泡引入至BP管线中。与访问BTB和HP并行,PC和GHist用于从BTB索引预测器(BIP)读取条目。这个条目用于预测BTB和HP阵列索引且用于在后一个周期中访问这些结构。当BIP正确地预测下一个指令的索引时,气泡被挤破。存在恒定地扫描预测地址串流以尝试发现重复循环的循环预测器。当循环预测器锁定至循环上时,可以切断较大预测阵列且预测可以在每个周期以至多一个取用分支的速率由这个较小结构作出。
[0044]在地址被预测时,其写入至三个不同结构。各个地址连同分支和历史信息写入至分支状态寄存器(BSR)。这用于在分支被发现、误预测和退出时训练预测结构。各个地址写入至PRQ,使得IC管线可以提取关联数据。最终,各个地址写入至DE单元中的提取地址先进先出(FIFO)队列(FaFifo)。
[0045]在各个周期中,来自PRQ的预测虚拟提取地址(VA)沿着IT管线向下流动。其访问两级指令转译后备缓冲器(ITLB)的第一级以尝试将其转换为物理地址(PA)。如果成功,那么IT管线接下来取用这个物理地址且使用其来访问1C。与ITLB查找并行,开始对IC微标签(uTag)的访问。当从ITLB获得PA时,完成这个查找。微标签预测应访问IC数据阵列中的哪个路径(高速缓存线应定位于何处)。与数据访问并行,执行全部标签查找以限定微标签命中信号。这个流的结果(ITLB命中、部分PA、IC命中、IC路径)回写至PRQ。
[0046]如果存在LI ITLB错失,分配转译后备缓冲器(TLB)错失地址缓冲器(MAB)且尝试L2 ITLB中的查找。如果L2 ITLB中还存在错失,那么起始对加载/存储单元(LS)的页行走请求。L2 ITLB命中条目或页行走请求的结果安装于LI ITLB中。如果指令高速缓存中存在错失,那么分配IC存储器地址缓冲器(MAB)且发送对用于错失线的L2 ITLB的填充请求。如果特定PA可缓存(如由页行走的属性指示),那么在数据返回时,其写入至IC中。如果特定PA不可缓存,那么过程等待地址为PRQ中的最旧者,且接着将所得提取数据直接前送至DE。
[0047]当存在错失时,继续处理PRQ中的较新条目。尝试预取用于比错失的较旧提取新的提取的高速缓存线。
[0048]IC管线是可以每个周期提取32个字节指令数据的三阶段管线。PRQ中的各个地址取决于64字节预测窗内的预测开始和结束位置而需要沿着IC管线向下的一个或两个流以将所有数据前送至DE。最旧PRQ条目等待的返回L2高速缓存错失可以为那个条目唤醒IC管线且在正更新数据阵列时,L2填充数据可以直接旁通至DE。
[0049]所有预测、标签和高速缓存管线通过基于线程优先化算法使来自两个线程的访问交错来处理同时多线程(SMT)。一般来说,使用轮询技术在BP、IT和IC管线内独立地执行线程调度。在给定周期中,如果线程中的一个被阻塞且另一线程可用于挑选,那么将在那个周期中挑选另一线程。
[0050]图5是BTB索引预测器和BTB路径预测器的框图。图5只示出了实施BTB索引预测器和BTB路径预测器的处理器500的一部分;为了清楚的目的,存在未在图5中示出的处理器500的其它元件。图5底部处的标记一 BP0、BP1和BP2—指示不同组件操作于BP管线的哪个周期中。
[0051 ]程序计数器(PC)502和全局历史(GHist)504提供为输入。第一多路复用器510接收PC 502和目标PC(Target_BP2)512且选择信号514选择PC 502或目标PC 512来作为所选PC(PC_BP0)516。选择信号514基于来自执行(EX)单元或解码(DE)单元的重新导向或基于来自稍后BP管线中的较高优先级预测。应注意,虽然选择信号514来源于处理器500的另一部分,但是为了清楚的目的,未示出至选择信号514的电势源的连接线。
[0052]所选PC 516和预测目标PC(Pred Target_BPl)518作为输入供应至第二多路复用器520且选择信号522选择所选PC 516或预测目标PC 518来作为预测PC(Pred PC_BP0)524。选择信号522基于来自EX单元或DE单元的重新导向或基于来自稍后BP管线中的较高优先级预测或BP2周期中是否存在具有BIP误预测的有效操作(指示预测目标PC 518无用,此意味着所选PC 516被选择)。应注意,虽然选择信号522来源于处理器500的另一部分,但是为了清楚的目的,未示出至选择信号522的电势源的连接线。
[0053]预测PC 524作为输入(索引)供应至LI BTB 526,其产生可能地址集528。可能地址集528作为输入供应至第三多路复用器530,且选择信号532(将在下文描述的取用/不取用信号)选择可能地址集528中的一个作为目标PC 512,其反馈至第一多路复用器510且向前馈送至第一比较器534。
[0054]LI BTB 526是组关联结构,使得执行查找。地址的一些位用于读取结构且地址的一些散列位用于与标签比较以确定是否存在与地址的匹配。标签比较和若干“路径”(若干不同可能结果)之间的选择在正常两周期查找中花费大量时间。
[0055]在每个周期,读取LIBTB 526以预测目标PC 512。接着在下一个流中使用目标PC512以产生再次读取LI BTB的索引来预测下一个目标PC。这可以在相同高速缓存线或跟随取用分支的任何非循序高速缓存线中。因为从第一流产生目标PC花费时间,所以对于下一个流,LI BTB的读取延迟。为了挤破这个气泡,如下文描述使用BTB索引预测器(BIP)。
[0056]典型预测可每两个周期预测一个取用分支。各个分支通过LI BTB 526。在下一个周期(BP2)中,目标PC 512需要被确定且回流两个周期(至ΒΡ0)至LI BTB 526的前端处的多路复用器510、520。简要而言,可能地址528从LI BTB 526获得,可能地址中的一个被挑选(作为目标PC 512)且挑选地址回流。
[0057]预测PC 524的一些位和GHist的一些位的组合供应至BTB索引预测器(BIP)536。在一个实施中,这个组合是预测PC 524位和GHist位的异或。BIP 536产生:预测目标地址(Pred Target BP_1)518,其反馈至第二多路复用器520且向前馈送至第一比较器534;和预测全局历史移位值(Pred GHist shift_BPl)538,其供应至第一GHist移位器540和第二比较器542。
[0058]并行访问BIP 536与LI BTB 5260L1 BTB 526预测当前流的分支目标(其还可以用于构建下一个流的BTB/散列感知器(HP)索引),同时BIP 536预测推测性部分目标地址(依据VA[19:1]和GHist两者),其用于产生执行至LI BTB 526和LI HP 560中的查找的索引。BIP 536直接映射且由虚拟地址的散列和全局历史索引,此允许在紧接后一个周期中利用预测索引读取LI BTB 526和LI HP 560。当BIP预测正确时,这压碎取用和不取用分支气泡。
[0059]LI BTB 526实施(大小和放置WPLl BTB读取加上重新导向时序约束允许只每隔一个周期基于最后一个LI BTB重新导向产生和读取LI BTB预测。对于每个LI BTB重新导向,这在连续LI BTB读取之间产生气泡周期。在两个线程于每个交替周期运行且在连续周期中占据LI BTB的理想情形下,将不会发生这个问题。在只存在一个活动线程或连续相同线程分配的情况下,每第二周期将存在一个气泡,此损害性能。
[0060]在一个实施中,BIP 536是直接映射256条目结构且条目完全共享。给BIP 536呈现索引输入,从BIP获得值且假设这个值是正确的。在那个时刻不要求进一步比较或限定。在下一个周期,BIP 536的结果被使用且接着将知道其是否为在那种背景中使用的正确结果(其在知道是否为正确之前使用)。在处理器的物理布局的一个实施中,BIP 536位于LI BTB526和LI HP 560附近。
[0061 ]图6示出了BIP 536中的单个条目600的内容。条目600包括推测性索引602、全局历史的最低有效位(LSB)604、全局历史移位值606和路径预测608。
[0062]推测性索引602可以是19个位长且包括较低VA位19: UBIP 536,LI BTB 526和LIHP 560需要这些位来产生用于下一个周期流的其读取索引。
[0063]全局历史的LSB 604可以是两个位长且用于预测下一个周期推测性全局历史值,BIP 536,LI BTB 526和LI HP 560需要其来产生读取索引。
[0064]全局历史移位值606可以是两个位长且帮助建立全局历史表且指示使全局历史的LSB移位O、I或2个位。如果全局历史移位值606大于零,那么供应移位量和将移位的值。各个条件分支取决于分支取用还是不取用而移入O或I至全局历史表中。例如,如果存在一个未取用分支,那么O移入;如果存在一个取用分支,那么I移入等等。
[0065]路径预测608可以是四个位长且用于预测将最有可能存储为下一个流所需要的信息(VA、GHist、路径)的LI BTB路径(独热)。如果设置路径预测608的所有四个位,那么读取LI BTB和L2 BTB的所有路径以确认BTB错失。
[0066]往回参考图5,使用BIP索引预测,每个周期预测一个取用分支。BIP536得到索引且以与查找LI BTB 526相同的方式查找。查找的结果(预测目标PC 518)立即多路复用回至输入(经由多路复用器520)且在下一个周期中实现LI BTB 526的另一查找。预测目标PC518在准确度上比从LI BTB 526出来的目标PC 512差,但是当预测目标PC 518正确时,可每个周期作出一个预测。在下一个周期,对于各个预测,检查从BIP 536出来的“快速”预测以确定其是否正确。如果其正确,那么无必要将其丢弃。如果其不正确,那么将其丢弃(通过不选择从多路复用器520出来的预测)且回到每两个周期预测一个分支的先前行为。
[0067]循序预测(例如,在不具有分支的一段代码中)的潜在“问题”为即使不需要预测分支,但是处理仍受到BIP的尝试性预测,此可能因花费两个周期而减慢处理。但是总体上,存在净性能增益。
[0068]利用正提取的地址的散列化版本的位对LIBTB 526加以索引。利用正提取的地址和被预测的最后若干分支的历史的组合散列化LI HP 560。由于利用地址位和历史位的组合散列化BIP 536,所以BIP 536就此事更像散列感知器。使用的历史位的最佳数量为少数;例如,如上文所述,在一个实施中使用两个历史位。将历史位散列化至结果中帮助获得比通过使用仅仅地址位可作出的更好的预测。
[0069]从BIP 536出来的预测目标PC 518是立即反馈至BIP 536和LI BTB 526中来用于下一个访问的索引(而非仅仅为地址)。从BIP 536读出预测索引且从LI BTB 526读出可能地址528。两个信息片段馈送至下一个周期且作出比较(在第一比较器534处)以确定目标地址(目标PC 512)和所得索引是否与预测索引(预测目标PC 518)匹配。
[0070]在预测管线中完成BIP536的一般训练。当获得预测目标PC 518时,索引从其计算出且预测目标PC 518回写至那个索引下的BIP 536。当执行流返回至代码中的相同点(例如,基于相同最近历史),从BIP 536读取的内容反映(最后一次代码在这个点的)那个时刻的认知。从分支由BIP 536预测时至其写入至BIP来用于训练时,存在相当快速的周转。因为此为推测性结构且可被立即确认是否准确,所以快速训练的缺点并不大。
[0071]GHist 504和目标移位GHist(Target GHist_BP2)544供应至第四多路复用器546,且选择信号548用于选择GHist 504或目标移位GHist 544来作为全局历史预测(GHist_BPO) 550。选择信号548基于来自EX单元或DE单元的重新导向或基于来自稍后BP管线中的较高优先级预测。应注意,虽然选择信号548来源于处理器500的另一部分,但是为了清楚的目的,未示出至选择信号548的电势源的连接线。
[0072]第一 GHist移位器540施加预测GHist移位538以使全局历史移位且产生预测目标全局历史(Pred Target GHist_BPl)552AHist预测550和预测目标GHist 552供应至第五多路复用器554且选择信号556用于选择GHist预测550或预测目标GHist 552来作为预测全局历史(Pred GHist_BP0)558。选择信号556基于来自EX单元或DE单元的重新导向,基于来自稍后BP管线中的较高优先级预测或BP2周期中是否存在具有BIP误预测的有效操作。应注意,虽然选择信号556来源于处理器500的另一部分,但是为了清楚的目的,未示出至选择信号556的电势源的连接线。
[0073]预测GHist 558供应至LI散列感知器(HP)560,其产生取用/不取用信号532。取用/不取用信号532提供至取用/不取用GHist移位器562,其将取用/不取用信号532前送至第三多路复用器530且产生至第二比较器542和至第二 GHist移位器566的全局历史移位值(GHist shift_BP2)564。第二GHist移位器566使用GHist移位值564以产生目标GHist 544且将目标GHist 544前送至第四多路复用器546。
[0074]第一比较器534将目标PC 512与预测目标PC 518相比较以确定其是否匹配且将匹配值568输出至与门570。第二比较器542将预测GHist移位值538与GHist移位值564相比较以确定其是否匹配且将匹配信号572输出至与门570。与门570输出BIP匹配信号574。
[0075]如果两个比较器534、542指示匹配,那么BIP匹配信号574指示正匹配(BIP 536作出正确预测)且没有东西需要从管线清除。如果两个比较器534、542并不指示匹配,那么BIP匹配信号574指示BIP预测不正确,且接着从管线清除出流且将目标地址512从BP2周期反馈回至BPO多路复用器510。
[0076]这在吞吐量方面是明显改善。在无BIP536下,管线中将存在气泡。如果分支预测器的前端限制机器的吞吐量,那么每个周期将存在气泡。使用BIP 536塞住孔,所以存在连续指令串流且存在较少前端气泡。因为尝试通过帮助保持机器占满而在每个周期处理更多指令,所以使用BIP的值随着机器变更宽而增加。
[0077]图7是使用BIP以产生BP匹配信号的方法700的流程图。产生用于在BTB、BIP和HP中执行查找的索引(步骤702)。应注意,下面步骤(704、710和712)可以并行执行,但是为了解释的目的,分开描述。
[0078]索引用于在BTB中执行查找以产生可能地址集(步骤704)。目标PC选自可能地址集(步骤706)。目标PC用于产生将在下一个流中使用的索引(步骤708),且方法700的这个部分返回至步骤702以产生用于下一个流的索引。
[0079]索引还用于在BIP中执行查找以产生预测目标PC和全局历史(GHist)移位(步骤710)。索引和GHist用于在HP中执行查找以产生取用/不取用信号(步骤712)。基于取用/不取用信号更新GHist(步骤714)且在HP的随后查找中使用更新的GHist。取用/不取用信号还用于产生GHist移位(步骤716)。
[0080]来自BTB的目标PC和来自BIP的预测目标PC被比较以产生第一匹配信号(步骤718)。来自BIP的GHist移位和来自HP的GHist移位被比较以产生第二匹配信号(步骤720)。第一匹配信号和第二匹配信号在逻辑上一起进行与以产生BP匹配信号(步骤722)且方法终止(步骤724)。
[0081 ] LI BTB路径预测器
[0082]BIP 536还用于如上文所描述以类似于索引预测的方式预测LI BTB路径。BIP 536的输出的部分(路径预测608)告诉为了命中结果查看哪条“路径”。除了预测LI BTB路径之外的所有路径被切断以节省对LI BTB的读取功率。L2 BTB(未在图5中示出)路径还被切断以节省L2 BTB功率。
[0083]在BIP路径预测608预测“1111”的情况下,除了读取所有LI BTB路径之外,L2 BTB被通电且读取。此允许还预测BTB错失情况。
[0084]如果不存在LIBTB命中且“111I”组合未被预测,因此在所有可能BTB位置中搜索,那么执行BIP回流以确信存在BTB错失。并非重新导向至目标PC,这种情况取消自身且进行LI重新导向回至自身,但是在使得整个LI BTB和整个L2 BTB被读取的强制读取条件下。
[0085]针对BIP的这个部分的训练更复杂。来自当前流的索引被取用且馈送至下一个流中。利用索引读取BTB且确定BTB中下一个流在哪个路径命中且此为读出的路径。
[0086]在管线结束时,收集用于这个预测的索引和下一个预测的目标或索引。下一个预测的索引放入BIP中,下一个流的BTB命中信息被聚集(以知道其在哪个路径命中)且那个信息利用这个预测写入至BIP中。
[0087]在第一实例中:代码在循环中且给定分支在BTB的路径3中。BIP被训练以指向那个索引和路径3。接着在循环中进行各个迭代,而非读取BTB的所有四个路径以查找那个结果,只需要读取路径3。当预测正确时,因为预测到将存在命中且预测到命中在哪个路径中,且非预测路径可以断电,所以此节省功率。L2 BTB结构可以完全切断,这是因为知道LI BTB中将存在命中,所以将不需要L2 BTB0
[0088]在第二实例中:在期望BTB中的错失的情况下(如同无地址存储于BTB中的循序提取),BIP被训练以读取所有四个路径。如果所有四个路径从BTB读出,那么可以确认不存在命中,此指示BIP路径预测有用。
[0089]由于如果那个BIP指示读取“路径3”且存在错失(意味着可能分支在其它路径中的一个中),那么那个流需要重新进行以在所有路径中寻找那个分支,所以存在缺点。通常,当BIP预测具有不正确路径时,其还具有不正确索引,使得流在大多数时间已由BIP索引匹配机构清除。
[0090]如本文描述的BIP路径预测器从根本上不同于高速缓存路径预测器。BIP的预测更像其索引预测器的延续,即,索引预测器提供M位索引且路径预测器在特定路径下增加索引。BIP中的一个查找导向硬件的下一个BTB查找。所以使用BIP路径预测的一个流将读取一个BIP条目,其接着指向将读取的(若干)一个(或多个)BTB路径。另一方面,高速缓存路径预测器在高速缓存中具有用于各个条目的条目,其与数据和标签串联查找。对于N路径组关联高速缓存,将在路径预测器中查找N个条目,希望这个查找的结果指示在高速缓存自身中存在少于N个条目。
[0091]IT和IC管的解耦
[0092]图8是处理器800的一部分中的指令标签(IT)和指令高速缓存(IC)管线的框图。图8只示出了实施IT管线和IC管线的处理器800的一部分;为了清楚的目的,存在未在图8中示出的处理器800的其它元件。图8底部处的标记一11'0、11'1、1了2、10)和1(:1一指示不同组件操作于IT管线和IC管线的哪个周期中。
[0093]预测PC 802供应至LI ITLB 804和uTag查找设备806。如果LI ITLB中存在命中,那么LI ITLB输出物理地址(PA)SOS13PA 808供应至第一比较器810、选择PA设备812、标签查找设备814和第二比较器816。
[0094]uTag查找设备806使用预测PC 802以产生uTag 818,其供应至第一比较器810。uTag查找开始于ITO周期中且完成于ITl周期中。第一比较器810将PA 808与uTag 818相比较以产生匹配信号820。匹配信号820供应至标签查找设备814和选择路径设备822。
[0095]选择路径设备822使用预测PC802和匹配信号820以选择指令高速缓存826中的路径824。来自第一比较器810的命中信息指示路径824是IC 826中可能具有有用数据的路径;命中基于那个高速缓存条目的标签位的子集。选择PA设备812使用预测PC 802和PA 808以产生所选PA 828。指令高速缓存826使用路径824和所选PA 828以选择用于处理的指令830。
[0096]标签查找设备814使用PA 808和匹配信号820以选择标签832,其供应至第二比较器816。第二比较器816使用PA 808和标签832以产生命中信号834。
[0097]在IT2周期中,标签查找完成。对于存在部分匹配的情况,读出剩余标签以确认存在全部匹配。接着将确切知道,高速缓存中的这个位置是具有正寻找的数据的位置。通常,部分命中具有可以用于控制从高速缓存读出数据的足够信息。如果部分标签导致多个命中,那么对于各个路径,剩余标签读出可以与全部地址相比较以获得下一个周期中的全部限定命中信号(此为在IT和IC管线耦接时需要做的事情)。在此之后,可以重新读取数据阵列(指令高速缓)以读取正确条目。
[0098]在IT管线结束时,如果存在命中,那么将那个信息(其被发现所在的地址和路径)存储于PRQ中。稍后,那个数据需要从高速缓存读出,不需要执行全部标签查找。仅先前命中所在的索引和路径需要从PRQ读出且那个信息可以用于访问数据阵列。所以标签管线和标签访问可以从访问数据时分离。
[0099]在高速缓存错失或提取得到多于一半高速缓存线(S卩,长提取)下,标签管线将在各个地址(预测PC 802)从BP管线出现时立即运行。接着IC管线对于每个提取必须进行两次挑选(而非一次),所以即使IC管线可以独立地挑选,其落后于IT管线。
[0100]如果DE管线(其在IT和IC管线之后)填满,那么仍可执行标签查找(以确定命中或错失)而无需使数据阵列通电以将数据发送至DE管线。
[0101]如果IT管线在IC管线之前有若干提取,那么存在优点。如果现在存在高速缓存错失,此在IT管线中得知。请求发送至L2高速缓存,所以当IC管线追上且想要使用按个数据时,可能数据已从L2高速缓存回来(且可以与IT管线想要流动的地方对齐)。换句话说,可以获得更多预取行为。
[0102]将IT管线和IC管线解耦的影响类似于机器的其它部分中所做的事情。即,将管线解耦隐藏气泡或减少气泡的影响。因为存在两个不同管线(其各者可能因为独立原因暂停),所以不期望气泡的影响增加。在不解耦下,如果在一个管线中存在气泡,那么其将前进通过管线且至其它依赖管线。
[0103]如果立即与IC管线一起挑选IT管线,那么比以别的方式为必要的更多的数据高速缓存的路径必须通电,且此必须一直进行。标签管线一在数据管线之前,数据管线就可以更精确地将其需要读出数据所在的指令高速缓存数据阵列的部分通电。
[0104]解耦的副作用是使用PRQ以存储可能已存在命中所在的索引和路径。如果存在从高速缓存移除那个线的操作,那么此外,PRQ中的命中指示必须改变为“未命中”。因为将必须维护这个记录,所以以此方式使用PRQ将涉及一些记录保持开销(从IT管线出来的信息存储于PRQ中)ο如果标签条目失效,那么PRQ中的条目还必须失效。
[0105]应理解,基于本文的公开内容的许多变化是可行的。虽然上文以特定组合描述特征和元件,但是各个特征或元件可以在不具有其它特征和元件下单独使用或以具有或不具有其它特征和元件的多种组合使用。
[0106]提供的方法可以实施于通用计算机、处理器或处理器核心。举例来说,合适的处理器包括通用处理器、专用处理器、常规处理器、数字信号处理器(DSP)、多个微处理器、与DSP核心关联的一个或多个微处理器、控制器、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)电路、任何其它类型的集成电路(IC)和/或状态机。这样的处理器可以通过使用处理的硬件描述语言(HDL)指令的结果和包括网表的其它中间数据(这样的指令能够存储于计算机可读介质上)配置制造工艺来制造。这样的处理的结果可以是掩膜作品,其接着在半导体制造工艺中用于制造实施实施方案的方面的处理器。
[0107]本文提供的方法或流程图可以实施于非暂时性计算机可读存储介质中并入以用于由通用计算机或处理器执行的计算机程序、软件或固件中。非暂时性计算机可读存储介质的实例包括只读存储器(R0M)、随机存取存储器(RAM)、寄存器、高速缓冲存储器、半导体存储设备、磁介质(诸如内部硬盘和可卸除式磁盘、磁光介质)和光学介质(诸如CD-ROM光盘和数字多用光盘(DVD))。
[0108]额外实施方案
[0109]1.—种处理器,其包括:指令标签(IT)管线;和指令高速缓存(IC)管线,其与IT管线通信,但是与IT管线分开,使得IT管线和IC管线可以独立于彼此操作。
[0110]2.根据实施方案I所述的处理器,其中IT管线包括:I级指令转译后备缓冲器(ITLB),其被配置来接收预测地址且输出物理地址;和微标签查找设备,其被配置来接收预测地址且输出微标签。
[0111]3.根据实施方案2所述的处理器,其中IT管线进一步包括第一比较器,其被配置来基于来自ITLB的物理地址和来自微标签查找设备的微标签的比较产生匹配信号。
[0112]4.根据实施方案3所述的处理器,其中IC管线包括选择路径设备,其被配置来基于预测地址和来自第一比较器的匹配信号选择指令高速缓存中的路径。
[0113]5.根据实施方案4所述的处理器,其中IC管线进一步包括选择物理地址设备,其被配置来基于预测地址和来自ITLB的物理地址选择物理地址。
[0114]6.根据实施方案5所述的处理器,其中指令高速缓存被配置来基于来自选择选择物理地址设备的所选物理地址和来自选择路径设备的所选路径选择指令。
[0115]7.根据实施方案3所述的处理器,其中IT管线进一步包括标签查找设备,其被配置来基于预测地址和来自第一比较器的匹配信号选择标签。
[0116]8.根据实施方案7所述的处理器,其中IT管线进一步包括第二比较器,其被配置来基于来自ITLB的物理地址和来自标签查找设备的所选标签产生命中信号。
【主权项】
1.一种处理器,其包括: 前端单元,其包括: I级分支目标缓冲器(BTB),其被配置来预测目标地址; BTB索引预测器(BIP),其被配置来基于程序计数器和全局历史产生预测,其中所述预测包括推测性部分目标地址、全局历史值、全局历史移位值和路径预测;和 I级散列感知器(HP),其被配置来预测分支指令是取用还是不取用。2.根据权利要求1所述的处理器,其中所述BIP被进一步配置来组合所述程序计数器和所述全局历史以产生所述预测。3.根据权利要求2所述的处理器,其中所述BIP被进一步配置来执行异或操作以组合所述程序计数器和所述全局历史。4.根据权利要求2所述的处理器,其中所述BIP被进一步配置来使用散列函数以组合所述程序计数器和所述全局历史。5.根据权利要求1所述的处理器,其中来自所述BIP的所述推测性部分目标地址在所述预测之后紧接的周期中由所述BTB使用以预测所述BTB的索引且由所述HP使用以预测所述HP的索引。6.根据权利要求1所述的处理器,其中所述前端单元进一步包括: 第一选择电路,其被配置来从输入程序计数器选择预测程序计数器,从所述BIP选择所述推测性部分目标地址且从所述BTB选择所述目标地址。7.根据权利要求1所述的处理器,其中所述前端单元进一步包括: 第二选择电路,其被配置来从输入全局历史选择预测全局历史,从所述BIP选择所述全局历史值且选择目标全局历史。8.根据权利要求1所述的处理器,其中所述前端单元进一步包括: 第一比较器,其被配置来将来自所述BIP的所述推测性部分目标地址和来自所述BTB的所述目标地址相比较。9.根据权利要求8所述的处理器,其中所述前端单元进一步包括: 全局历史移位器,其被配置来基于来自所述HP的取用/不取用预测产生全局历史移位值;和 第二比较器,其被配置来将来自所述BIP的所述全局历史移位值与来自所述全局历史移位器的所述全局历史移位值相比较。10.根据权利要求9所述的处理器,其中所述前端单元进一步包括: 逻辑门,其被配置来基于所述第一比较器的输出和所述第二比较器的输出产生匹配信号,其中所述匹配信号指示所述BIP是否作出正确预测。11.根据权利要求1所述的处理器,其中所述BTB被进一步配置来切断除了由所述BIP预测的路径之外的所有路径。12.根据权利要求1所述的处理器,其中所述BTB被进一步配置来从紧接前一个周期基于由所述BIP预测的所述路径读取路径。13.根据权利要求1所述的处理器,其进一步包括: 指令标签(IT)管线;和 指令高速缓存(IC)管线,其与所述IT管线通信,但是与所述IT管线分开,使得所述IT管线和所述IC管线可以独立于彼此操作。14.一种用于在处理器中执行分支预测的方法,所述处理器包括I级分支目标缓冲器(BTB)和BTB索引预测器(BIP),所述方法包括: 产生索引以用来查找至所述BTB和所述BIP中; 使用所述索引在所述BTB中执行查找以预测目标地址; 使用所述索引在所述BIP中执行查找以预测推测性部分目标地址;且使用来自所述BTB的所述目标地址和来自所述BIP的所述推测性部分目标地址以产生用于下一个流的所述索引。15.根据权利要求14所述的方法,其中在所述BTB中所述执行查找包括: 使用所述索引以产生可能地址集;且 从所述可能地址集选择所述目标地址。16.根据权利要求14所述的方法,其中所述处理器进一步包括I级散列感知器(HP),且所述方法进一步包括: 使用所述索引在所述HP中执行查找以预测分支是取用还是不取用;且 基于所述取用或不取用预测更新全局历史。17.根据权利要求16所述的方法,其进一步包括: 通过使用所述索引在所述BIP中执行查找来产生预测全局历史移位; 通过所述HP使用所述取用或不取用预测产生全局历史移位;且将来自所述BIP的所述预测全局历史移位与来自所述HP的所述全局历史移位相比较以产生第一匹配信号。18.根据权利要求17所述的方法,其进一步包括: 将来自所述BTB的所述目标地址与来自所述BIP的所述推测性部分目标地址相比较以产生第二匹配信号。19.根据权利要求18所述的方法,其进一步包括: 将所述第一匹配信号与所述第二匹配信号相比较以确定所述BIP是否做出正确预测。20.根据权利要求14所述的方法,其进一步包括: 预测由所述BTB使用的路径,通过使用所述索引在所述BIP中查找来执行所述预测。21.根据权利要求20所述的方法,其进一步包括: 切断除了由所述BIP预测的路径之外的所述BTB中的所有路径。22.根据权利要求20所述的方法,其进一步包括: 从紧接前一个周期基于由所述BIP预测的所述路径读取所述BTB中的路径。23.—种非暂时性计算机可读存储介质,其存储用于由通用计算机执行以在处理器中执行分支预测的指令集,所述处理器包括I级目标缓冲器(BTB)和BTB索引预测器(BIP),所述指令集包括: 产生代码段,其用于产生索引以用来查找至所述BTB和所述BIP中; 第一执行代码段,其用于使用所述索引在所述BTB中执行查找以预测目标地址; 第二执行代码段,其用于使用所述索引在所述BIP中执行查找以预测推测性部分目标地址;和 使用代码段,其用于使用来自所述BTB的所述目标地址和来自所述BIP的所述推测性部分目标地址以产生用于下一个流的所述索引。24.根据权利要求23所述的非暂时性计算机可读存储介质,其中所述指令是用于设备制造的硬件描述语言(HDL)指令。
【文档编号】G06F9/38GK106030516SQ201480065959
【公开日】2016年10月12日
【申请日】2014年10月24日
【发明人】道格拉斯·威廉姆斯, 萨希尔·阿罗拉, 尼基尔·古普塔, 陈威宇, 德比杰特·达斯萨尔马, 马吕斯·埃弗斯
【申请人】超威半导体公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1