提高分支预测吞吐量的装置及系统的制作方法

文档序号:23051888发布日期:2020-11-25 17:27阅读:116来源:国知局
提高分支预测吞吐量的装置及系统的制作方法

本公开涉及处理器指令流,并且更具体地,涉及通过跳过没有分支的高速缓存线(cacheline)来提高分支预测吞吐量。



背景技术:

在计算机架构中,分支预测器或分支预测单元是在实际计算和知道结果之前尝试猜测分支(例如,if-then-else结构、跳转指令)将走哪条路的数字电路。分支预测器的目的通常是改进指令流水线中的流程。在许多现代流水线微处理器架构中,分支预测器在实现高效能方面发挥着至关重要的作用。

通常利用条件跳转指令来实现双向分支。条件跳转可以是“不采取(nottaken)”并继续执行紧随条件跳转之后的第一代码段,也可以是“采取(taken)”并跳转到存储第二代码段的程序存储器中的不同位置。在已经计算条件并且条件跳转已经通过指令流水线的执行阶段之前,通常不确定条件跳转是采取还是不采取。

在没有分支预测的情况下,处理器通常将不得不在下一个指令能够进入流水线中的获取阶段之前等待条件跳转指令通过执行阶段。分支预测器通过尝试猜测条件跳转是最有可能采取还是不采取来试图避免这种时间浪费。然后获取在分支的目的地处被猜测最有可能是采取的指令,并推测执行。如果指令执行阶段检测到猜测的分支是错误的,则通常丢弃推测执行或部分执行的指令,并且流水线从正确的分支重新开始,从而导致延迟。



技术实现要素:

根据一个一般方面,一种装置可以包括:分支预测电路,被配置为预测分支指令是采取还是不采取。装置可以包括分支目标缓冲器电路,被配置为存储存储器段空标志,所述存储器段空标志指示目标地址之后的存储器段是否包括至少一个其他分支指令,其中,所述存储器段空标志是在分支指令出现之前的提交阶段创建的。分支预测电路可以被配置为如果存储器段空标志指示缺少其他分支指令(或多个)则跳过存储器段。

根据另一个一般方面,一种装置可以包括分支检测电路,被配置为在当前指令的提交阶段期间检测存储在存储器段的一部分内的至少一个分支指令的存在。装置可以包括分支目标缓冲器电路,被配置为存储:分支指令地址;以及存储器段空标志,指示目标地址之后的存储器段的一部分是否包括至少一个其他分支指令。

根据另一个一般方面,一种系统可以包括分支检测电路,被配置为在当前提交指令提交阶段期间检测存储在存储器段的一部分内的至少一个分支指令的存在。系统可以包括分支目标缓冲器电路,被配置为存储:分支指令地址;以及存储器段空标志,指示目标地址之后的存储器段的一部分是否包括至少一个其他分支指令。系统可以包括分支预测电路,被配置为预测分支指令是否是采取,并且其中,分支预测电路被配置为如果相关联的存储器段空标志指示缺少分支指令,则跳过存储器段。

在附图和以下描述中阐述了一个或多个实现方式的细节。根据说明书和附图以及权利要求书,其他特征将显而易见。

基本上如至少一个附图所示和/或结合至少一个附图来描述一种用于处理器指令流的系统和/或方法,更具体地,通过跳过没有分支的高速缓存线来提高分支预测吞吐量的系统和/或方法,如更完整地阐述于权利要求中。

附图说明

图1是根据所公开的主题的系统的示例实施例的框图。

图2是根据所公开的主题的数据结构的示例实施例的框图。

图3是根据所公开的主题的数据结构的示例实施例的示图。

图4是根据所公开的主题的系统的示例实施例的框图。

图5是根据所公开的主题的技术的示例实施例的流程图。

图6是根据所公开的主题的技术的示例实施例的流程图。

图7是可以包括根据所公开的主题的原理形成的设备的信息处理系统的示意性框图。

各个附图中相似的参考符号指示相似的元件。

具体实施方式

在下文中将参照附图更全面地描述各种示例实施例,在附图中示出了一些示例实施例。然而,本公开的主题可以以许多不同的形式来体现,并且不应被解释为限于在此阐述的示例实施例。相反,提供这些示例实施例以使得本公开将是彻底和完整的,并且将向本领域技术人员充分传达本公开主题的范围。在附图中,为了清楚起见,可能夸大了层和区域的尺寸和相对尺寸。

将理解,当元件或层被称为“在”另一元件或层“上”,“连接到”或“耦合到”另一元件或层时,它可以直接在另一元件或层之上,连接或耦合到另一元件或层,或者可以存在中间元件或层。相反,当元件被称为“直接在”另一元件或层“上”,“直接连接到”或“直接耦合到”另一元件或层时,不存在中间元件或层。全文中,相同的标号表示相同的元件。如本文所使用的,术语“和/或”包括一个或多个相关联列出的项目的任何和所有组合。

将理解,尽管术语第一,第二,第三等在本文中可用于描述各种元件,组件,区域,层和/或部分,但是这些元件,组件,区域,层和/或部分不应受这些术语的限制。这些术语仅用于区分一个元件,组件,区域,层或部分与另一区域,层或部分。因此,在不脱离本公开主题的教导的情况下,以下讨论的第一元件,组件,区域,层或部分可以被称为第二元件,组件,区域,层或部分。

为了便于描述,在本文中可以使用空间相对术语,诸如“之下”,“在...下方”,“之上”,“在...上方”,“上面”等,以描述一个元件或特征与另一元件(或多个)或特征(或多个)的关系,如图所示。将理解,除了附图中描绘的取向之外,空间相对术语还意在涵盖设备在使用或操作中的不同取向。例如,如果附图中的设备被翻转,则被描述为在其他元件或特征“之下”或“下面”的元件将被定向为在其他元件或特征“之上”。因此,示例性术语“之下”可以包括之上和之下两个方位。可以以其他方式定向设备(旋转90度或其他取向),并据此解释此处使用的空间相对描述语。

同样地,为了便于描述,可以在本文中使用诸如“高”、“低”、“上拉”、“下拉”、“1”、“0”等的电气术语,以便于描述相对于电压电平或电流的其他电压电平或另一元件(或多个)或特征(或多个),如图所示。将理解,除了附图中描绘的电压或电流之外,电气相对术语意在涵盖设备在使用或操作中的不同参考电压。例如,如果图中的设备或信号被反转或使用其他参考电压,电流或电荷,则与新参考电压或电流相比,被描述为“高”或“上拉”的元件将为“低”或“下拉”。因此,示例性术语“高”可以涵盖相对低或高的电压或电流。否则,设备可以基于不同电参考框架,并相应地解释本文所使用的电相对描述符。

本文所使用的术语仅出于描述特定示例实施例的目的,并且无意于限制本公开的主题。如本文所使用的,单数形式“一”,“一个”和“该”也意在包括复数形式,除非上下文另外明确指出。还将理解,当在本说明书中使用术语“包括”和/或“包含”时,指定所述特征,整数,步骤,操作,元件和/或组件的存在,但并不排除一个或多个其他特征,整数,步骤,操作,元件,组件和/或其组的存在或添加。

在此参照截面图描述示例实施例,该截面图是理想示例实施例(和中间结构)的示意图。这样,例如由于制造技术和/或公差导致的图示形状的变化是可以预期的。因此,示例实施例不应被解释为限于本文所示的区域的特定形状,而应包括例如由制造引起的形状偏差。例如,示出为矩形的植入区域通常将具有在其边缘处的圆形或弯曲特征和/或植入物浓度梯度,而不是从植入区域到非植入区域的二元变化。同样,通过植入形成的埋入区域可以导致在埋入区域与通过其发生植入的表面之间的区域中的某些植入。因此,附图中示出的区域本质上是示意性的,并且它们的形状并不旨在示出设备的区域的实际形状,也不旨在限制本公开主题的范围。

除非另有定义,否则本文中使用的所有术语(包括技术术语和科学术语)具有与本公开主题所属领域的普通技术人员通常所理解的相同含义。还将理解,诸如在常用词典中定义的那些术语应被解释为具有与其在相关技术的上下文中的含义一致的含义,并且除非本文明确定义,否则将不会以理想化或过于正式的意义进行解释

此后,将参照附图详细解释示例实施例。

图1是根据所公开的主题的系统100的示例实施例的框图。在各种实施例中,系统100可以包括计算机、多个分立集成电路或片上系统(soc)。如下所述,系统100可以包括在该图中未示出以便不模糊所公开的主题的许多其他组件。

在所示的实施例中,系统100包括系统存储器104。在各个实施例中,系统存储器104可以由动态随机存取存储器(dram)组成。但是应当理解,以上仅是一个示例性示例,所公开的主题不限于此。在这样的实施例中,系统存储器104可以包括模块上存储器(例如,双列直插式存储器模块(dimm)),可以是被焊接或以其他方式固定地与系统100集成的集成芯片,或者甚至可以被结合为包括系统100的集成芯片的一部分(例如,soc)。应当理解,以上仅仅是一些说明性示例,所公开的主题不限于此。

在所示的实施例中,系统存储器104可以被配置为存储数据段或信息。这些数据段可以包括使处理器102执行各种操作的指令。通常,系统存储器104可以是包括多个高速缓存器的更大存储器层级的一部分。在各种实施例中,本文描述的操作可以由存储器层级的另一层或等级(例如,级别2(l2)高速缓存器)执行。本领域技术人员应当理解,尽管参考系统存储器104描述操作,但是公开的主题不限于该说明性示例。

在所示的实施例中,系统100还包括处理器102。处理器102可以被配置为执行各种指令所指示的多个操作。这些指令可以由各种执行单元(大多数未示出)执行,诸如算术逻辑单元(alu)、浮点单元(fpu)、加载/存储单元(lsu)、指令获取单元116(ifu)等。可以理解,单元仅仅是组合在一起以执行处理器102的功能的一部分的电路的集合。通常,单元在处理器102的流水线架构中执行一个或多个操作。

在所示的实施例中,处理器102可以包括分支预测单元(bpu)112。如上所述,当处理器102正在执行指令流时,一个(或多个)指令可以是分支指令。分支指令是一种导致指令流在两个或更多个路径之间分支或分叉的指令。分支指令的典型示例是if-then结构,其中,如果(if)满足某个条件(例如,用户点击“确定(ok)”按钮),则(then)将执行第一指令集合,并且如果(if)不满足特定条件(例如,用户点击“取消(cancel)”按钮),则(then)将执行第二指令集合。如上所述,因为新指令必须在知晓分支、跳转或if-then结构的结果之前进入处理器102的流水线(因为解析分支指令的流水线阶段位于流水线的深处),所以这是流水线处理器架构中的问题。因此,必须防止新指令进入流水线,直到分支指令被解析(从而否定了流水线架构的主要优点),或者处理器102必须猜测指令流将以何种方式分支并推测性地将那些指令放入流水线中。bpu112可以被配置为预测指令流将如何分支。在所示的实施例中,bpu112可以被配置为输出预测指令,或者更准确地,输出存储预测指令的存储器地址。

在所示的实施例中,处理器102包括分支预测地址队列(bpaq)114。bpaq114可以包括存储器结构,被配置为存储关于已经由bpu112预测的预测指令的多个地址。bpaq114可以以先进先出(fifo)的顺序存储这些预测指令的地址,使得以与bpu112预测它们的顺序相同的顺序从bpaq114输出指令地址。

在所示的实施例中,处理器102包括指令获取单元(ifu)116,被配置为从存储器层级获取指令并将它们放入处理器102的流水线。在这样的实施例中,ifu116可以被配置为从bpaq114中采用与最近的或最旧的指令(下一个指令)相关联的存储器地址,并从存储器层级请求实际指令。理想地,指令将从存储器层级中被快速提供,并被放入处理器102的流水线。

理想地,可以(通过存储器访问(或多个))从级别1(l1)指令高速缓存器118中获取指令。在这样的实施例中,作为存储器层级的顶级或更高等级,l1指令高速缓存器118可以在流水线中相对较快并且引起很少或没有延迟。然而,偶尔地,l1指令高速缓存器118可能不包括期望指令。这将导致高速缓存缺失(miss),并且将不得不从存储器层级(例如,系统存储器104)的更低更慢的等级中获取或加载指令。这样的高速缓存缺失可能导致处理器102的流水线中的延迟,因为指令将不会以每个周期一个的速率(或处理器架构中的最大速率)被输入到流水线中。

在所示的实施例中,处理器102包括指令预取单元(ipfu)120。ipfu120被配置为在ifu116执行实际获取操作之前将指令预取到l1指令高速缓存器118中。因此,ipfu120减少了ifu116经历的任何高速缓存缺失的发生。ipfu120可以通过在ifu116执行之前从l1指令高速缓存器118请求预测指令来做到这一点。在这样的实施例中,如果然后发生高速缓存缺失,则l1指令高速缓存118将开始从系统存储器104请求缺失指令的处理。在这样的实施例中,可以在ifu116请求时接收指令并将其存储在l1指令高速缓存器118中。

返回到bpu112,处理器102可以包括分支目标缓冲器(btb)电路122。在各种实施例中,btb122可以包括存储器,将分支地址映射到(其中分支将跳转到的)先前预测的目标地址。在这样的实施例中,btb122可以指示分支指令的先前迭代上次跳转到或预测跳转到哪个地址。这使得bpu112的工作更加简单快捷,因为bpu112可以简单地从btb122请求预测分支目标地址,而不是执行完整的地址预测计算。

同样地,处理器102可以包括返回地址堆栈(ras)电路124。在各种实施例中,ras124可以是存储器或数据结构,其存储一旦当前分支操作或指令(通常是返回指令)已被完成后返回到的存储器地址。例如,当分支是子例程调用时,一旦完成,子例程将返回到调用存储器地址之后的下一个指令。在各种实施例中,ras计算电路126可以执行该返回地址计算。

现在示出处理器102的基本结构,图2示出由处理器102执行的操作。

图2是根据所公开的主题的数据结构200的示例实施例的框图。在各种实施例中,数据结构200可以表示将由图1的处理器102获取和处理的各种指令的存储器存储。

在此上下文中,存储器的块或部分的通用术语是“存储器段(segment)”。出于示例的目的,存储器段可以包括高速缓存线,但是在特定实施例中,该高速缓存线较大。在此上下文中,高速缓存线可以是l1指令高速缓存器118和主存储器(例如系统存储器104)之间的数据传递的单元。在各种实施例中,所公开的主题可以涉及多个高速缓存线的存储器段、高速缓存线的一部分或根本没有在高速缓存线中测量的存储器大小。应当理解,以上仅是一个示例性示例,所公开的主题不限于此。

在所示的实施例中,数据结构200包括依序出现的高速缓存线204和206。在这样的实施例中,如上所述,处理器102通常从高速缓存线204和206的开始(例如,左侧)到高速缓存线204和206的末尾(例如,右侧)获取并处理指令。

高速缓存线中包括分支指令a211、b212、c213、d214、e215、f216和g217。在各种实施例中,图1的bpu112可以被配置为处理每个分支指令(为简单起见,将其视为子例程调用),并且当分支返回到该点时,继续按顺序处理高速缓存线。

bpu112可以被配置为在高速缓存线边界的存储器段处停止处理(达该时钟周期(或多个))。例如,在处理高速缓存线204时,bpu112可以在第一周期处理a211,然后在第二周期处理b212,然后在第三周期处理c213,然后在第四周期处理d214,然后在第五周期检查部分224,在第六周期继续移动到高速缓存线206的e215之前,停止于高速缓存线204的末尾。

由于在部分224(与部分222相对)中没有要处理的分支,因此检查该高速缓存线所花费的时间是浪费的周期(或处理该部分224所花费的许多周期)。在各种实施例中,部分224可以包括完整的高速缓存线。所公开的主题可以消除或减少这种分支流水线冒泡(或在一个或更多个周期期间缺乏操作)。

在所公开的主题中,btb122和/或ras124可以包括部分224或更一般地在任何给定分支指令目标之后的部分是否没有(emptyordevoid)分支指令的指示。在这样的实施例中,“空”并不意味着没有指令被存储在那里,仅意味着没有分支指令被存储在存储器段中。期望(但不是必需)许多非分支指令将填充该部分224。

例如,分支202(例如,来自调用d214的返回分支)可以将程序计数器(pc)返回到部分222的末尾。在该返回之后,bpu112可以检查ras124并确定d214之后(部分224)不再存在分支指令。然后,bpu112可以开始处理下一个高速缓存线206;因此,节省了为检查部分224的分支所涉及的浪费的计算时间。

类似地,btb122可以包括标志,该标志指示分支的目标地址之后的存储器段是否没有额外分支指令。在这样的实施例中,如果分支202不是返回(来自调用)而是另一类型的分支指令(例如,调用、无条件跳转、跳转等),则btb122可以包括目标地址(例如,部分224的开始的地址)以及从目标地址到高速缓存线的末尾的部分(即部分224)是否没有额外分支指令。

图3是根据所公开的主题的数据结构300和301的示例实施例的示图。在这样的实施例中,数据结构300可以由分支目标缓冲器(例如,图1的btb122)存储。在各种实施例中,数据结构301可以由返回地址堆栈(例如,图1的ras124)存储。应当理解,以上仅仅是一些说明性示例,所公开的主题不限于此。

在所示的实施例中,数据结构300可以示出btb的状态的代表性实施例。在这样的实施例中,btb可以包括至少三个列或字段(尽管在各种实施例中可以使用更多列或字段)。第一字段302包括分支指令的地址(或其他标识符)。第二字段304可以包括分支的预测目标地址(即,分支可能跳转到的地址)。在传统的btb中,除了有效标志(未示出)之外(注意是否可以使用行、线或条目),这两个字段302和304可能是仅有的列或字段。

在这样的实施例中,当bpu遇到分支指令时,经由其存储器地址(第一字段302)对其进行查找,并且bpu确定要在存储器中的何处找到下一个指令(经由第二字段304)。如上所述,在这样的实施例中,在到达那个目标地址时,bpu可能浪费一个或更多个周期来在不存在的存储器地址中寻找分支指令(即,经过目标地址的存储器段为空或没有分支指令)。

然而,在所示的实施例中,bpu可以被配置为检查第三字段或空标志306。在这样的实施例中,空标志306可以指示经过目标地址的存储器段是否为空或没有分支指令。在各种实施例中,可以在第一次遇到分支指令时计算空标志306的值。在一些实施例中,当分支的正确性(或缺乏正确性)得到完全解决时,这可以在提交阶段或流水线阶段完成。

在各种实施例中,存储器段的空标志306可以包括单个位或真/假值。在这样的实施例中,空标志306可以仅指代包括目标地址的立即存储器段(immediatememorysegment)。在另一个实施例中,空标志306可以指示应该跳过多少存储器段。例如,数据结构300的最后一行具有的值为3,表示当前存储器段加上另外两个存储器段没有分支指令。

在另一个实施例中,空标志306可以包括有效标志。在另一个实施例中,空标志的有效标志可以被存储为单独的字段(未示出)。在这样的实施例中,空标志的有效标志可以指示是否已经计算了空标志306并且是否可以依赖空标志306。例如,可以在指令获取流水线阶段期间在btb中放置一条目,但是可以在提交阶段之前不计算空标志306。或者,在另一个示例中,空标志306可能仅对被预测为“采取”的分支有效,而对于被预测为“不采取”的分支无效(反之亦然)。在又一个实施例中,空标志306可以仅对某些类型的分支(例如,调用和返回)有效。应当理解,以上仅仅是几个说明性示例,所公开的主题不限于此。

在这样的实施例中,空标志306可以增加1位。在这样的实施例中,有效且为真(或置位)的空标志可以是“0x11”,而有效但为假(或已清除)的空标志可以是“0x10”,其中第一位是有效位,且第二位是空状态。应当理解,以上仅是一个示例性示例,所公开的主题不限于此。

在所示的实施例中,数据结构301可以示出ras的状态的代表性实施例。在这样的实施例中,ras可以包括至少两列或两个字段(尽管在各种实施例中可以使用更多列或字段)。字段312包括调用分支指令将返回的返回地址(或其他标识符)。在传统的ras中,除了有效标志(未示出)之外(注意是否可以使用行、线或条目),字段312可能是唯一的列或字段。传统上,返回地址被推入数据结构301的顶部,并且然后以后进先出(lifo)的方式从顶部弹出。

在所示的实施例中,bpu可以被配置为检查第二字段或空标志316。在这样的实施例中,空标志316可以指示经过返回指令的目标地址(字段312)的存储器段是否没有分支指令,如上所述。在各种实施例中,可以在第一次遇到调用分支指令时计算空标志316的值。在各个实施例中,空标志316可以类似于上述的标志。在各种实施例中,btb的空标志306和ras的空标志316可以包括格式或信息上的差异。

图4是根据所公开的主题的系统400的示例实施例的框图。在各种实施例中,系统400可以包括计算机、多个分立集成电路或片上系统(soc)。如下所述,系统400可以包括在该图中未示出以便不模糊所公开的主题的许多其他组件。

在所示的实施例中,系统400包括系统存储器104。在各个实施例中,系统存储器104可以由动态随机存取存储器(dram)组成。不过应当理解,以上仅是一个示例性示例,所公开的主题不限于此。在这样的实施例中,系统存储器104可以包括模块上的存储器(例如,双列直插式存储器模块(dimm)),可以是被焊接或以其他方式固定地与系统400集成的集成芯片,或者甚至可以被结合为包括系统400的集成芯片的一部分(例如,soc)。应当理解,以上仅仅是一些说明性示例,所公开的主题不限于此。

在所示的实施例中,系统存储器104可以被配置为存储数据段或信息。这些数据段可以包括使处理器102执行各种操作的指令。通常,系统存储器104可以是包括多个高速缓存器的更大存储器层级的一部分。在各种实施例中,本文描述的操作可以由存储器层级的另一层或等级(例如,级别2(l2)高速缓存器)执行。本领域技术人员应当理解,尽管参考系统存储器104描述操作,但是公开的主题不限于该说明性示例。

在所示的实施例中,系统400还包括处理器102。处理器102可以被配置为执行各种指令所指示的多个操作。这些指令可以由各种执行单元(大多数未示出)执行,诸如算术逻辑单元(alu)、浮点单元(fpu)、加载/存储单元(lsu)、指令获取单元116(ifu)等。可以理解单元仅仅是组合在一起以执行处理器102功能的一部分的电路的集合。通常,单元在处理器102的流水线架构中执行一个或多个操作。

在各种实施例中,处理器102可以在各种流水线阶段中操作。在计算中,流水线,也被称为数据流水线,是以粗序列(roughseries)连接的数据处理元素的集合,其中一个元素的输出是下一个元素的输入。流水线的元素通常以并行或按时间分割的方式执行。通常在元素之间插入一定量的缓冲存储器。

在经典的精简指令集计算机(risc)流水线中,阶段包括:指令获取(大部分在图1中示出)、指令解码、执行、存储器访问和回写。在现代的无序和推测执行处理器中,处理器102可能执行不需要的指令。其中确定是否需要指令(或其结果)的流水线阶段被称为提交阶段。如果将提交阶段放入经典risc流水线的procrustean床中,则可能会将其放入回写阶段。在各种实施例或架构中,提交阶段可以是单独的流水线阶段。

在所示的实施例中,处理器102可以包括如上所述的执行单元402。在所示的实施例中,处理器102可以包括提交队列404,在其中按照年龄顺序放置完成的指令。

在所示的实施例中,处理器102可以包括寄存器文件406。在这样的实施例中,当指令被提交(而不是丢弃)时,那些指令的结果可以被放置或提交到寄存器文件406中。在具有重命名寄存器的现代计算机中,提交动作可以包括将已经存储在寄存器文件406中的值验证或标记为正确。在各个实施例中,处理器可以包括高速缓存器418(例如,数据高速缓存器),其中寄存器文件的数据最终被移动,并且然后到系统存储器104,如上所述。

此外,在所示的实施例中,处理器102可以包括分支检测电路420。在这样的实施例中,分支检测电路420可以被配置为在当前指令的提交阶段期间检测与存储器段(例如,高速缓存线)的一部分一起存储的至少一个分支指令的存在。

在这样的实施例中,一旦分支检测电路420已经对于存储器段部分是否没有任何分支指令做出确定,则它可以在btb122中创建或更新存储器段空标签,如上所述。在各种实施例中,这可以包括置位或清除与分支指令相关联的空标签。

在一些实施例中,处理器102或分支检测电路420可以包括最后分支存储器422,存储从提交队列404遇到的最后一个或当前分支指令。在这样的实施例中,该最后分支存储器422可以指示与当前计算的空标签相关联的分支指令。在各种实施例中,该最后分支存储器422可以是有效的(正在计算活动的分支空标签)或无效的(没有正在计算活动的分支空标签)。

在各种实施例中,btb122可以是基于图的。在这样的实施例中,分支可以被存储为节点,并且边可以代表程序或指令集的控制流。在各种实施例中,公开的主题可以限于多级或层级btb结构的第一级btb。应当理解,以上仅是一个示例性示例,所公开的主题不限于此。

在各种实施例中,某些设计定义了以分支结尾的指令块和指令序列。在这样的实施例中,btb122可以基于块的开始地址而不是分支指令的实际地址查找分支或对分支编索引。在这样的实施例中,所公开的主题被相应地修改。此外,可以增强btb元数据以存储在遇到下一个分支指令之前可以跳过多少个空高速缓存线或存储器段。应当理解,以上仅仅是一些说明性示例,所公开的主题不限于此。

在各种实施例中,分支目标缓冲器(btb)可以被配置为存储与分支指令相关联的元数据,例如,空标志。分支预测流水线(bpp)可以被配置为检测其目标高速缓存线部分或完全为空的分支指令,并跳过对任何空目标高速缓存线的分支预测。在各种实施例中,bpp可以通过使用提交指令高速缓存线进行训练来实现此目的。bpp可以通过置位采取目标高速缓存线空标志中的至少一个来标记其目标高速缓存线为空的采取分支指令。bpp可以在分支指令的btb条目中将具有不采取目标高速缓存线空标志的不采取分支指令标记为真(true)。bpp可以检查分支指令的btb条目或返回地址堆栈(ras),以确定目标高速缓存线空标志是否被置位。如果目标高速缓存线空标志被置位,则bpp可以跳过对包括分支指令的目标高速缓存线的一个或多个指令高速缓存线的分支预测。

图5是根据所公开的主题的技术的示例实施例的流程图。在各种实施例中,技术500可以由诸如图4或图7的系统使用或产生。尽管可以理解,以上仅是一些说明性示例,但是所公开的主题不限于此。应该理解,所公开的主题不限于技术500所示的动作的顺序或数量。

在各种实施例中,如上所述,技术500可以示出由处理器或分支检测单元所采用的用于确定存储器段空标志的正确状态的技术的实施例,如上所述。在所示的实施例中,示出可以专门用于采取分支(takenbranch)的技术500。在另一个实施例中,可以对不采取分支(not-takenbranch)采用一技术。在又一个实施例中,可以对采取分支和不采取分支二者和/或各种类型的分支指令(例如,调用、返回、无条件跳转、条件跳转、零值跳转或其他值跳转等)采用技术。应当理解,以上仅是一个示例性示例,所公开的主题不限于此。

块502示出,在一个实施例中,可以检查提交指令以确定它是否是分支指令。如上所述,提交指令可以由提交队列提供或存储在提交队列中,该提交队列按年龄顺序容纳分支指令或非分支指令。在这样的实施例中,非分支指令可以通过它们来自的存储器段来分组。

块504示出,在一个实施例中,如果提交指令是分支指令,则如上所述,可以将分支指令(或其地址)存储在最后分支存储器中。在各个实施例中,最后分支存储器可以被标记为有效或标记为存储用于空标志确定的地址。

块506示出,在一个实施例中,如果提交指令不是分支指令,则可以进行检查以确定最后分支存储器是有效还是活动的。

块508示出,在一个实施例中,如果提交指令不是分支指令并且最后分支存储器值是有效的,则可以将与存储在最后分支存储器中的分支相关联的空标志设置为指示存储器段的其余部分不包含分支指令的值。如上所述,可以将空标志存储在btb中。

块510示出,在一个实施例中,如果提交指令不是分支指令,则最后分支存储器值可以被无效或被标记为不活动。在各种实施例中,如果块506的结果指示最后分支存储器值已经是无效的,则可以跳过该块510。

块599示出停止点。然而,应当理解,可以对每个提交指令重复技术500。

图6是根据所公开的主题的技术的示例实施例的流程图。在各种实施例中,技术600可以由诸如图1或图7的系统使用或产生。尽管可以理解,以上仅是一些说明性示例,但是所公开的主题不限于此。应当理解,所公开的主题不限于技术600所示的动作的顺序或数量。

在各种实施例中,如上所述,技术600可以示出由处理器或分支预测单元所采用的用于确定是跳过还是经过存储器段或高速缓存线的部分的技术的实施例,如上所述。在所示的实施例中,技术600可以专门用于所示出的采取分支。在另一个实施例中,可以对不采取分支采用技术。在又一个实施例中,可以对采取和不采取分支二者和/或各种类型的分支指令(例如,调用、返回、无条件跳转、条件跳转、零值跳转或其他值跳转等)采用一种技术。应当理解,以上仅是一个示例性示例,所公开的主题不限于此。

块602示出,在一个实施例中,可以对于分支指令是否被预测为采取做出确定。如果不是,则技术600可以停止699。不过,应当理解,以上仅是一个示例性示例,所公开的主题不限于此。

块604示出,在一个实施例中,可以对于已经遇到了哪种类型的分支指令做出确定。在所示的实施例中,确定可以是分支是调用、返回还是两者都不是。应当理解,以上仅是一个示例性示例,所公开的主题不限于此。

块606示出,在一个实施例中,如果分支指令既不是调用也不是返回,则如上所述,可以从btb读取(与分支指令相关联的)存储器段空标志。

块608示出,在一个实施例中,如果分支指令是调用分支指令,则可以确定对应返回分支指令的目标。然后可以确定返回的目标存储器段或高速缓存线的其余部分是否没有其他分支指令。一旦做出了该确定并且创建了存储器段空标志,那么可以将存储器段空标志与返回目标地址一起推到ras上,如上所述。在这样的实施例中,一旦已经为调用的最终返回准备好ras的空标志,那么bpu可以对调用指令执行块606。

块610示出,在一个实施例中,如果分支指令是返回分支指令,则如上所述,可以读取该分支的ras的空标志(通过块608准备)。

块612示出,在一个实施例中,可以确定空标志的值(由分支类型确定的btb或ras的值),如上所述。如果空标志没有被置位、被清除,或者空标志指示存储器段的其余部分不是无分支的,则技术600可以停止699,并且分支处理可以正常发生。

块614示出,在一个实施例中,可以确定包含目标地址的高速缓存线和目标地址之后的下一个顺序高速缓存线的虚拟到物理(v2p)地址转换是否可用。在各种实施例中,这可以被存储在后援转换缓冲器(translationlook-asidebuffer,tlb)中。如果包含目标地址的高速缓存线和目标地址之后的下一个顺序高速缓存线的虚拟到物理(v2p)地址转换不可用,则可以做出移至下一个存储器段的指示,使得可以进行额外的工作例如,tlb填充)。技术600可以在块699停止。

块616示出,在一个实施例中,可以确定目标高速缓存线和在目标高速缓存线之后的高速缓存线在高速缓存器(例如,指令高速缓存器)和/或btb(高速缓存命中无缺失)中均可用。如果不是,则技术可以不跳过空存储器,而是移至块699。

块618示出,在一个实施例中,如果空标志被置位(或指示可以跳过目标存储器段的其余部分)并且目标高速缓存线和在目标高速缓存线之后的高速缓存线在高速缓存器中均可用,则bpu可以跳过或经过当前存储器段的其余部分,如上所述。

块699示出停止点。不过可以理解,如上所述,bpu可以继续分支预测的进一步处理,并且技术600可以是更大分支预测技术的一部分。此外,应当理解,可以对每个分支指令重复技术600。

图7是信息处理系统700的示意性框图,该信息处理系统700可以包括根据所公开的主题的原理形成的半导体设备。

参照图7,信息处理系统700可以包括根据所公开的主题的原理而构造的一个或多个设备。在另一个实施例中,信息处理系统700可以采用或执行根据所公开的主题的原理的一种或多种技术。

在各种实施例中,信息处理系统700可以包括计算设备,例如膝上型计算机、台式计算机、工作站、服务器、刀片服务器、个人数字助理、智能手机、平板电脑和其他适当的计算机或虚拟机或其虚拟计算设备。在各个实施例中,信息处理系统700可以由用户(未示出)使用。

根据所公开的主题的信息处理系统700还可以包括中央处理单元(cpu)、逻辑或处理器710。在一些实施例中,处理器710可以包括一个或多个功能单元块(fub)或组合逻辑块(clb)715。在这样的实施例中,组合逻辑块可以包括各种布尔逻辑运算(例如,nand、nor、not、xor)、稳定逻辑器件(例如,触发器、锁存器)、其他逻辑器件或其组合。可以以简单或复杂的方式配置这些组合逻辑操作以处理输入信号来获得期望的结果。应当理解,尽管描述了同步组合逻辑操作的一些说明性示例,但是所公开的主题不限于此,并且可以包括异步操作或其混合。在一个实施例中,组合逻辑操作可以包括多个互补金属氧化物半导体(cmos)晶体管。在各种实施例中,可以将这些cmos晶体管布置在执行逻辑运算的门中;不过应当理解,可以使用其他技术并且在所公开的主题的范围内。

根据所公开的主题的信息处理系统700还可以包括易失性存储器720(例如,随机存取存储器(ram))。根据所公开的主题的信息处理系统700还可以包括非易失性存储器730(例如,硬盘驱动器、光学存储器、nand或闪存)。在一些实施例中,易失性存储器720、非易失性存储器730或其组合或部分可以被称为“存储介质”。在各种实施例中,易失性存储器720和/或非易失性存储器730可以被配置为以半永久性或基本上永久性的形式存储数据。

在各种实施例中,信息处理系统700可以包括一个或多个网络接口740,被配置为允许信息处理系统700成为通信网络的一部分并且经由通信网络进行通信。wi-fi协议的示例可以包括但不限于电气和电子工程师协会(ieee)802.11g、ieee802.11n。蜂窝协议的示例可以包括但不限于:ieee802.16m、(亦称无线man(城域网)高级)、长期演进(lte)高级、gsm(全球移动通信系统)演进(edge)的增强数据速率、演进高速分组访问(hspa+)。有线协议的示例可以包括但不限于ieee802.3(亦称以太网)、光纤通道、电力线通信(例如homeplug、ieee1901)。应当理解,以上仅仅是一些说明性示例,所公开的主题不限于此。

根据所公开的主题的信息处理系统700还可以包括用户接口单元750(例如,显示适配器、触觉接口、人机接口设备)。在各种实施例中,该用户接口单元750可以被配置为从用户接收输入和/或向用户提供输出。也可以使用其他种类的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。

在各种实施例中,信息处理系统700可以包括一个或多个其他设备或硬件组件760(例如,显示器或监视器、键盘、鼠标、相机、指纹读取器、视频处理器)。应当理解,以上仅仅是一些说明性示例,所公开的主题不限于此。

根据所公开的主题的信息处理系统700还可以包括一个或多个系统总线705。在这样的实施例中,系统总线705可以被配置为通信地耦合处理器710、易失性存储器720、非易失性存储器730、网络接口740、用户接口单元750和一个或多个硬件组件760。由处理器710处理的数据或从非易失性存储器730外部输入的数据可以存储在非易失性存储器730或易失性存储器720中。

在各种实施例中,信息处理系统700可以包括或执行一个或多个软件组件770。在一些实施例中,软件组件770可以包括操作系统(os)和/或应用。在一些实施例中,os可以被配置为向应用提供一个或多个服务,并且管理或充当应用与信息处理系统700的各种硬件组件(例如,处理器710、网络接口740)之间的中介。在这样的实施例中,信息处理系统700可以包括一个或多个本原应用,本原应用可以被本地安装(例如,在非易失性存储器730内)并且被配置为由处理器710直接执行并且与os直接交互。在这样的实施例中,本原应用可以包括预编译的机器可执行代码。在一些实施例中,本原应用可以包括被配置为将源代码或目标代码转换为然后可由处理器710执行的可执行代码的脚本解释器(例如,cshell(csh)、applescript、autohotkey)或虚拟执行机(vm)(例如,java虚拟机、microsoft公共语言运行时)。

可以使用各种封装技术封装上述半导体设备。例如,可以使用层叠封装(pop)技术、球栅阵列(bga)技术、芯片尺寸封装(csp)技术、塑料带引线芯片载体(plcc)技术、塑料双列直插封装(pdip)技术、叠片内裸片封装技术、晶片内裸片形式技术、板上芯片(cob)技术、陶瓷双列直插封装(cerdip)技术、塑料标准四边扁平封装(pmqfp)技术、塑料扁平封装(pqfp)技术、小外型ic(soic)技术、缩小型小外型封装(ssop)技术、薄型小外型封装(tsop)技术、薄型扁平封装(tqfp)技术、系统级封装(sip)技术、多芯片封装(mcp)技术、晶片级结构封装(wfp)技术、晶片级处理堆叠封装(wsp)技术或本领域技术人员已知的其他技术中的任何一种来封装根据所公开的主题的原理构造的半导体设备。

方法步骤可以由执行通过对输入数据进行操作并生成输出来执行功能的计算机程序的一个或多个可编程处理器来执行。方法步骤也可以由专用逻辑电路执行,并且装置可以实现为专用逻辑电路,例如,fpga(现场可编程门阵列)或asic(专用集成电路)。

在各种实施例中,计算机可读介质可以包括指令,该指令在被执行时使设备执行方法步骤的至少一部分。在一些实施例中,计算机可读介质可以被包括在磁性介质,光学介质,其他介质或它们的组合中(例如,cd-rom,硬盘驱动器,只读存储器,闪存驱动器)。在这样的实施例中,计算机可读介质可以是有形且非暂时性体现的制品。

尽管已经参考示例实施例描述了所公开主题的原理,但是对于本领域技术人员显而易见的是,在不脱离这些所公开概念的精神和范围的情况下,可以对其进行各种改变和修改。因此,应当理解,以上实施例不是限制性的,而仅仅是说明性的。因此,所公开的概念的范围将由所附权利要求及其等同物的最宽泛的允许解释来确定,并且不应由前述描述约束或限制。因此,应理解,所附权利要求书旨在覆盖落入实施例范围内的所有此类修改和改变。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1