专利名称:在长等待时间指令执行期间允许存储转发的技术的制作方法
技术领域:
本发明的实施例涉及微处理器和微处理器系统。更为具体地,本发明的实施例涉及能够存储要转发的数据,以便加载指令必须搜索队列以查找要转发的存储的的技术。
背景技术:
当执行加载和存储指令时,通常现有技术微处理器依赖于包含内容可编址存储器(CAM)逻辑的可查找队列,以增强存储器操作间的排序,并且在高等待时间指令从存储器存取数据时(“未决”)用于将与存储指令相对应的数据转发到加载指令。如果相应数据没有出现在相对较快的存储结构中、例如高速缓冲存储器,那么必须借助于具有相对较慢的存取时间的存储器结构如动态随机存取存储器(DRAM)的指令,可能产生高延迟指令。在特定存储结构中缺少所需数据通常称为“未命中”,而存储结构中存在所述数据通常称为“命中”。
图1说明现有技术处理器结构体系,包括用于执行指令的逻辑,所述指令独立于高等待时间指令(high-latency instruction)。图1的现有技术结构体系能够不断地执行指令而不用停止处理器,包括独立于长等待时间指令的指令,诸如从相对较慢的存储资源(例如DRAM)存取数据的加载。特别地,由指令解码器解码的指令以及由分配和寄存器换名单元分配的寄存器都作为微指令(uop)存储在微指令队列中,从微指令队列中调度这些微指令用于由功能单元执行并将这些微指令发送至寄存器文件。
图1的现有技术结构体系允许独立于未命中的指令通过强制长等待时间指令来使用寄存器文件和调度程序资源,并且那些指令依赖于长等待时间指令来缓和调度和寄存器文件资源,直到未命中能够能得到服务。这使得独立于未命中的指令执行和完成,而不被长等待时间指令或他们的从属指令阻塞。
在图1中,依赖于长等待时间指令的指令暂时存储在等待缓冲器中,而独立指令在长等待时间指令的未决期间得到服务。然而,为了确保正确的存储排序,必须在长等待时间指令的未决期间存储所有并行进行(“在处理”)中的存储指令,通常需要大的存储队列(例如,L1和L2存储队列)。这些存储队列能够随指令处理的增多而增大。
而且,为了查找这些存储队列,诸如CAM逻辑之类的额外逻辑是必需的。特别是,加载操作(查找具有数据的相应存储操作以满足加载操作)通常利用随队列大小而增长的CAM逻辑来查找相对较大的存储队列。
查找具有CAM逻辑的大存储队列能够潜在增加周期时间或增加存取存储队列所花费的周期数量。而且,在处理长等待时间指令过程中,当正在处理的指令数量增加的时候,使用可查找存储队列将存储数据转发到合适的加载指令会变得日益困难,例如服务未命中的加载。而且,诸如CAM逻辑之类的、通常与可查找存储队列相关联的查找逻辑为了在未决长等待时间操作期间满足独立的加载操作可能需要额外的能量、芯片空间和处理周期。
发明内容
一种装置,包括第一存储设备,用于在高等待时间操作从第二存储设备存取数据期间记录多个存储操作的程序顺序。
一种方法,包括发布高等待时间指令;将按照程序顺序在高等待时间指令之后的多个存储指令存储在先入先出队列中;在高等待时间指令检索数据时,利用独立于高等待时间指令的存储指令的数据来满足独立于高等待时间指令的加载指令。
一种系统,包括存储器,用于存储第一数据;处理器,用于执行高等待时间指令以检索第一数据;队列,用于在高等待时间操作检索第一数据时,按照程序顺序存储多个存储指令;高速缓存,用于暂时包括与多个存储指令中的至少一个相对应的存储数据,存储数据满足独立于高等待时间操作的加载指令;组相关加载缓冲器,用于存储与加载指令相对应的存储地址,存储地址要与存储指令的目标地址相比较。
一种机器可读介质,具有存储在其上的一组指令,如果由机器执行指令,则使机器执行一种方法,该方法包括响应需要执行多于最小时间的存储器存取指令,将多个存储操作按照程序顺序存储在先入先出(FIFO)队列中;响应存储器存取指令的完成,从FIFO队列中检索多个存储操作并将它们的数据按照程序顺序存储在数据高速缓存中而不必查找FIFO队列。
通过举例而非限定的方式说明本发明的实施例,附图中相同的标记表示相似的元件,其中图1示出微处理器内的现有技术体系结构,用于在未决长等待时间存储器存取操作(诸如加载操作)期间满足独立操作。
图2示出根据本发明一个实施例的体系结构,使得满足独立操作而不使用可查找存储结构。
图3是示出可以包含在本发明一个实施例中的操作的流程图。
图4示出根据一个实施例的体系结构,包括弱检测过滤器(loose-checkfilter),使得满足独立操作而不使用可查找存储结构。
图5是共享总线计算机系统,在其中可以使用本发明的一个实施例。
图6是点对点计算机系统,在其中可以使用本发明的一个实施例。
图7示出根据一个实施例的体系结构,使用加载缓冲器来存储与匹配存储地址相对应的加载地址。
图8示出根据一个实施例的图7的加载缓冲器的条目。
具体实施例方式
本发明的实施例涉及向独立于高等待时间指令(high-latency instruction)(诸如存取DRAM来检索加载数据的加载指令)的指令提供服务的技术。更为具体地,本发明的实施例涉及在高等待时间操作未决时,将存储数据匹配于加载操作,而不使用可查找存储设备的技术。
本发明的至少一个实施例替换了具有相关内容可寻址存储器(CAM)逻辑的第二级(“L2”)队列而支持先入先出(FIFO)队列,所述FIFO队列在特定时间正执行的一个或多个长等待时间操作的影响下保持存储操作(从属的和独立的)。FIFO队列很可能使用更少的能量,因为FIFO队列不需要像一般的CAM结构那样的查找以及相关的查找逻辑。而且在至少一个实施例中,独立加载从L1数据高速缓冲存储器转发数据以有助于保持性能。
图2示例了本发明的一个实施例,其中FIFO队列用于由于高速缓存未命中而在一个或多个操作正存取相对较慢存取存储器(例如动态随机存取存储器(DRAM))时进行存储。更为具体地,图2示例了第一级(“L1”)存储队列201,其中存储了各种指令或微操作。如果诸如指令或微操作之类的操作不能从相对较快存取存储器(例如数据高速缓冲存储器)中检索到所需要的数据,从而创建高速缓存未命中条件,那么可以借助于其他存储器如DRAM或更高级别并通常更慢的高速缓冲存储器来检索数据。下文中对相对较慢存取存储资源(例如DRAM)进行存取的操作(例如命令或微操作)称为“高等待时间”操作、指令或微操作。在高等待时间操作试图检索另一源中的存储器期间,独立于高等待时间操作的操作(下文称为“独立操作”)不应该由高等待时间操作或依赖于高等待时间操作的操作(下文称为“从属操作”)选通,但应该允许独立操作完成,因为它们不依赖于高等待时间操作。
相应地,图2示出以程序顺序存储在长等待时间操作之后发生的操作的再存储逻辑(SRL)(store redo log)205。不象现有技术,SRL不包含CAM逻辑或者查找SRL所需的任何其他逻辑,而是SRL按照独立和从属存储操作在程序中出现的顺序对它们进行存储,这样在需要时可按程序顺序将它们读出。在一个实施例中,SRL是FIFO队列。而在其他实施例中,SRL可以是为了从存储结构中检索出指令或微操作而不必对其查找的其他存储结构。
在本发明的一个实施例中,通过将所需的独立存储数据存储在L1存储队列或存储在L1数据高速缓冲存储器210中,在满足高等待时间操作之前,可以通过L1存储队列201或者L1数据高速缓冲存储器210中的独立存储操作来满足独立加载操作。数据高速缓冲存储器能够作为要由独立加载操作使用的数据的暂时存储位置,并且取决于程序顺序,在长等待时间操作结束之后,可以由对应于长等待时间操作或从属操作的数据替换。而且,之前存储在数据高速缓冲存储器中的位置上的由独立存储操作写入的任何数据(“脏块”)都能够被存储至其他存储结构中,例如L2高速缓冲存储器,并且在长等待时间操作结束之后返回至数据高速缓冲存储器。
图2也示例了等待缓冲器,在高等待时间操作仍未决时存储从属操作。在一些实施例中等待缓冲器可以是FIFO。然而在其他实施例中,等待缓冲器可以是其他类型的存储结构。在满足了高等待时间操作之后,在数据高速缓存中以程序顺序重新装配从属和独立数据(包括已经写入数据高速缓存中以满足加载操作的数据)。在本发明的一个实施例中,通过将SRL的数据按照程序顺序写入并在数据高速缓存中重新装配数据。在将与高等待时间操作对应的数据写入数据高速缓存中的适当位置之后,存储在SRL中的存储操作的数据可以被顺序地从SRL中读出并存储至数据高速缓存中的适当位置,而不必搜索SRL以查找适当的数据。
因为与独立和从属操作对应的所有数据都能从SRL中顺序地读出,所以相对于使用诸如L2存储队列的存储结构来存储独立和从属指令或微操作的现有技术而言,能够更快检索到数据并且消耗更少的能量。而且,SRL可以小于现有技术的结构,因为SRL不包含诸如CAM逻辑的查找逻辑。
图3是示出可以在本发明一个实施例中使用以实现实施例(如图2实施例)的一系列操作的流程图。在操作301,遇到高等待时间指令或者微操作,使得指令借助于相对较高等待时间存储器(例如DRAM)来检索指令或微操作需要的数据。当高等待时间指令或微操作存取它需要的数据(即指令或者微操作“未决”)时,在操作305,依赖于高等待时间指令的指令或微操作都存储在等待缓冲器中,而依赖于和独立于高等待时间指令或微操作的存储指令或微操作存储于SRL中。
在操作310,独立于高等待时间指令的指令或微操作可以将适当数据暂时地写入数据高速缓存中,独立指令或者微操作可以从该数据高速缓存读取数据。如果在操作315与独立指令相对应的数据被写入脏块中,那么在操作320,脏块中的数据被暂时存储至其他存储器中,例如L2高速缓存。在操作325,在高等待时间指令已经检索到它的数据之后,可以通过将来自等待缓冲器中存储的指令或者微操作的数据拷贝到SRL中其适当的位置而按照程序顺序重新装配独立数据和从属数据,接着将SRL中存储的存储指令或者微操作的数据写入数据高速缓存中的相应位置,使得以程序顺序存储数据。
图4示例了本发明的一个实施例,其中使用弱检测过滤器(LCF)403来识别SRL 405是否包含具有满足特定加载操作的数据的指令或者微操作。LCF的输出连接到多路复用器407,多路复用器407能够直接从SRL中选择数据而不必如图3所说明的实施例那样首先将数据拷贝到数据高速缓存410。如图3的实施例,数据可以经由多路复用器413从L1队列401或者数据高速缓存中被选择并被写入寄存器文件(未示出)。
在本发明的一个实施例中,LCF是按存储地址的散列函数索引的、直接映射非标记计数器数组。将存储操作插入到SRL中使相应的LCF计数器递增,而从SRL中删除存储操作使LCF计数器递减。非零LCF计数器值意味着SRL中可能匹配的存储操作,而零LCF计数值保证没有匹配的存储操作。通过允许加载操作通过LCF匹配SRL中的数据,加载操作可以只停止在与非零值的LCF匹配上。
LCF可以导致一些加载操作没有必要地停止,但是为了减少这种停止情况,可以在SRL中使用索引的转发。因为许多停止的加载操作是最近获取的在高等待时间操作之后出现的加载操作,但是在SRL中的所有存储操作都已经将其数据存储在数据高速缓存中之前,SRL中的转发存储操作通常是最后插入到SRL中的匹配存储操作。因此,在一个实施例中,LCF被扩展以存储与相应LCF计数器相关联的最后插入的存储操作的SRL索引。在该实施例中,需要对应于SRL中的存储操作的存储数据的到达的加载操作能够快速地在SRL中定位最后可能匹配的存储数据条目。加载操作能够读取该条目并且执行完全的地址和年限检测,而不需要经由CAM逻辑或者一些其他逻辑查找SRL。而且,在该实施例中整个SRL只需要一个地址比较器。
在一些情况下,加载可以被预测为独立于高等待时间指令,但是可以最终依赖于从属存储指令。例如,如果高等待时间指令是加载指令,那么不依赖于高等待时间加载指令的后来的加载指令可能依赖于从属存储指令。在这种情况下,如果存在按照程序顺序出现在符合的加载指令之前的、比符合加载的数据具有符合加载指令的更新数据的从属存储操作,那么由独立存储指令的数据满足的加载指令可能会由错误的数据来满足。
图7示例了本发明的一个实施例,具有加载缓冲器来存储加载指令的目标地址,所述加载指令的目标地址可以与正在处理中的的并将被存储到SRL705或队列701中的存储指令的目标地址相比较,以确定符合的加载指令是否真正具有最新的存储数据。具体而言,加载缓冲器703用于存储与加载操作相对应的目标加载地址,并且能够将目标加载地址与发送到SRL或者队列的存储指令的目标存储地址相比较,有效地“监听”正在处理中的存储目标地址。
将加载缓冲器中存储的目标地址与发送到SRL或者队列的存储指令的目标地址相比较,并且按照程序顺序在存储指令之后、共享相同目标地址的加载缓冲器内的匹配条目指示加载指令从数据高速缓存中检索的数据不能使它得到满足。在一个实施例中,加载缓冲器是组相联缓冲器,而在其他实施例中也可以使用其他存储结构。
如果在SRL内遇到这样的存储与加载操作从数据高速缓存中检索的存储数据不对应,并且按照程序顺序在与从数据高速缓存检索的数据对应的指令之后而按照程序顺序在加载操作之前,那么可以使用错误预测恢复机制来检索最新存储数据。在一个实施例中,SRL中最新存储数据可能使加载指令得到满足,通过将指令的处理管线冲刷回执行顺序中由加载缓冲器内存储在条目中的检验点指示的特定点,从而将加载指令与最新存储数据对应。
图8示出根据一个实施例的加载缓冲器的条目,其中每个加载缓冲器条目都包含物理地址标记801,物理地址标记801与SRL中的存储操作的相应地址字段相比较。每个条目还包括有效位805,指示该条目是否包含有效加载地址;标识字段810,指示在加载操作错误地满足于数据高速缓存中的存储数据之后执行重新开始的位置(“检验点”);以及存储缓冲器标识字段815,指示按照程序顺序与加载指令最近的前一存储指令的地址;以及存储缓冲器标识字段817,指示以前满足了加载的存储。
在本发明的一个实施例中,在要满足的每个加载操作从数据高速缓存读取数据之前,相对于SRL中存储的存储操作检验加载缓冲器条目。在其他实施例中,该检验是在加载操作从数据高速缓存中检索数据之后实现的。由于加载缓冲器是组相联的,而不是全相联的,例如至少一个实施例能够相对较快地将加载地址和SRL中的相应存储地址相比较,这样该比较就可以在高等待时间加载操作的存储器存取周期期间进行。
图5示例了前端总线(FSB)计算机系统,在其中可以使用本发明的一个实施例。处理器205从一级(L1)高速缓冲存储器510和主存储器515中存取数据。在本发明的其他实施例中,高速缓冲存储器可以是计算机系统存储层次中的二级(L2)高速缓存或者其他存储器。而且,在一些实施例中,图5的计算机系统可以既包括L1高速缓存又包括L2高速缓存,所述L1和L2高速缓存包括内含的高速缓存层次,其中相干数据在L1和L2高速缓存之间共享。
图5的处理器内示例的是本发明的一个实施例506。在一些实施例中,图5的处理器可以是多内核处理器。
主存储器可以由各种存储器源实现,例如动态随机存取存储器(DRAM)、硬盘驱动器(HDD)520或者包含各种存储设备和技术的、经由网络接口530远离计算机系统设置的存储器资源。高速缓冲存储器可以设置在处理器内或者处理器的邻近处,例如在处理器的本地总线507上。而且,高速缓冲存储器可以包含相对较快的存储器单元,例如六晶体管(6T)单元或者大约相同或者更快存取速度的其他存储器单元。
图5的计算机系统可以是总线代理例如微处理器的点对点(PtP)网络,总线代理经由专用于PtP网络上每个代理的总线信号进行通信。本发明506的至少一个实施例在每个总线代理内或者至少与每个总线代理相关联,这样在总线代理之间能够以迅速的方式便于存储操作。
图6示例了以点对点(PtP)配置设置的计算机系统。特别地,图6显示了这样的系统,其中处理器、存储器和输入/输出设备由多个点对点接口互连。
图6的系统也可以包括多个处理器,为了简洁只示出了两个处理器670、680。处理器670、680每个可以包括本地存储控制器集线器(MCH)672、682来连接存储器62、64。处理器670、680可以使用PtP接口电路678、688经由点对点(PtP)接口650交换数据。处理器670、680均可以使用点对点接口电路676、694、686、698经由各个PtP接口652、654与芯片组690交换数据。芯片组690也可以经由高性能图形接口639与高性能图形电路638交换数据。
本发明的至少一个实施例可以设置在处理器670、680内。然而本发明的其他实施例可以存在于图6的系统中的其他电路、逻辑单元、或者设备之中。而且,本发明的其他实施例可以分布在图6所示的多个电路、逻辑单元或者设备。
本文所描述的本发明的多个实施例可以利用使用互补金属氧化物半导体设备或者“硬件”的电路、或者使用介质中存储的一组指令(当由机器例如处理器执行时,执行与本发明实施例相关联的操作)或者“软件”来实现。或者,本发明的实施例可以使用硬件和软件的组合来实现。
虽然已经参照实施例描述了本发明,但是该描述并不意味着限制意义。对于本发明所属领域的技术人员而言显而易见的是,对示出实施例以及其他实施例的各种修改都被认为是落入本发明的精神和范围之内。
权利要求
1.一种装置,包括第一存储设备,用于在高等待时间操作从第二存储设备存取数据期间记录多个存储操作的程序顺序。
2.根据权利要求1所述的装置,进一步包括等待缓冲器,用于存储依赖于所述高等待时间操作的操作。
3.根据权利要求2所述的装置,进一步包括第三存储设备,用于在所述高等待时间操作已经从第二存储设备存取数据之后存储与所述多个存储操作相关联的数据。
4.根据权利要求3所述的装置,其中独立加载操作是在高等待时间操作已经发布之后并在高等待时间操作从第二存储设备检索到数据之前检索与独立存储操作相对应的数据。
5.根据权利要求4所述的装置,其中所述独立加载操作是存取与第四存储设备中存储的操作相对应的数据。
6.根据权利要求5所述的装置,其中第一存储设备包括先进先出队列而第四存储设备包括1级(L1)存储队列。
7.根据权利要求6所述的装置,其中第二存储设备包括动态随机存取存储器(DRAM)。
8.根据权利要求7所述的装置,进一步包括弱计数过滤器,以允许使独立加载操作得到满足而不用从第三设备读取数据。
9.一种方法,包括发布高等待时间指令;将按照程序顺序在所述高等待时间指令之后的多个存储指令存储在先入先出队列中;在所述高等待时间指令检索数据时,利用独立于所述高等待时间指令的存储指令的数据来满足独立于所述高等待时间指令的加载指令。
10.根据权利要求9所述的方法,进一步包括在所述高等待时间指令检索数据时将数据暂时存储在数据高速缓存或1级(L1)存储队列中,使得所述加载指令能够读取暂时存储的数据。
11.根据权利要求10所述的方法,进一步包括在所述高等待时间指令检索数据时将从属存储指令存储在等待缓冲器中。
12.根据权利要求11所述的方法,进一步包括在所述数据高速缓存中按照程序顺序重新装配与所述等待缓冲器中存储的所述从属存储指令相关联的数据以及与所述先入先出队列中存储的存储指令相关联的数据。
13.根据权利要求9所述的方法,其中所述先入先出缓冲器按照程序顺序存储独立和从属存储指令,使得可将缓冲器内容按照程序顺序存储在数据高速缓冲中。
14.根据权利要求13所述的方法,其中所述高等待时间指令从动态随机存取存储器中检索数据。
15.根据权利要求10所述的方法,其中如果所述数据被存储到与之前存储的有效数据相对应的所述数据高速缓存的区域,那么所述之前存储的有效数据被暂时存储在另一个存储位置并且随后被恢复到所述数据高速缓存的区域。
16.根据权利要求10所述的方法,其中用于满足所述加载指令的所述数据是与所述L1存储队列中存储的指令相对应的数据。
17.根据权利要求16所述的方法,其中具有用于满足所述加载指令的数据的所述先入先出队列中存储的指令独立于所述高等待时间指令。
18.一种系统,包括存储器,用于存储第一数据;处理器,用于执行高等待时间指令以检索第一数据;队列,用于在所述高等待时间操作检索第一数据时,按照程序顺序存储多个存储指令;高速缓存,用于暂时包括与所述多个存储指令中的至少一个相对应的存储数据,所述存储数据满足独立于所述高等待时间操作的加载指令;组相关加载缓冲器,用于存储与所述加载指令相对应的存储地址,所述存储地址要与所述存储指令的目标地址相比较。
19.根据权利要求18所述的系统,其中所述高速缓存在所述高等待时间指令完成之后并在已经从所述队列中读取出所述多个存储指令之后按照程序顺序存储与所述存储指令相对应的多个数据。
20.根据权利要求18所述的系统,进一步包括弱计数过滤器,以允许由所述队列中存储的数据满足所述加载操作,而不是在所述数据已经被存储在所述数据高速缓存中之后读取所述数据。
21.根据权利要求19所述的系统,进一步包括等待缓冲器存储,用于存储依赖于所述高等待时间指令的指令。
22.根据权利要求21所述的系统,其中存储第一数据的存储器包括动态随机存取存储器。
23.根据权利要求22所述的系统,其中所述队列是先入先出队列。
24.根据权利要求23所述的系统,其中所述弱计数过滤器包括按存储器地址的散列函数索引的直接映射非标记计数器数组。
25.根据权利要求24所述的系统,其中如果存储指令存储在所述队列之中,则使所述弱计数过滤器中的相应计数器递增。
26.根据权利要求25所述的系统,其中所述队列、所述数据高速缓存、所述等待缓冲器以及所述弱计数过滤器都包含在微处理器内。
27.一种机器可读介质,具有存储在其上的一组指令,如果由机器执行所述指令,则使所述机器执行一种方法,所述方法包括响应需要执行多于最小时间的存储器存取指令,将多个存储操作按照程序顺序存储在先入先出(FIFO)队列中;响应所述存储器存取指令的完成,从所述FIFO队列中检索所述多个存储操作并将它们的数据按照程序顺序存储在数据高速缓存中而不必查找所述FIFO队列。
28.根据权利要求27所述的机器可读介质,其中在执行所述存储器存取指令时,独立于所述存储器存取指令的加载操作要存取与1级(L1)存储队列中存储的存储指令相对应的存储数据。
29.根据权利要求28所述的机器可读介质,其中所述加载操作是从所述数据高速缓存中存取存储数据。
30.根据权利要求28所述的机器可读介质,其中如果弱计数过滤器指示数据存在于所述FIFO队列之中,则所述加载操作将从所述FIFO队列存取所述存储数据。
31.根据权利要求28所述的机器可读介质,其中所述方法进一步包括将与所述加载操作的至少一个相关联的地址与所述存储操作的地址相比较来确定哪个存储操作对应于与至少一个加载操作相对应的最新数据。
32.根据权利要求31所述的机器可读介质,其中所述方法进一步包括从按照程序顺序出现在至少一个加载操作之前的操作所对应的检验点开始执行操作。
33.根据权利要求32所述的机器可读介质,其中与所述加载操作相关联的地址要存储在组相关缓冲器中。
全文摘要
一种技术,允许在高等待时间指令处理期间满足独立加载。本发明的实施例涉及这样的技术其中在处理高等待时间指令过程中,当满足独立加载指令时,存储结构用于按照程序顺序保存存储操作。在处理高等待时间指令之后,能够按照程序顺序恢复存储操作而无需查找存储结构。
文档编号G06F9/38GK1804792SQ20051011915
公开日2006年7月19日 申请日期2005年12月15日 优先权日2004年12月16日
发明者R·拉瓦, S·斯里尼瓦桑, H·阿卡里, A·甘地 申请人:英特尔公司