具有重放机制的加载存储单元的制作方法

文档序号:6486204阅读:124来源:国知局
专利名称:具有重放机制的加载存储单元的制作方法
技术领域
本发明涉及微处理器领域,尤其涉及在微处理器内进行数据推测(data speculation)。
背景技术
超标量微处理器通过同时执行多指令及通过使用符合本身设计的最短的可能时钟周期而达到高性能。然而,指令间的数据及控制流相关性(data and control flow dependencies)可能限制有多少指令可以在特定的时间发出。结果,某些微处理器支持推测执行以达到额外的性能增益。
其中一种类型的推测为控制流推测。控制流推测预测程序控制将要进行的方向。例如,可以使用分支预测以预测是否将采用分支。可用的分支预测有很多类型,从每次都单纯地做出相同预测的方法至在程序中维持先前分支的复杂历史(histories)以作出基于历史的预测的方法。分支预测可以通过硬件最优化、编译器最优化或两者都使用而变得容易。基于分支预测机制所提供的预测,可以推测地取回及执行指令。当最终评估了分支指令时,可以检验该分支预测。若该预测是不正确的,就可撤消基于该不正确预测而推测执行的任何指令。
另一种类型的推测为数据推测,该数据推测预测数据值。所提出的数据推测类型包括推测地产生用于内存操作的地址及推测地产生用于计算操作中的数据值。与控制推测一样,最终评估用以推测地产生值的根本条件,以便检验或取消该推测。
由于推测允许执行进行下去而不需要等待相关性检验完成,若从正确推测所获得的性能超过由不正确推测所失去的性能,就可获得显著的性能增益。因此,期望降低因为不正确推测而导致的性能损失。

发明内容
本发明公开了用于重放(replaying)在数据推测微处理器的加载存储单元(load store unit)内的操作的方法及系统的各种实施例。在某些实施例中,微处理器可包括配置成发出操作的调度器(scheduler)及配置成执行由调度器所发出的内存操作的加载存储单元。加载存储单元配置成存储信息,该信息识别发送至加载存储单元的内存操作。响应检测到对于其中一个已发出的内存操作的不正确数据推测,加载存储单元配置成提供重放指示至调度器,指示着应该重新发出(reissue)加载存储单元内的至少一个已发出的内存操作。调度器配置成响应性地重新发出由加载存储单元所识别的内存操作。
在一个实施例中,加载存储单元可配置成重放地址匹配该不正确推测内存操作的地址的每个内存操作。加载存储单元还可以(或选择地)配置成重放地址匹配该不正确推测内存操作的推测地址的每个内存操作。在一个实施例中,加载存储单元可仅重放地址匹配该不正确推测内存操作的地址的加载操作(load operations)。在某些实施例中,加载存储单元可追踪哪些加载操作已从存储操作转发(forwarded)数据,并且若存储操作的地址被不正确地推测,则加载存储单元可重放从该存储操作转发数据的任何较新加载操作。加载存储单元还可配置成重放对于在某些情况下检测到不正确数据推测的内存操作。
在某些实施例中,通过比较内存操作的地址的推测值与该内存操作的地址的新值和/或通过比较该内存操作的推测结果与该内存操作的非推测结果,加载存储单元可配置成检测不正确的数据推测。
方法的各种实施例可包括发出操作至加载存储单元用于执行;加载存储单元接收对该操作所进行的数据推测是不正确的指示;响应该指示,加载存储单元产生重放指示,识别加载存储单元内待决的(outstanding)至少一个操作;以及调度器响应性地重新发出由该重放指示所识别的操作。


当结合以下附图来考虑以下详细说明时,可更好地理解本发明,在附图中图1显示依据一个实施例的微处理器。
图2显示依据一个实施例的加载存储单元的方块图。
图3A为依据一个实施例重放加载存储单元内的操作的方法流程图。
图3B为依据另一个实施例重放加载存储单元内的操作的方法流程图。
图3C为依据又一个实施例重放加载存储单元内的操作的方法流程图。
图4显示依据一个实施例的例示计算机系统。
图5显示依据另一个实施例的另一个例示计算机系统。
虽然本发明易于有各种修正及替代形式,但是在附图中作为例子而显示并在此详细描述了本发明的特定实施例。然而,应了解,附图及详细描述并非意在限定本发明于所公开的特定形式,相反,意在涵括落在由所附权利要求所定义的本发明精神及范围之内的所有修正、等效及替代。注意,标题仅是用于组织的目的而并非意在用于限定或解释本说明或权利要求。再者,注意,词汇“可(may)”是以许可的意义使用于整个本申请中(即,具有潜在可能的、能够的),而并非强制的意义(即,必须)。词语“包括(include)”及其衍生语意指“包括,但并非限定于此”。词语“连接(connected)”意指“直接或非直接地连接”,且词语“连结(coupled)”意指“直接或非直接地连结”。
具体实施例方式
图1为微处理器100的一个实施例的方块图。微处理器100配置成执行存储于系统内存200内的指令。很多这些指令对存储于系统内存200内的数据操作。注意,系统内存200在物理上可分布于整个计算机系统并且可由一个或一个以上的微处理器100来访问。
微处理器100可包括指令高速缓存(instruction cache)106及数据高速缓存128。微处理器100可包括连结至指令高速缓存106的预取单元(prefetch unit)108。分派单元104可配置成接收来自指令高速缓存106的指令并且分派操作至调度器118。可连结一个或一个以上的调度器118以接收来自分派单元104的分派操作及发出操作至一个或一个以上的执行核心(execution cores)124。执行核心124可每个都包括配置成对数据高速缓存128进行访问的加载/存储单元。由执行核心124所产生的结果可输出至结果总线130。这些结果可用作后续发出指令的操作数的值(operand values)及/或存储至寄存器文件116。撤退队列(retire queue)102可连结至调度器118及分派单元104。撤退队列102可配置成确定每个发出的操作何时可撤退。在一个实施例中,可设计微处理器100以与x86体系结构兼容。注意,微处理器100还可包括许多其它组件。例如,微处理器100可包括分支预测单元(未图示)。
指令高速缓存106可在分派单元104接收指令之前暂时地存储指令。可经由预取单元108从系统内存200预取代码而提供指令码给指令高速缓存106。指令高速缓存106可用各种配置实现(例如,组相联(set-associative)、全相联(fully-associative)或直接映像(direct-mapped))。在某些实施例中,可有多级(multiple levels)的指令和/或数据高速缓存106及128。某些级可与微处理器100集成,如同所示,而其它级的高速缓存可在微处理器外部。
预取单元108可从系统内存200预取指令码以存储在指令高速缓存106内。在一个实施例中,预取单元108可配置成从系统内存200突发(burst)代码至指令高速缓存106中。预取单元108可采用各种特定的代码预取技术及算法。
分派单元104可输出信号,包括可由执行核心124执行的位编码操作以及操作数地址信息、直接数据、和/或位移数据。在某些实施例中,分派单元104可包括用于将某些指令译码成可在执行核心124内执行的操作的译码电路(未图示)。简单的指令可对应于单一操作。在某些实施例中,较复杂的指令可对应于多操作。若操作涉及寄存器的更新,则可保留寄存器文件116内的寄存器位置(例如,当译码该操作时),以存储推测的寄存器状态(在另一个实施例中,可使用重新排序缓冲器(reorder buffer)以给每个寄存器存储一个或一个以上的推测的寄存器状态)。寄存器映像(register map)可将源操作数及目的操作数的逻辑寄存器名称翻译成物理寄存器名称,以使寄存器重新命名变得容易。寄存器映像可追踪寄存器文件116内的哪一个寄存器目前正在被分配。
图1的微处理器100支持无序执行(out of order execution)。撤退队列102可追踪用于寄存器读取及写入操作的初始程序序列,允许推测指令执行及分支预测错误恢复,以及有助于准确的排除。撤退队列102可用先入先出的配置实现,其中当操作被证实时操作移至缓冲器的“底部”,而给在队列“顶部(top)”的新登录(entries)腾出空间。响应操作完成执行以及对任何操作所进行的任何数据推测或控制推测被检验,所述任何操作一直到并包括在程序顺序中的那个操作,撤退队列102可撤退操作。当在物理寄存器中产生了值的操作撤退时,撤退队列102可将该物理寄存器的推测状态交给微处理器100的体系结构状态。在某些实施例中,撤退队列102可实现为重新排序缓冲器的一部分。这样的重新排序缓冲器也可给推测的寄存器状态提供数据值存储,以支持寄存器重新命名。注意,在其它实施例中,撤退队列102不可提供任何数据值存储。相反地,当操作撤退时,撤退队列102可将寄存器文件116中不再需要存储推测寄存器状态的寄存器解除分配(deallocate),并将哪一个寄存器目前是空闲的信号提供给寄存器映像。通过维持在寄存器文件116内(或在其它实施例中,在重新排序缓冲器内)的推测寄存器状态直到产生那些状态的操作受到了证实,若分支预测不正确,则可在寄存器文件116中使沿着错误预测路径的推测执行操作的结果无效。
若特定操作的所需操作数为寄存器位置,则寄存器地址信息可路由至寄存器映像(或重新排序缓冲器)。例如,在x86体系结构中,有八个32位逻辑寄存器(例如,EAX、EBX、ECX、EDX、EBP、ESI、EDI及ESP)。物理寄存器文件116(或重新排序缓冲器)包括对于改变这些逻辑寄存器内容的结果的存储,而允许无序执行。可分配寄存器文件116中的物理寄存器以存储每个操作的结果,确定该每个操作修正了其中一个逻辑寄存器的内容。因此,在特定程序执行期间的不同时刻,寄存器文件116(或者,在其它实施例中,重新排序缓冲器)可具有包括给定逻辑寄存器的推测执行内容的一个或一个以上的寄存器。
寄存器映像可将物理寄存器指派给特定逻辑寄存器,该特定逻辑寄存器被指定为操作的目的操作数。分派单元104可确定,寄存器文件116具有指派给逻辑寄存器的一个或一个以上的先前分配的物理寄存器,该逻辑寄存器被指定为给定操作中的源操作数。寄存器映像可给最近指派给该逻辑寄存器的物理寄存器提供标记(tag)。此标记可用于访问寄存器文件116中的操作数的数据值或通过在结果总线130上转发的结果而接收该数据值。若该操作数对应于内存位置,则该操作数的值可经由加载/存储单元222而提供在结果总线上(用于结果转发和/或存储于寄存器文件118中)。当该操作由其中一个调度器118发出时,操作数数据值可提供给执行核心124。注意,在另外的实施例中,当分派指令时,操作数的值可提供给对应的调度器118(而非当该操作发出时提供给对应的执行核心124)。
在分派单元104的输出处所提供的位编码操作及直接数据可路由至一个或一个以上的调度器118。注意,在此所使用的调度器是检测何时操作已准备执行并发出准备好的操作给一个或一个以上的功能单元的器件。例如,保留站(reservation station)是调度器。调度器或调度器组中的操作也可称为指令中的操作或操作窗口(operation window)或调度窗口(scheduling window)。每个调度器118能给数个等待发出至执行核心124的待决操作保留操作信息(例如,位编码执行位以及操作数的值、操作数标记和/或直接数据)。在某些实施例中,每个调度器118不可提供操作数的值存储。相反地,每个调度器可监控发出的操作及在寄存器文件116中可取得的结果,以确定何时操作数的值可由功能单元126读取(从寄存器文件116或结果总线130)。在某些实施例中,每个调度器118可与专用的功能单元126结合。在其它实施例中,单个调度器118可将操作发出给超过一个的功能单元126。
可提供调度器118来暂时存储将由执行核心124所执行的操作信息。如前所述,每个调度器118可给待决的操作存储操作信息。此外,每个调度器可给已经执行但是可能仍要重新发出的操作存储操作信息。操作发出至执行核心124,以响应可及时获得用于执行的任何所需操作数的值而执行。因此,操作执行的顺序可不同于原始的程序指令序列的顺序。涉及数据推测的操作可保留在调度器118中直到它们变成非推测的为止,以便若该数据推测是不正确时可以重新发出它们。如图1所示,加载存储单元126C可提供重放指示至调度器118,该重放指示识别一个或一个以上的要重新发出的操作(例如,这样的重放指示可包括每个要重放的操作的标记)。调度器118可响应性地重新发出由这样的重放指示所识别的操作。
在一个实施例中,每个执行核心124都可包括数个功能单元126(例如,功能单元126A-126C,如图1所示)。某些功能单元,例如126A,可配置成执行加法及减法的整数算术操作,以及移位、旋转、逻辑操作及分支操作。其它的功能单元,例如126B,可配置成容纳浮点操作。一个或一个以上的功能单元可配置成为要由功能单元所进行的加载及存储内存操作而进行地址产生,例如126C,其进行加载及存储操作以访问存储在数据高速缓存128和/或系统内存内的数据。在一个实施例中,此类的功能单元126C对于数据及地址信息可以配置具有数个存储位置的加载存储缓冲器而用于等待决定加载及/或存储。
一个或一个以上的功能单元126还可提供有关条件分支指令的执行信息给分支预测单元,以便若分支被错误预测,则该分支预测单元可清除(flush)已进入指令处理流水线的在该错误预测分支之后的指令并且重新定向(redirect)预取单元108。重新定向的预取单元108于是可开始从指令高速缓存106或系统内存200提取正确的指令集。在这种情况下,可舍弃原始程序序列中在该错误预测分支指令之后所产生的指令结果,包含推测地执行及暂时地存储于寄存器文件116中的那些结果。
若寄存器值正在更新,则由执行核心124内功能单元126所产生的结果可在结果总线130上输出至寄存器文件116。若内存位置的内容正在更改,则在执行核心124内产生的结果可提供给加载/存储单元126C。
数据高速缓存128为高速缓存内存,提供成暂时存储正在执行核心124及系统内存200之间传送的数据。类似于上文所描述的指令高速缓存106,数据高速缓存128可用多种特定的内存配置实现,包括组相联配置。此外,数据高速缓存106及指令高速缓存128在某些实施例中可用统一的高速缓存实现。
在某些实施例中,微处理器100可包括集成的内存控制器160,而允许微处理器直接与系统内存200接口。在其它实施例中,内存控制器160可包括在间接地将微处理器100连结至系统内存200的总线桥(bus bridge)中。
数据推测如在此所描述的,若具有发现数据值不正确并且必然重新计算的可能性,则数据值是推测的。推测的数据值为无法明确识别是正确或不正确的值。若数据值是已进行某些数据推测的操作结果或者若该数据值依赖于另一个推测的数据值(例如,若该数据值作为具有一个或一个以上的推测操作数的操作结果而产生),则该数据值可重新计算。非推测值是不依赖于任何数据推测的值(然而,这样的值仍然受到控制推测的支配)。
微处理器100内的各种机制可进行数据推测。例如,分派单元104、内存控制器160和/或一个或者一个以上的功能单元126每一个都可进行用于特定操作的数据推测。分派单元104可检测到一个操作的结果可用作另一个操作的推测操作数。例如,分派单元可预测加载操作将访问通过先前存储操作而存储到数据高速缓存128的数据。分派单元104可响应性地将存储在寄存器中的数据值识别为该加载操作的推测结果,该存储在寄存器中的数据值用作该存储操作的来源。这种类型的数据推测在此称为相关性预测(dependency prediction)。相关性预测可通过链接该存储操作的来源作为操作的推测操作数来源而在分派单元104中扩充(extended),该操作指定该加载操作的结果作为操作数。另一种类型的相关性预测可通过允许加载绕开具有未计算地址的存储而在加载存储单元126C中进行,即,通过预测较新的加载不依赖于较早的存储。
在多处理器系统中,内存控制器160可进行一致性检查(coherencycheck)以维持高速缓存的一致性。在其它微处理器的高速缓存的一致性检查完成之前,内存控制器160可从系统内存200推测地返回高速缓存线路(cache line)的复制。若一致性检查随后确定要取回的该高速缓存线路的正确复制目前存储于另一个处理器的高速缓存内,则可使从系统内存200推测地取回的该高速缓存线路的复制无效。因此,将对从访问该高速缓存线路所产生的任何加载操作结果进行推测,直到该一致性检查完成为止。这种类型的推测在此称为内存预测。
分派单元104可通过预测操作的结果进行数据推测。例如,某些操作可倾向产生相同的结果,因此每次处理那些操作中的一个操作时,在由功能单元126实际执行该操作之前,可由分派单元104推测地产生结果。这种类型的数据推测在此称为数据预测。注意,数据预测也可在微处理器的其它部分中进行(例如,在加载存储单元126C中)。
加载存储单元126C可推测地产生地址以及基于所推测的地址而产生加载指令的结果,该加载指令的地址尚未基于较早处理的加载的模式而计算。例如,若先前N次加载操作具有以固定偏移C彼此间隔的目标地址A1-AN(例如,A1,A2=A1+C,…,AN=A(N-1)+C),则加载存储单元126C可在最近访问地址AN加上固定偏移C处推测地返回数据作为该加载操作的结果。这种类型的数据推测在此称为地址预测。注意,地址预测的其它形式可用于很多实施例中。
可进行多种不同类型的数据推测以产生某些推测的结果。例如,可用数据预测产生整数操作的推测结果。该推测结果接着可通过存储操作而存储。加载操作经由相关性推测可预测为依赖于这个存储,因此该加载操作的推测结果为该整数操作的推测结果。
依赖于已进行数据推测的操作的结果的操作也可产生推测结果。例如,若地址预测用来产生加载操作的推测结果,则任何使用该加载的推测结果作为操作数而执行的相关性操作都可产生推测结果,该推测结果可依次由其它相关性操作用作操作数。因此,若确定了在该加载操作中的根本推测为不正确的,则相关性操作的结果也可能不正确,因此依赖于该加载操作的整个相关性链可能需要重新执行,以产生正确的结果。另一方面,若发现根本推测为正确的,则相关性操作的结果可是正确的(假设那些结果并不基于任何其它推测值)。
已进行数据推测的很多操作可当那些操作由功能单元执行时检验。例如,用于推测地产生操作结果的数据预测可由执行该操作的功能单元126检验,该功能单元126通过比较该操作的实际结果与推测结果而执行该操作。若该数据推测是不正确的,可不需要重新执行这样的操作,因为正确结果已经取得。其它操作可受到检验而不需要完全地执行。例如,若具有未计算地址的加载从较早的存储转发其结果(例如,由于相关性或地址预测),则该加载的推测结果可当计算该加载地址时检验。若该数据推测是不正确的,则可能需要重新执行这样的操作(至少部分地),以产生正确的结果。
由于已进行数据推测的操作以及它们的相关性操作可能需要重新执行,所以撤退队列102可配置成仅撤退已经决定了(resolved)任何根本的数据推测的操作。
具有重放机制的加载存储单元在支持数据推测执行的微处理器中,由于不正确的数据推测,可能需要重新执行一个或一个以上的操作。微处理器100可包括各种重放机制,以允许重新执行操作。例如,调度器118可配置成响应操作的其中一个数据推测操作数是不正确的指示而重新发出该操作给功能单元126C。同样地,加载存储单元126C也可包括重放机制,该重放机制响应操作的数据推测被不正确地决定而检测该加载存储单元内哪些待决操作需要重放。加载存储单元126C可发信号给调度器关于哪些待决的操作应该重放,使得调度器稍后重新发出那些操作给加载存储单元126C。
图2示意了加载存储单元126C的一个实施例,加载存储单元126C配置成由于加载存储单元126C检测到不正确的数据推测而重放操作。数据推测检验逻辑305可配置成检验由加载存储单元126C所进行的每个类型的数据推测。例如,若加载存储单元进行地址预测(例如,通过预测加载操作的地址)及相关性预测(例如,通过允许加载绕过具有未计算地址的较早存储)两者,则加载存储单元可配置成检验地址及相关性预测两者。数据推测检验逻辑305也可(或选择地)配置成检验由微处理器100的其它部分所进行的数据推测。例如,若分派单元104配置成进行相关性预测(例如,通过推测地链接加载结果至较早存储的来源),则数据推测检验逻辑305可配置成检验该相关性预测。
加载存储单元126C还包括操作存储器307,操作存储器307用于已经发出至加载存储单元(例如,通过调度器118)但是尚未完成执行的操作。发出至加载存储单元的已进行数据推测的操作不可撤退直到该操作已由数据推测检验逻辑305检验。操作存储器307可追踪加载存储单元126C内的所有待决操作。操作存储器307可包括用于每个待决的加载及存储的登录310。
登录310还可包括信息313,信息313指示登录是分配给加载还是存储(或者在某些实施例中,若登录对应于操作从内存地址所加载的值并且存储该结果于内存地址的操作,则该登录可指示其包括加载及存储两者)。此外,登录310可包括标记315(例如,在微处理器100内识别该操作及其结果)、地址317、和/或数据319。在某些实施例中,每个登录的数据字段319可包括用于推测数据及非推测数据两者的存储。同样地,在某些实施例中,地址字段317可包括用于操作地址的超过一个值的存储(例如,由地址预测所产生的推测地址及通过执行操作所产生的新地址值)。在某些实施例中,登录可包括额外的字段以识别操作和/或操作数为数据推测的。登录310可响应调度器118发出操作给加载存储单元126C而分配并且响应加载存储单元126C完成该操作的执行而解除分配。
数据推测检验逻辑305可通过比较操作的推测结果与该操作的实际结果而检验某些类型的数据推测(例如,数据预测和/或某些类型的相关性预测)。例如,加载操作的推测结果可存储于操作存储器307内该加载的登录310中。当从数据高速缓存128接收到该加载操作的实际结果时,数据推测检验逻辑可比较该实际结果与存储在操作存储器307中的推测结果。数据推测检验逻辑305可通过比较操作的地址与一个或一个以上的较早操作的地址,而检验其它类型的数据推测(例如,某些类型的相关性预测)。数据推测检验逻辑305可通过响应正在结果总线130上广播的新值比较操作的推测地址与该地址的新值,而检验其它类型的数据推测(例如,地址预测)。若该推测地址并不匹配该地址的新值,则数据推测检验逻辑305可确定对该地址进行的数据推测是不正确的。
响应检测到用于特定操作的数据推测是不正确的,数据推测检验逻辑305可导致一个或一个以上的操作重放。操作可通过提供识别该操作的重放信号至调度器118而重放。响应这样的信号,调度器118可标记该操作用于重放(例如,通过修正与该操作相关的状态信息以指示该操作应该重放)。在一个实施例中,数据推测检验逻辑305可通过提供操作的标记连同指示该操作应该重放的标志(flag)至调度器118,而导致该操作重放。
若不正确推测的操作需要重新执行(例如,由于不正确的相关性预测或不正确的地址预测),则数据推测检验逻辑305可导致该操作重放。若该不正确推测结果的正确结果已经获得(例如,若该不正确的结果是由于不正确的数据或相关性预测),则数据推测检验单元可导致加载存储单元126C广播该不正确推测的操作的正确结果给微处理器的其它组件,以使在微处理器的其它部分内的任何相关性操作可用该正确值而重新执行。数据推测检验逻辑305在某些实施例中不可导致这样的操作重放。注意,加载存储单元126C可完成待决操作的执行,即使加载存储126C也导致该操作重放。
除了重放不正确推测的操作,若有需求,数据推测检验逻辑305也可导致目前在加载存储单元待决的其它操作重放。例如,某些加载操作可基于存储操作的推测地址而从该存储操作转发数据。若确定该存储操作的推测地址为不正确的(例如,若产生该存储操作地址的操作的执行产生了并不等于推测地址的新地址值),则基于该存储推测地址而转发数据的任何加载操作可重放。同样地,也可重放地址匹配该存储操作的新地址的任何加载操作,以便那些操作现在可从该存储转发数据。同样地,数据推测检验逻辑305可配置成检测存储操作的操作数何时在结果总线上重新广播,并响应性地导致转发该存储操作操作数的先前值的任何相关加载操作重放。
在一个实施例中,数据推测检验逻辑305可通过导致加载存储单元内所有比不正确推测操作新的待决操作重放而重放相关的操作。在某些实施例中,比较器逻辑303可识别操作存储器307内用于重放的。较新操作。比较器逻辑303可包括用于比较值和/或检测匹配值的任何各种工具(means)(例如,比较器、内容可寻址内存等等)。
在其它实施例中,数据推测检验逻辑305可使用比较器逻辑303,以响应检测到特定操作的不正确数据推测而选择地重放某些较新的操作。例如,在一个实施例中,响应检测到存储操作地址的不正确数据推测,比较器逻辑303可比较该存储地址的推测值及新值与操作存储器307内每个较新操作的地址。若任何该较新操作的地址匹配任一个该存储的地址,则可通过给调度器提供需要重放那些操作的指示而导致重新执行匹配的较新操作。
在某些实施例中,加载存储单元126C可通过比较待决加载的地址与较早存储的地址而实现存储至加载转发(store-to-load-forwarding)。若加载的地址匹配较早存储的地址,则加载存储单元126C可输出由该较早存储操作所存储的数据作为该加载操作的结果。每一次加载操作从存储操作转发数据,加载存储单元126C可将识别该存储操作的存储标记存储在与转发的加载操作相关的转发追踪缓冲器309登录内。在这些实施例的一些中,响应数据推测检验逻辑305检测到操作的不正确数据推测,比较器逻辑303可使用由转发追踪缓冲器309所提供的信息来识别用于重新执行的操作。例如,若确定存储操作的地址预测为不正确的,则比较器逻辑303可配置成比较该存储操作的地址的新值与操作存储器307内的每个较新加载操作的地址。任何匹配的操作应该已经从该不正确推测的存储转发了数据,但是并非由于该不正确推测的存储地址。因此,加载存储单元126C可导致这些的匹配操作重新执行。此外,该不正确推测的存储操作的标记可与存储在转发追踪缓冲器309内用于较新加载的标记做比较。若该不正确推测的存储操作的标记匹配存储用于较新加载的标记,指示着该较新加载基于该存储的不正确推测地址而不正确地转发数据,则加载存储单元126C可导致该较新加载重新执行。
图3A示意了响应不正确数据推测的检测而重放加载存储单元内待决操作的方法的一个实施例。在步骤501,检测到操作的数据推测是不正确的指示。例如,加载存储单元可从地址产生单元(该地址产生单元在某些实施例中可是加载存储单元的一部分)接收操作地址的新值。该新的地址值可不同于由该加载存储单元用来产生该操作或另一个操作的推测结果的推测地址值,指示着对该地址所进行的数据推测是不正确的。在另一个例子中,加载存储单元可通过比较加载的推测结果(例如,通过预测该加载结果将等于较早存储的来源而产生)与通过访问数据高速缓存所获得的加载的实际结果,而检测不正确的相关性预测。
在图3A的实施例中,加载存储单元可响应检测到操作的数据推测是不正确的,而导致加载存储单元内的所有较新的待决操作重新执行,如步骤503所示。加载存储单元可通过提供要重放的每个操作的标记给调度器,而导致重新执行较新的操作。响应由加载存储单元所提供的标记,调度器可更新调度器内的操作状态(例如,从“发出”至“未发出”或“需要重新发出”)。这样的重放机制允许较新的操作重放而不会从微处理器的处理流水线清除及从指令高速缓存106重新提取。
图3B示意了重新执行加载存储单元内待决操作的方法的另一个实施例。在步骤505,检测到存储地址的数据推测是不正确的指示。若任何较新的待决加载或存储具有地址匹配该不正确推测存储的地址的推测值或新值,如同在步骤507所判断,则可重新执行匹配的操作。若该较新操作的地址没有一个匹配该存储操作的地址的推测值或新值,则不可重放该较新操作,如步骤509所示。
图3C示意了重新执行加载存储单元内待决操作的又一个实施例。在步骤515,检测到存储操作地址的数据推测是不正确的指示。若任何较新加载的地址匹配该存储操作的地址的新值,则可重放该匹配的较新加载。若任何较新的加载从该不正确推测的存储转发了数据(例如,通过比较该较新加载从其转发数据的存储操作的标记与该不正确推测存储的标记而确定),如同在步骤521所判断,则可重放该匹配的较新加载。
注意,其它实施例可不同于图3A-3C的实施例而操作。例如,在类似于图3B的实施例中,只有地址匹配不正确推测存储地址的推测值或新值的较新加载操作可重新执行。同样地,在类似于图3C的实施例中,可重新执行地址匹配该不正确推测存储地址的新值的较新加载及存储。很多其它的变化是可能的。
例示性的计算机系统图4显示计算机系统900的一个实施例的方块图,计算机系统900包括经由总线桥902而连结至各种系统组件的处理器100。处理器100可包括如上所述的加载存储单元的实施例。计算机系统的其它实施例是可能的并可预期的。在所描述的系统中,主内存200经由内存总线906连结至总线桥902,而图形控制器908经由AGP总线910连结至总线桥902。数个PCI器件912A-912B经由PCI总线914连结至总线桥902。还可提供第二总线桥916以经由EISA/ISA总线920容纳至一个或一个以上的EISA或ISA器件918的电接口。在这个例子中,处理器100经由CPU总线924连结至总线桥902并且连结至可选的L2高速缓存928。在某些实施例中,处理器100可包括集成的L1高速缓存(未图示)。
总线桥902在处理器100、主内存200、图形控制器908及附加至PCI总线914的器件之间提供接口。当从连接至总线桥902的其中一个器件接收操作时,总线桥902识别该操作的目标(例如,特定的器件,或在PCI总线914的情形中,该目标在PCI总线914上)。总线桥902路由该操作给目标器件。总线桥902通常将操作从源器件或总线所使用的协议翻译为目标器件或总线所使用的协议。
除了为PCI总线914提供接口给ISA/EISA总线,第二总线桥916可并入额外的功能性。输入/输出控制器(未图示),不管是在第二总线桥916外部或集成于第二总线桥916,也可包括在计算机系统900内,以提供对于键盘及鼠标922以及对于各种串行口及并行口的操作支持。外部高速缓存单元(未图示)在其它实施例中也可连结至在处理器100及总线桥902之间的CPU总线924。或者,该外部高速缓存可连结至总线桥902并且用于该外部高速缓存的高速缓存控制逻辑可集成到总线桥902内。图示的L2高速缓存928配置在处理器100的背部。注意,L2高速缓存928可从处理器100分离,集成到处理器100的盒带(cartridge)(例如,插槽1或插槽A)内,或甚至集成到处理器100的半导体衬底上。
主内存200是应用程序存储于其中并且主要由处理器100执行的内存。适当的主内存200可包括DRAM(Dynamic Random AccessMemory,动态随机存取内存)。例如,多组SDRAM(synchronous DRAM,同步DRAM)或内存总线式DRAM(Rambus DRAM,RDRAM)可能是适合的。
PCI器件912A-912B示意各种外围器件,诸如网络接口卡、视频加速器、音频卡、硬盘或软盘驱动器或驱动器控制器、SCSI(小型计算机系统接口)转接器及电话卡。同样地,ISA器件918示意各种类型的外围器件,诸如调制解调器、声卡、以及诸如GPIB或字段总线接口卡的各种数据采集卡。
提供图形控制器908以控制在显示器926上呈现文本及图像。图形控制器908可实施本领域中普遍知晓的典型图形加速器以呈现能有效地移至主内存200内或从主内存200移出的三维数据结构。图形控制器908因此可以是AGP总线910的主控者,因为它可请求及接收访问在总线桥902内的目标接口,而由此获得访问主内存200。专用的图形总线容纳来自主内存200的数据的快速取回。对于某些操作,图形控制器908可进一步配置成在AGP总线910上产生PCI协议事务。总线桥902的AGP接口可因此包括功能性,以支持AGP协议事务以及PCI协议目标与起始者(initiator)事务。显示器926是可呈现图像或文本的任何电子显示器。适当的显示器926包括阴极射线管(cathode raytube,“CRT”)、液晶显示器(liquid crystal display,“LCD”)等等。
注意,虽然在以上描述中将AGP、PCI、以及ISA或EISA总线作为例子,但是可按所希望的那样以任何总线体系结构来替代。进一步注意,计算机系统900可以是包括额外的处理器(例如,处理器100a显示为计算机系统900的可选组件)的多处理计算机系统。处理器100a可类似于处理器100。尤其,处理器100a可以是处理器100的相同复制品。处理器100a可经由独立总线连接至总线桥902(如图4所示)或者可与处理器100分享CPU总线924。再者,处理器100a可连结至类似于L2高速缓存928的可选L2高速缓存928a。
现在参照图5,显示了计算机系统900的另一个实施例,计算机系统900可包括具有如上所述的加载存储单元实施例的处理器100。其它实施例是可能的并且可期望的。在图5的实施例中,计算机系统900包括数个处理节点1012A、1012B、1012C及1012D。每个处理节点经由包括在各个处理节点1012A-1012D内的内存控制器1016A-1016D而连结至各个内存200A-200D。此外,处理节点1012A-1012D包括用以在处理节点1012A-1012D之间通信的接口逻辑(interface logic)。例如,处理节点1012A包括用于与处理节点1012B通信的接口逻辑1018A、用于与处理节点1012C通信的接口逻辑1018B、以及用于与另一个处理节点(未图示)通信的第三接口逻辑1018C。同样地,处理节点1012B包括接口逻辑1018D、1018E及1018F;处理节点1012C包括接口逻辑1018G、1018H及1018I;处理节点1012D包括接口逻辑1018J、1018K及1018L。连结处理节点1012D,以经由接口逻辑1018L与多个输入/输出器件(例如,菊花链配置中的器件1020A-1020B)通信。其它处理节点可用类似的方式与其它I/O器件通信。
处理节点1012A-1012D实施用于内部处理节点通信的数据包型链接(packet-based link)。在本实施例中,链接实施为单向线路组(例如,线路1024A用于从处理节点1012A传送数据包至处理节点1012B,而线路1024B用于从处理节点1012B传送数据包至处理节点1012A)。其它线路组1024C-1024H如图5所示用于在其它处理节点之间传送数据包。通常,每组线路1024可包括一个或一个以上的数据线路、对应于该数据线路的一个或一个以上的时钟线路、以及指示被传输数据包类型的一个或一个以上的控制线路。该链接可用高速缓存一致性方式操作用于在处理节点之间通信,或用非一致性方式操作用于在处理节点及I/O器件(或总线桥至传统构建的I/O总线,诸如PCI总线或ISA总线)之间通信。此外,该链接可使用在如图所示的I/O器件之间的菊花链结构而以非一致性方式操作。注意,要从一个处理节点传送至另一个处理节点的数据包可经过一个或一个以上的中间节点。例如,如图5所示,由处理节点1012A传送至处理节点1012D的数据包可经过处理节点1012B或处理节点1012C。可使用任何适当的路由算法。计算机系统900的其它实施例可包括比图5所示的实施例更多或更少的处理节点。
通常,数据包可在节点之间的线路1024上作为一个或一个以上的位时间而传送。位时间可以是在对应的时钟线路上的时钟信号的上升缘或下降缘(rising or falling edge)。数据包可包括用于启动事务的命令数据包、用于维持高速缓存一致性的探测数据包、以及响应探测及命令的响应数据包。
除了内存控制器及接口逻辑之外,处理节点1012A-1012D可包括一个或一个以上的处理器。广义地说,处理节点包括至少一个处理器并且可按所希望的那样可选地包括用于与内存及其它逻辑通信的内存控制器。特别,每个处理节点1012A-1012D可包括处理器100的一个或一个以上的复制。外部接口单元可包括节点内的接口逻辑1018、以及内存控制器1016。
内存200A-200D可包括任何适当的内存器件。例如,内存200A-200D可包括一个或一个以上的内存总线式DRAMs(RDRAMs)、同步DRAMs(SDRAMs)、静态RAM等等。计算机系统900的地址空间在内存200A-200D之间分配。每个处理节点1012A-1012D可包括内存映像,用以确定哪些地址映像至哪些内存200A-200D,并因此对于特定地址的内存请求应路由至哪一个处理节点1012A-1012D。在一个实施例中,计算机系统900内的地址一致性处(coherency point)是连结至存储对应于该地址的字节的内存的内存控制器1016A-1016D。换句话说,内存控制器1016A-1016D负责确保对相应内存200A-200D的每个内存访问是以高速缓存一致性方式产生的。内存控制器1016A-1016D可包括用于接口至内存200A-200D的控制电路。此外,内存控制器1016A-1016D可包括用于排队内存请求的请求队列。
接口逻辑1018A-1018L可包括用于从链接接收数据包及用于在链接上缓冲待传送的数据包的各种缓冲器。计算机系统900可采用任何适当的流控制机制用于传送数据包。例如,在一个实施例中,每个接口逻辑1018存储该接口逻辑所连接的链接另一端接收器内每种类型缓冲器的数量计数。接口逻辑并不传送数据包,除非接收接口逻辑具有闲置的缓冲器以存储该数据包。当接收缓冲器通过向前路由数据包而闲置时,接收接口逻辑传送信息给发送接口逻辑,以指示该缓冲器已经是闲置的。这样的机制可称为“附加型(coupon-based)”系统。
I/O器件1020A-1020B可以是任何适当的I/O器件。例如,I/O器件1020A-1020B可包括用于与该器件可能连结的另一个计算机系统通信的器件(例如,网络接口卡或调制解调器)。此外,I/O器件1020A-1020B可包括视频加速器、音频卡、硬盘或软盘驱动器或驱动器控制器、SCSI(小型计算机系统接口)转接器与电话卡、声卡、及诸如GPIB或字段总线接口卡的各种数据采集卡。注意,名词“I/O器件”及名词“外围器件”在此是同义的。
如在此所使用,名词“时钟周期”是指各阶段的指令处理流水线完成它们任务的时间间隔。指令及计算的值依据定义时钟周期的时钟信号而由内存元件(诸如寄存器或阵列)取得。例如,内存元件可依据时钟信号的上升缘或下降缘而取得值。
以上讨论将信号描述为受到“断言(asserted)”。当信号传输指示一条特定信息的值时,可定义该信号为受到断言。当特定信号传输二进制的“1”值或者传输二进制的“0”值时,可定义该特定信号为受到断言。
一旦完全了解了以上公开,则各种变化及修正对于本领域技术人员而言将变得显而易见。本文意在使如下的权利要求解释为涵括所有这样的变化及修正。
产业适用性本发明一般可用于微处理器领域。
权利要求
1.一种微处理器(100),包括调度器(118),配置成发出操作;以及加载存储单元(126C),连结成接收由所述调度器(118)所发出的内存操作及配置成执行所述内存操作;其中所述加载存储单元(126C)配置成存储信息,而所述信息识别发出至所述加载存储单元(126C)的多个内存操作,其中响应检测到对于所述多个内存操作的其中一个操作的不正确数据推测,所述加载存储单元(126C)配置成提供重放指示给所述调度器(118),指示着应该重新发出所述加载存储单元(126C)内所述多个内存操作的至少其中一个操作;其中所述调度器(118)配置成响应来自加载存储单元(126)的所述指示而重新发出所述多个内存操作的至少其中一个操作。
2.如权利要求1所述的微处理器(100),其中所述加载存储单元(126C)配置成通过识别所述多个内存操作的每一个操作具有地址匹配所述多个内存操作的其中一个操作的地址而产生所述重放指示。
3.如权利要求1所述的微处理器(100),其中所述加载存储单元(126C)配置成通过识别所述多个内存操作的每一个操作具有地址匹配所述多个内存操作的其中一个操作的地址推测值或是匹配所述多个内存操作的其中一个操作的地址新值,而产生所述重放指示。
4.如权利要求1所述的微处理器(100),其中所述加载存储单元(126C)配置成通过识别所述多个内存操作的每一个操作为加载操作并且具有地址匹配所述多个内存操作的其中一个操作的地址,而产生所述重放指示。
5.如权利要求1所述的微处理器(100),其中所述加载存储单元(126C)配置成追踪包括在所述多个内存操作中的哪些加载操作已从存储操作转发数据;并且其中如果检测到存储操作的地址被不正确地推测,则所述加载存储单元(126C)配置成通过识别从所述存储操作转发数据的加载操作的任何较新操作,而产生所述重放指示。
6.一种计算机系统(900),包括内存(200);以及连结至所述内存(200)的处理器(100);其特征在于,所述处理器(100)包括调度器(118),配置成发出内存操作;以及加载存储单元(126C),连结成接收由所述调度器(118)发出的内存操作以及配置成执行所述内存操作;其中所述加载存储单元(126C)配置成存储信息,而所述信息识别发出至所述加载存储单元(126C)的多个内存操作,其中响应检测到对于所述多个内存操作的其中一个操作的不正确数据推测,所述加载存储单元(126C)配置成提供重放指示给调度器(118),指示着应该重新发出所述加载存储单元内(126C)内所述多个内存操作的至少其中一个操作;其中所述调度器(118)配置成响应来自加载存储单元(126C)的所述指示而重新发出所述多个内存操作的至少其中一个操作。
7.一种方法,包括调度器(118)发出操作至加载存储单元用于执行;所述加载存储单元(126C)检测到对所述操作进行的数据推测是不正确的;响应所述检测动作,所述加载存储单元(126C)产生重放指示,识别目前发出至所述加载存储单元(126C)的至少一个操作;响应所述产生动作,所述调度器(118)重新发出所述至少一个操作至所述加载存储单元(126C)。
8.如权利要求7的方法,其中所述产生动作包括所述加载存储单元(126C)产生一个或一个以上的重放指示,识别所述加载存储单元(126C)内比所述数据推测是不正确的操作新的所有待决操作。
9.如权利要求7的方法,其中所述产生动作包括所述加载存储单元(126C)产生一个或一个以上的重放指示,识别所述加载存储单元(126C)内具有地址匹配所述数据推测是不正确的操作的地址的任何待决操作。
10.如权利要求7的方法,其中所述产生动作包括所述加载存储单元(126C)产生一个或一个以上的重放指示,识别所述加载存储单元(126C)内具有地址匹配所述数据推测是不正确的操作的地址推测值的任何待决操作。
全文摘要
一种微处理器(100)可包括配置成发出操作的调度器(118)及配置成执行由该调度器(118)所发出的内存操作的加载存储单元(126C)。加载存储单元(126C)配置成存储信息,该信息识别发出至加载存储单元(126C)的内存操作。响应检测到对于所发出的其中一个内存操作的不正确数据推测,加载存储单元(126C)配置成通过提供指示给调度器(118)而重放至少一个所发出的内存操作。调度器(118)配置成响应性地重新发出由加载存储单元(126C)所识别的内存操作。
文档编号G06F9/38GK1806226SQ200480016226
公开日2006年7月19日 申请日期2004年6月2日 优先权日2003年6月10日
发明者M·A·菲利波, J·K·皮克特, B·T·桑德尔, R·S·戈帕尔 申请人:先进微装置公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1