降低用于支持未命中先行的硬件成本的制作方法

文档序号:6496930阅读:142来源:国知局
降低用于支持未命中先行的硬件成本的制作方法
【专利摘要】公开的实施例涉及用于在处理器上执行程序指令的系统。在正常执行模式期间,系统发出用于以程序次序执行的指令。当在指令的执行期间遇到未解决的数据依赖性时,系统在先行模式中推测性地执行随后的指令以预取将来负载。当指令在先行模式期间退休时,用作该指令的目的地寄存器的工作寄存器不被复制到相应的结构寄存器。而是结构寄存器被标记为无效。注意,通过在先行模式期间不更新结构寄存器,系统不需要在进入先行模式之前对结构寄存器设置校验点。
【专利说明】降低用于支持未命中先行的硬件成本
[0001]发明人:Y.C.周和E.W.玛胡瑞恩
[0002]背景
【技术领域】
[0003]公开的实施例涉及用于提高计算机系统的性能的技术。具体而言,公开的实施例涉及用于降低参与支持当股线遇到长延时事件并在不等待长延时事件完成的情况下继续执行以产生预取时出现的先行模式的硬件成本的方法和装置。
【背景技术】
[0004]半导体制造技术的发展导致微处理器时钟速度的急剧增加。而存储器访问速度的相应增加还没有匹配微处理器时钟速度的这种增加。因此,微处理器时钟速度与存储器访问速度之间的差异不断增加,并产生明显的性能问题。快速微处理器系统的执行简档表明,很大比例的执行时间不是花费在微处理器芯内,而是花费在微处理器芯外的存储器结构内。这意味着,微处理器系统花费很大比例的时间来等待完成存储器引用(reference)而不是执行计算操作。
[0005]有效的高速缓存方案可减少执行的存储器访问的数量。但是,当诸如负载操作的存储器引用产生高速缓存未命中(miss)时,随后对于二级高速缓存、三级高速缓存或主存储器的访问可需要几百个时钟循环来完成,在此期间,处理器一般是空转的,不执行有用的工作。
[0006]已开发了“未命中先行”技术以提高运行遇到这种长延时事件的应用时微处理器的性能(例如,最外级高速缓存未命中)。在未命中先行技术中,当股线(例如,硬件线程)遇到诸如高速缓存未命中的长延时事件时,处理器使股线从正常操作模式迁移到先行模式。作为迁移的一部分,系统取得股线的处理器状态的校验点。在先行模式中,处理器执行与正常操作模式相同的代码,但将最外级高速缓存未命中转换成预取并将依赖于这些高速缓存未命中的数据的指令转换成无操作(no-op)。
[0007]当触发进入先行模式的长延时事件完成时,股线退出先行模式并从触发长延时事件的指令重新开始在正常操作模式中执行。注意,在指令在先行模式期间退休(retire)时,股线的结构寄存器状态被修改。但是,该股线的结构状态在重新开始在正常操作模式中执行之前恢复到校验点状态。
[0008]该未命中先行技术可明显提高处理器性能,原因是它可针对先行股线有效地执行指令和数据预取。但是,未命中先行技术具有很多缺点。(I)如上所述,常规的未命中先行技术包括在进入先行模式之前取得处理器状态的校验点。但是,支持该校验点操作在硬件成本上可能是十分昂贵的,特别是对于具有大量的结构寄存器(例如,寄存器窗口)的处理器结构而言。并且,高度多线程处理器可能需要许多并行的校验点。(2)同样,未命中技术消耗更多的电力,原因是必须最终非推测性地重新执行先行指令。(3)并且,未命中先行技术可从与先行股线共享相同的硬件资源的其它股线拿走硬件资源,由此使这些其它的股线变慢并最终影响处理器性能。
[0009]由此,希望能够在支持未命中先行模式的系统中减少或者消除上述缺点的负面影响。

【发明内容】

[0010]公开的实施例涉及用于在处理器上执行程序指令的系统。在正常执行模式期间,系统发出用于以程序次序执行的指令。当在指令的执行期间遇到未解决的数据依赖性时,系统在先行模式中推测性地执行随后的指令以预取将来负载、存储和指令。当指令在先行模式期间退休时,用作该指令的目的地寄存器的工作寄存器不被复制到相应的结构寄存器。而是结构寄存器被标记为无效。注意,通过在先行模式期间不更新结构寄存器,系统不需要在进入先行模式之前对结构寄存器设置校验点。
[0011]在一些实施例中,当指令读取在先行模式期间被标记为无效的结构寄存器时,该指令被转换成无操作。
[0012]在一些实施例中,当指令在先行模式期间退休时,用作该指令的目的地寄存器的工作寄存器不被立即解除分配,而是在不在先行模式中操作的股线需要工作寄存器并且工作寄存器文件已满的晚些时间被解除分配。注意,当工作寄存器被解除分配时,结构寄存器被标记为无效。
[0013]在一些实施例中,当最初导致系统离开正常执行模式的未解决的数据依赖性最终被解决时,系统从最初遇到未解决的数据依赖性的指令重新开始在正常执行模式中的执行。并且,重新开始在正常执行模式中的执行包含从结构寄存器中清除无效标记。
[0014]在一些实施例中,未解决的数据依赖性可包含:使用还没有从前面的负载未命中返回的操作数;使用还没有从前面的翻译后备缓冲器(TLB)未命中返回的操作数;使用还没有从来自存储缓冲器操作的前面的全部或部分写后读(RAW)返回的操作数;和使用依赖于经受未解决的数据依赖性的另一操作数的操作数。
[0015]在另一实施例中,当在正常执行模式期间在指令的执行期间遇到未解决的数据依赖性时,系统产生可随后被用于使程序的执行返回到该指令的点的校验点。注意,该校验点排除浮点寄存器,这减小校验点的尺寸。然后,系统在先行模式中推测性地执行随后的指令以预取将来负载。在先行模式期间,当指令更新浮点寄存器时,在该指令被提交时不允许其更新结构浮点寄存器。并且,当指令在先行模式期间读取浮点寄存器时,该指令被转换成无操作。
[0016]在另一实施例中,当在当前的股线的正常执行模式期间在指令的执行期间遇到未解决的数据依赖性时,系统确定最大数量的股线当前是否正在先行模式期间执行。如果是,则系统不允许当前的股线进入先行模式。否则,系统允许当前的股线进入先行模式。
[0017]在一些实施例中,当在正常执行模式期间在指令的执行期间遇到未解决的数据依赖性时,系统产生可随后被用于使程序的执行返回到该指令的点的校验点。在实施例中,产生校验点包含将股线的结构状态保存到系统存储器而不是专用的硬件结构。然后,系统推测性地在先行模式中执行随后的指令以预取将来负载。
[0018]在另一实施例中,当在先行模式中执行时,系统对股线可使用的寄存器窗口的数量施加限制,其中,当达到该限制并且股线需要新的寄存器窗口时,对于该股线停止先行模式。
[0019]在另一实施例中,当在先行模式中执行时,如果处理器确定先行模式不可能揭露任何附加的外级高速缓存未命中,那么系统终止先行模式。然后,在未解决的数据依赖性被解决之后,系统从触发先行模式的指令重新开始在正常执行模式中的执行。
[0020]在一些实施例中,在先行模式揭露与在源自相同的触发指令的前面的先行模式期间揭露的相同数量的高速缓存未命中之后,系统确定先行模式不可能揭露附加的外级高速缓存未命中。在这些实施例中,处理器可对于触发指令使用程序计数器,以执行表查找,从而确定在源自相同的触发指令的前面的先行模式期间揭露的高速缓存未命中的数量。并且,如果在源自相同的触发指令的前面的先行模式期间没有揭露外级高速缓存未命中,那么不进入先行模式。
[0021 ] 在一些实施例中,在先行模式执行与源自相同的触发指令的前面的先行模式期间在揭露最后的外级高速缓存之前执行的数量相同的指令之后,系统确定先行模式不可能揭露附加的外级高速缓存未命中。
[0022]在一些实施例中,在先行模式在先行模式遇到N个分支之后,其中,N个分支由于数据依赖性问题而是不可解决的,并且,通过具有低的置信度的分支预测器被预测,系统确定先行模式不可能揭露附加的外级高速缓存未命中。
[0023]在一些实施例中,系统用比正常执行模式中的股线低的优先级处理先行模式中的股线。例如,与正常操作模式中的股线相比,系统可向先行模式中的股线分配更少的资源。在另一例子中,在丢弃对于正常操作模式中的股线的预取请求之前,系统丢弃对于先行模式中的股线的预取请求。
【专利附图】

【附图说明】
[0024]图1A示出根据公开的实施例的处理器。
[0025]图1B示出根据公开的实施例的结构寄存器文件。
[0026]图2示出根据公开的实施例的用于股线的可能的操作模式。
[0027]图3给出根据公开的实施例的示出可如何在先行模式期间避免对于结构寄存器文件的更新的流程图。
[0028]图4给出根据公开的实施例的示出可如何在不包含浮点寄存器的情况下产生校验点的流程图。
[0029]图5给出根据公开的实施例的示出可如何限制在先行模式中的股线的数量的流程图。
[0030]图6给出根据公开的实施例的示出可如何将校验点保存到系统存储器而不是专用硬件结构的流程图。
[0031]图7给出根据公开的实施例的示出可如何对在先行模式中的股线限制寄存器窗口的数量的流程图。
[0032]图8给出根据公开的实施例的示出当确定先行模式不可能揭露任何附加的外级高速缓存未命中时可如何终止先行模式的流程图。
[0033]图9给出根据公开的实施例的示出可如何用比正常执行模式中的股线低的优先级处理先行模式中的股线的流程图。【具体实施方式】
[0034]给出以下的描述以使得本领域技术人员能够实施和使用公开的实施例,并且,在特定的应用及其需求的背景下提供以下的描述。本领域技术人员很容易想到公开的实施例的各种修改,并且,在不背离公开的实施例的精神和范围的情况下,这里限定的一般原理可被应用于其它的实施例和应用。因此,公开的实施例不限于表示的实施例,而应被赋予与这里公开的原理和特征一致的最宽的范围。
[0035]在本【具体实施方式】中描述的数据结构和代码一般存储于可以是可存储供计算机系统使用的代码和/或数据的任何装置或介质的非暂时性计算机可读存储介质上。非暂时性计算机可读存储介质包含但不限于易失性存储器、非易失性存储器、诸如盘驱动、磁带、CD(紧致盘)、DVD(数字万用盘或数字视频盘)的磁性和光学存储装置或现在已知或以后开发的能够存储代码和/或数据的其它介质。
[0036]在本【具体实施方式】中描述的方法和处理可体现为可存储于以上描述的非暂时性计算机可读存储介质上的代码和/或数据。当计算机系统读取和执行存储于非暂时性计算机可读存储介质上的代码和/或数据时,计算机系统执行体现为数据结构和代码并存储于非暂时性计算机可读存储介质内的方法和处理。并且,以下描述的方法和处理可包含于硬件模块中。例如,硬件模块可包含但不限于应用特定集成电路(ASIC)芯片、场可编程门阵列(FPGA)和现在已知或以后开发的其它可编程逻辑器件。当硬件模块被激活时,硬件模块执行包含于硬件模块内的方法和处理。
[0037]处理器
[0038]图1A示出根据本发明的实施例的处理器100的设计。处理器100 —般可包含任何类型的处理器,这些处理器包含但不限于微处理器、主机计算机、数字信号处理器、智能电话、设备控制器和器具内的计算引擎。如图1A所示,处理器100包含大量的公用处理器结构,诸如指令高速缓存101、取得单元102、指令缓冲器103、解码级105、指令队列106、执行级108和提交级110。图1A还示出以下参照图8和图9更详细地描述的分支预测器121和先行距离预测表(LDPT) 122。
[0039]处理器100包含保持当在处理器100内执行指令时使用的值的两个本地存储器结构,g卩,结构寄存器文件(ARF) 112和工作寄存器文件(WRF) 113。ARFl 12—般保持提交到处理器的结构状态中的执行指令的结果。一般地,ARFl 12在解码级105期间被读取并在提交级110期间被写入。特别地,在提交级110处,来自WRF113的值被复制到ARF112。注意,由于读取占用几个时钟循环,因此ARF112在解码级105期间被读取;稍后读取ARF112可导致处理指令的不必要的延迟。(但是,在其它的实施例中,ARF112可替代性地在执行级108期间被读取)。
[0040]WRFl 13保持被提交给ARF112之前的中间结果。WRFl 13在执行级108期间被读取,并被设计为绕过有限数量的执行结果回到执行级108以供随后的指令消耗。对于WRF113的访问较快。但是,WRF113只保持足够覆盖执行级108中的步骤数的结果。注意,不从WRF113接收它们的源操作数的指令必须读取ARFl 12。
[0041]在正常执行模式期间,取得单元102从指令高速缓存101取回要被执行的指令,并将这些指令馈送到指令缓冲器103。指令缓冲器103将指令转送到解码级105。从解码级105开始,指令通向指令队列106,该指令队列106将指令馈送到执行级108中。如果处理器100是支持有序指令执行的“有序处理器”,那么指令队列106可被组织为FIFO缓冲器。另一方面,如果处理器100是支持乱序执行的“乱序处理器”,那么指令队列106可被组织为“挑选队列”。挑选队列一般包含用于空中指令的条目。当用于指令的操作数最终变得可用时,可从挑选队列中选择要发出的指令。并且,注意,乱序处理器可能完成隐藏LI和L2高速缓存未命中的延时的良好的作业,这意味着,对于乱序处理器,先行模式的关注的高速缓存未命中可能是L3闻速缓存未命中。
[0042]保持跟踪依赖性
[0043]本发明保持跟踪数据依赖性,以确定指令是否经受未解决的数据依赖性。在一个实施例中,这可包括保持各寄存器的状态信息,其中,状态信息指示寄存器中的值是否依赖于未解决的数据依赖性。例如,图1B示出根据本发明的实施例的结构寄存器文件(ARF) 112。注意,ARFl 12中的各寄存器与“无效”位120相关,该“无效”位120保持跟踪是否在寄存器中包含有效操作值或者是否由于未解决的数据依赖性而不能产生操作数。例如,如果寄存器等待操作数从负载操作返回,那么相应的无效位被设定以指示在寄存器中不存在希望的操作数值。当随后的指令引用标记为无效的源操作数值并产生存储于目的地寄存器的结果时,系统将目的地寄存器标记为无效以指示目的地寄存器中的值也依赖于未解决的数据依赖性。可通过用指令的源寄存器的无效位的“0R”标记目的地寄存器的无效位实现这一点。
[0044]状态图
[0045]图2给出根据本发明的实施例的包含先行模式204的状态图。系统在正常执行模式202中开始,其中,像指令从指令缓冲器103(参见图1)发出的那样执行指令。如果在指令的执行期间出现未解决的数据依赖性,那么系统移动到先行模式204。注意,未解决的数据依赖性可包含:使用还没有从前面的负载未命中返回的操作数;使用还没有从前面的翻译后备缓冲器(TLB)未命中返回的操作数;使用还没有从来自存储缓冲器操作的前面的全部或部分写后读(RAW)返回的操作数;和使用依赖于经受未解决的数据依赖性的另一操作数的操作数。
[0046]当移动到先行模式204时,系统可任选地产生在必要时可被用于将股线的执行返回到导致未解决的数据依赖性的“触发指令”的校验点。(注意,产生校验点包含保存处理器的精确结构状态)。当在先行模式204中操作时,系统像从指令缓冲器103接收指令那样执行指令。
[0047]当最终解决由触发指令导致的未解决的数据依赖性时,系统返回到正常执行模式202中。如果事先产生校验点,那么系统使用校验点以从触发指令重新开始执行。
[0048]降低硬件成本
[0049]设置校验点以支持先行模式的硬件成本与各校验点的尺寸并与支持的并行的校验点的数量成比例。各校验点一般包含股线的寄存器状态及其分支预测器状态的一部分(例如,分支历史寄存器、返回地址栈指针等)。注意,寄存器状态远大于分支预测器状态,特别是对于具有大量的结构寄存器的处理器结构。本公开描述可用于通过减小各校验点的尺寸或者通过减少 并行校验点的数量来降低校验点的硬件成本的多种技术。可以单独地或者组合地使用这些技术。[0050]使用WRF以在先行指令之间传送操作数
[0051]许多当代处理器(诸如SPARC处理器)实现单独的工作寄存器和结构寄存器。在这些处理器中,指令在执行中写入其目的地寄存器的工作寄存器复制。然后,当指令退休时,工作寄存器中的值被复制到相应的结构寄存器,并且工作寄存器被解除分配。在常规的未命中先行系统中,由于结构寄存器的校验点在向先行模式的迁移期间被取得,因此,允许先行模式中的指令在其退休时修改结构寄存器。在返回到正常执行模式之前,当校验点恢复时,这些结构寄存器将最终返回到它们的初始状态。
[0052]在本发明的一些实施例中,当先行指令退休时,工作寄存器中的值不被复制到相应的结构寄存器。事实上,相应的结构寄存器被标记为无效。读取该结构寄存器的随后的指令(由于在工作寄存器中不存在更新的值)被转换成无操作。当股线退出先行模式时,结构寄存器中的无效位被清除。注意,由于先行指令从未修改结构寄存器,因此,不需要结构寄存器的校验点,这消除校验点的硬件成本的大部分。(但应注意,系统仍对诸如程序计数器、用于分支预测器的全局历史寄存器和返回地址栈的少量的状态信息设置校验点)。
[0053]在该技术的变更例中,当来自先行模式中的股线的指令退休时,它不对其目的地寄存器的工作寄存器复制解除分配。以这种方式,读取该寄存器的随后的指令可继续从工作寄存器复制获得最新值。工作寄存器仅在不在先行模式中的股线需要工作寄存器且工作寄存器文件已满时被解除分配。在工作寄存器被解除分配时,寄存器的结构复制被标记为无效。该变更例通过减少结构寄存器被标记为无效以及依赖于该寄存器的随后先行指令被转换为无操作的频率而提高性能。虽然在实现单独的工作寄存器和结构寄存器的处理器的背景中描述了该技术,但该技术也适于在统一其工作寄存器和结构寄存器的处理器上工作。
[0054]具体而言,图3给出根据公开的实施例的示出可如何在先行模式期间避免对于结构寄存器文件的更新的流程图。在该处理的开始,系统在正常执行模式中发出指令(步骤302)。然后,系统确定未解决的数据依赖性是否导致了数据依赖停顿条件(步骤304)。如果否,那么系统返回步骤302以发出附加的指令。否则,如果存在数据依赖停顿条件,那么系统推测性地在先行模式中执行随后的指令以预取将来负载(步骤306)。在先行模式期间,当指令退休时,用作该指令的目的地寄存器的工作寄存器不被复制到结构寄存器;而是结构寄存器被标记为无效(步骤308)。并且,当指令读取在先行模式期间被标记为无效的结构寄存器时,指令被转换为无操作(步骤310)。然后,当最初导致系统离开正常执行模式的未解决的数据依赖性最终被解决时,系统从导致未解决的数据依赖性的触发指令重新开始在正常执行模式中的执行。系统还从结构寄存器中清除无效标记(步骤312)。
[0055]不对浮点寄存器设置校验点
[0056]另一降低设置校验点的成本的方式是不对浮点寄存器设置校验点。参照图4所示的流程图,当系统进入先行模式时,系统产生校验点,该校验点排除浮点寄存器(步骤406)。然后,系统开始推测性地执行指令以预取将来负载(步骤408)。当在先行模式中执行时,写入浮点寄存器的指令不被允许在它们退休时修改结构浮点寄存器(步骤410),并且,读取浮点寄存器的指令被转换为无操作(步骤412)。注意,浮点指令一般被不用于地址计算以预取将来负载。由此,该技术在不影响先行模式的有效性的情况下降低硬件成本。
[0057]限制先行模式中的股线数量[0058]也可通过对在任何给定的时间可在先行模式中的芯中的股线的数量施加限制,来降低设置校验点的成本。这减少需要支持的并行校验点的数量。当达到该限制时,没有更多的股线可进入先行模式,直到另一股线退出先行模式并且释放其校验点。例如,参照图5所示的流程图,在进入先行模式时,系统确定当前是否在先行模式中执行最大数量的股线(步骤506)。如果是,那么系统不允许当前的股线进入先行模式(步骤508)。否则,系统允许当前的股线进入先行模式,这可包括产生校验点(步骤510),并推测性地执行指令以预取将来负载(步骤512)。
[0059]将设置校验点的寄存器值保存到存储器
[0060]也可通过将校验点存储于系统存储器而不是专用硬件结构,来降低设置校验点的成本。具体而言,参照图6中的流程图,在进入先行模式时,系统首先通过将股线的结构状态保存到系统存储器而不是专用硬件结构产生校验点(步骤606)。然后,系统开始推测性执行指令以预取将来负载(步骤608)。在该技术中,产生校验点包含通过高带缓存层次向存储器发送一系列的存储。例如,如果校验点包含32个寄存器,那么将发出32个存储。在一个实施例中,被存储的存储器位置与先行模式中的股线的栈上的位置对应。在另一实施例中,存储器位置与特别对设置校验点保留的存储器的特殊区域对应。如果在支持寄存器窗口的处理器上使用该技术,那么只有与当前寄存器窗口对应的寄存器需要在进入先行模式时被存储于存储器。当新的寄存器窗口在处于先行模式中时被使用时,只有那时与那些寄存器窗口对应的寄存器才被存储到存储器。当需要在先行模式结束时恢复校验点时,通过负载从存储器恢复与当处于先行模式中时被使用的所有寄存器窗口对应的寄存器。
[0061]限制先行模式中的寄存器窗口
[0062]另一降低设置校验点的成本的方式是对未命中先行股线可使用的寄存器窗口的数量施加限制。当达到该限制并且股线需要新的寄存器窗口时,对该股线停止先行模式。具体而言,参照图7所示的流程图,在进入先行模式时,系统首先产生校验点(步骤706)。然后,系统推测性地执行指令以预取将来负载(步骤706)。当处于先行模式中时,如果股线尝试超过寄存器窗口的最大数量,那么系统停止股线的先行模式(步骤708)。
[0063]减少功率消耗和资源使用
[0064]由于先行模式消耗功率并且可能减慢其它股线,因此希望在找到下一有用的最外级高速缓存未命中的可能性较小时停止先行模式。并且,由于先行是推测性的,因此优选在执行它时使得其减慢其它非推测性股线的可能性被最小化。公开的实施例提供可被单独地或者组合使用以实现这些目的的多种技术。
[0065]可以使用大量的技术以选择性地停止先行模式。具体而言,参照图8所示的流程图,在进入先行模式时,系统推测性地执行指令以预取将来负载(806)。在先行模式期间,如果系统确定先行模式不可能揭露附加的外级高速缓存未命中,那么系统终止先行模式(步骤 808)。
[0066]在第一技术中,当先行模式中的股线已揭露一定数量的最外级高速缓存未命中时,处理器停止先行。该数量不静态固定,而是在处理器掌握当先行通过具有特定的程序计数(PC)值的负载指令被启动时它可能揭露多少最外级高速缓存未命中时被动态调整。在该技术中,在先行模式的开始,其最外级高速缓存未命中触发股线的进入先行模式的负载指令的程序计数(PC)值被用于索引称为先行距离预测表(LDPT)的表。(参见图1中的先行距离预测表122)。各表条目包含标签和值。在标签匹配时,如果值为零,那么股线不进入先行模式,原因是预测不可能揭露任何最外级高速缓存未命中。否则,如果值是非零的,那么股线进入先行模式,并且,随后,在其已揭露的最外级高速缓存未命中的数量等于该值时或者当触发进入先行模式的高速缓存未命中请求完成时,无论哪个更早,退出先行模式。
[0067]在标签失配时,股线进入先行模式,并且,当触发进入先行模式的高速缓存未命中请求完成时,退出先行模式。另外,LDPT条目的标签改变以反映该触发该先行片段的负载指令的PC值,并且该条目的值改变以反映该先行片段揭露的最外级高速缓存未命中的数量。虽然描述了简单表条目替代技术,但可使用诸如采用滞后的其它更复杂的替代技术。
[0068]LDPT可实现为专用硬件结构,或者它可实现为指令高速缓存的增强。在后一种实现中,为了减少硬件存储需求,作为使用触发负载指令的PC值以索引LDPT的替代,可以使用与该PC对应的指令高速缓存线地址。以这种方式,各指令高速缓存线仅需要一个LDPT条目。并且,指令高速缓存线的标签也用作LDPT条目的标签,从而进一步减少存储需求。假定条目的值栏是三个位,且指令高速缓存包含8K线(例如,具有64B线尺寸的512KB第二级指令高速缓存),那么LDPT的硬件存储需求仅是3KB。该基于高速缓存的实现的潜在缺点是由于在相同的指令高速缓存线中存在多于一个触发负载而导致的混叠。
[0069]在替代性实施例中,LDPT条目的值栏指示应在该先行片段中处理的最大数量的先行指令。在标签匹配时,当先行模式中的股线处理了那么多先行指令时,停止先行。在标签失配时,只要先行模式揭露最外级高速缓存未命中,都用到目前为止在当前先行片段中处理的先行指令的数量更新称为先行距离寄存器(LDR)的寄存器。在先行模式结束时,LDR的值指示什么时候应由于随后的指令不揭露任何附加的最外级高速缓存未命中而停止先行。该寄存器的值被复制到相应的LDPT条目的值栏。
[0070]在又一实施例中,当先行模式中的股线遇到被分支预测器(参见图1中的分支预测器121)视为以较低的置信度被预测的N个不可解决的分支时,处理器停止先行。这些分支是不可解决的,原因是它们是依赖于作为最外级高速缓存未命中的一个或更多个负载指令的数据。注意,分支预测的置信度值由一些类型的分支预测器提供。并且,注意,N的值和低置信度阈值是设计参数。
[0071]在另一实施例中,虽然在先行模式中推测性地执行指令,但是,与来自不在先行模式中的股线的指令相比,处理器可将属于先行模式中的股线的指令以较低的优先级进行处理。(参见图9所示的流程图的步骤906)。例如,处理器可防止先行模式中的股线在该股线当前使用多于预定数量的挑选队列条目时获取任何更多的“挑选队列”条目(在乱序处理器中)。在另一例子中,与来自不在先行模式中的股线的请求相比,L2高速缓存和/或L3高速缓存将来自先行模式中的股线的请求以低优先级进行处理。具体而言,如果高速缓存实现预取丢弃,那么来自先行模式中的股线的请求可在来自不在先行模式中的股线的请求之iu丢弃。
[0072]以上仅出于解释和描述的目的给出实施例的描述。它们不是详尽的或者将本说明书限于公开的形式。因此,对于本领域技术人员来说,许多修改和变更是十分明显的。另外,以上的公开不是要限制本说明书。本说明书的范围由所附的权利要求限定。
【权利要求】
1.一种用于在处理器上执行程序指令的方法,包括: 发出用于在正常执行模式期间执行的指令;和 当在指令的执行期间遇到未解决的数据依赖性时, 在先行模式中推测性地执行随后的指令以预取将来负载, 其中,当指令在先行模式期间退休时,用作该指令的目的地寄存器的工作寄存器不被复制到结构寄存器,而是结构寄存器被标记为无效,并且 其中不更新结构寄存器使得不需要在进入先行模式之前对结构寄存器设置校验点。
2.根据权利要求1的方法,其中,当指令读取在先行模式期间被标记为无效的结构寄存器时,该指令被转换成无操作。
3.根据权利要求1的方法,其中,当指令在先行模式期间退休时,用作该指令的目的地寄存器的工作寄存器不被立即解除分配,而是在不在先行模式中操作的股线需要工作寄存器并且工作寄存器文件已满的晚些时间被解除分配,并且其中,当工作寄存器被解除分配时,结构寄存器被标记为无效。
4.根据权利要求1的方法,其中,当最初导致系统离开正常执行模式的未解决的数据依赖性最终被解决时,该方法还包括从最初遇到未解决的数据依赖性的指令重新开始在正常执行模式中的执行。
5.根据权利要求4的方法,其中,重新开始在正常执行模式中的执行包含从结构寄存器中清除无效标记。
6.根据权利要求1的方法,其中,未解决的数据依赖性能够包含: 使用还没有从前面的负载未命中返回的操作数; 使用还没有从前面的翻译后备缓冲器(TLB)未命中返回的操作数; 使用还没有从来自存储缓冲器操作的前面的全部或部分写后读(RAW)返回的操作数;和 使用依赖于经受未解决的数据依赖性的另一操作数的操作数。
7.一种执行程序指令的装置,包括: 被配置为发出用于在正常执行模式期间执行的指令的执行机构;和 被配置为检测未解决的数据依赖性的检测机构; 其中,如果未解决的数据依赖性在指令的执行期间被检测到,那么执行机构被配置为, 在先行模式中推测性地执行随后的指令以预取将来负载, 其中,当指令在先行模式期间退休时,用作该指令的目的地寄存器的工作寄存器不被复制到结构寄存器,而是结构寄存器被标记为无效,并且 其中,不更新结构寄存器使得不需要在进入先行模式之前对结构寄存器设置校验点。
8.根据权利要求7的装置,其中,当指令读取在先行模式期间被标记为无效的结构寄存器时,该指令被转换成无操作。
9.根据权利要求7的装置,其中,当指令在先行模式期间退休时,用作该指令的目的地寄存器的工作寄存器不被立即解除分配,而是在不在先行模式中操作的股线需要工作寄存器并且工作寄存器文件已满的晚些时间被解除分配,并且其中,当工作寄存器被解除分配时,结构寄存器被标记为无 效。
10.根据权利要求7的装置,其中,当最初导致系统离开正常执行模式的未解决的数据依赖性最终被解决时,执行机构被配置为从最初遇到未解决的数据依赖性的指令重新开始在正常执行模式中的执行。
11.根据权利要求10的装置,其中,重新开始在正常执行模式中的执行包含从结构寄存器中清除无效标记。
12.一种用于在处理器上执行程序指令的方法,包括: 发出用于在正常执行模式期间执行的指令;和 当在指令的执行期间遇到未解决的数据依赖性时, 产生随后能够被用于使程序的执行返回到该指令的点的校验点,其中,校验点排除浮点寄存器;和 在先行模式中推测性地执行随后的指令以预取将来负载。
13.根据权利要求12的方法,其中,在先行模式期间, 当指令向浮点寄存器写入时,在该指令被提交时不允许其更新结构浮点寄存器;和 当指令读取浮点寄存器时,该指令被转换为无操作。
14.根据权利要求12的方法,其中,当最初导致系统离开正常执行模式的未解决的数据依赖性最终被解决时,该方法还包括使用校验点以从最初遇到未解决的数据依赖性的指令重新开始在正常执行模式中的执行。
15.一种执行程序指令的装置,包括: 被配置为发出用于在正常执行模式期间执行的指令的执行机构;和 被配置为检测未解决的数据依赖性的检测机构; 其中,如果未解决的数据依赖性在指令的执行期间被检测到,那么执行机构被配置为,产生随后能够被用于使程序的执行返回到该指令的点的校验点,其中,校验点排除浮点寄存器,和 在先行模式中推测性地执行随后的指令以预取将来负载。
16.根据权利要求15的装置,其中,在先行模式期间, 当指令向浮点寄存器写入时,在该指令被提交时不允许其更新结构浮点寄存器;以及 当指令读取浮点寄存器时,该指令被转换为无操作。
17.根据权利要求15的装置,其中,当最初导致系统离开正常执行模式的未解决的数据依赖性最终被解决时,执行机构被配置为使用校验点以从最初遇到未解决的数据依赖性的指令重新开始在正常执行模式中的执行。
18.一种用于在处理器上执行程序指令的方法,包括: 发出用于在正常执行模式期间执行的指令;和 在当前的股线在指令的执行期间遇到未解决的数据依赖性时, 确定最大数量的股线当前是否正在先行模式期间执行, 如果是,则不允许当前的股线进入先行模式,以及 否则,允许当前的股线进入先行模式,这包括产生能够随后被用于使程序的执行返回到该指令的点 的校验点以及推测性地执行随后的指令以预取将来负载。
19.一种执行程序指令的装置,包括: 被配置为发出用于在正常执行模式期间执行的指令的执行机构;和 被配置为检测未解决的数据依赖性的检测机构;其中,如果未解决的数据依赖性由当前的股线在指令的执行期间检测到,那么执行机构被配置为, 确定最大数量的股线当前是否正在先行模式期间执行; 如果是,则不允许当前的股线进入先行模式,以及 否则,允许当前的股线进入先行模式,这包括产生能够随后被用于使程序的执行返回到该指令的点的校验点和推测性地执行随后的指令以预取将来负载。
20.一种用于在处理器上执行程序指令的方法,包括: 发出用于在正常执行模式期间执行的指令;和 当股线在指令的执行期间遇到未解决的数据依赖性时, 产生能够随后被用于使程序的执行返回到该指令的点的校验点,其中,产生校验点包含将股线的结构状态保存到系统存储器而不是专用的硬件结构,和推测性地在先行模式中执行随后的指令以预取将来负载。
21.一种执行程序指令的装置,包括: 被配置为发出用于在正常执行模式期间执行的指令的执行机构;和 被配置为检测未解决的数据依赖性的检测机构; 其中,如果由股线在指令的执行期间检测到未解决的数据依赖性,那么执行机构被配置为, 产生能够随后被用于使程序的执行返回到该指令的点的校验点,其中,产生校验点包含将股线的结构状态保存到系统存储器而不是专用的硬件结构,和推测性地在先行模式中执行随后的指令以预取将来负载。
22.一种用于在处理器上执行程序指令的方法,包括: 发出用于在正常执行模式期间执行的指令;和 当股线在指令的执行期间遇到未解决的数据依赖性时, 产生能够随后被用于使程序的执行返回到该指令的点的校验点,和推测性地在先行模式中执行随后的指令以预取将来负载,其中,对股线能够在先行模式期间使用的寄存器窗口的数量施加限制,其中,当达到该限制并且股线需要新的寄存器窗口时,对于该股线停止先行模式。
23.一种执行程序指令的装置,包括: 被配置为发出用于在正常执行模式期间执行的指令的执行机构;和 被配置为检测未解决的数据依赖性的检测机构; 其中,如果由股线在指令的执行期间检测到未解决的数据依赖性,那么执行机构被配置为, 产生能够随后被用于使程序的执行返回到该指令的点的校验点,和推测性地在先行模式中执行随后的指令以预取将来负载,其中,对股线能够在先行模式期间使用的寄存器窗口的数量施加限制,其中,当达到该限制并且股线需要新的寄存器窗口时,对于该股线停止先行模式。
【文档编号】G06F9/38GK103907090SQ201280052886
【公开日】2014年7月2日 申请日期:2012年10月11日 优先权日:2011年11月10日
【发明者】Y·C·周, E·W·玛胡瑞恩 申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1