用于跟踪完成表中更大量未完成指令的方法和处理器的制作方法

文档序号:6517149阅读:244来源:国知局
专利名称:用于跟踪完成表中更大量未完成指令的方法和处理器的制作方法
技术领域
本发明涉及微处理器领域,更具体说,是涉及一种完成表,用于跟踪更大量的未完成指令。
背景技术
如果微处理器(“处理器”)能在每一时钟周期内完成多项指令,该微处理器被分类为超级标量的。超级标量处理器的体系结构,利用处理器内多个并行处理单元,能在每一时钟周期内完成更多的指令。这些处理单元一般包括多个并行操作的执行单元、用于向执行单元发送指令和数据的调度单元、和为执行单元预装入指令的重命名缓冲器(重命名寄存器)。这些处理单元还可以包括,含有用于跟踪指令和使指令退役的(“完成表”)。例如,完成单元可以对指令何时已经“完成”保持跟踪。当一条指令已经执行并处于任何例外都不会再发布该指令的状态,该指令可以说被“完成”。
在典型的超标量处理器中,从指令高速缓冲存储器检索多条指令,并放进队列,通常称为指令队列。在进入队列之后,由调度单元把指令向各个执行单元发布。在执行接收的指令时。执行单元可以向完成单元发送指示,表明该接收的指令的执行。这一信息可以存储在完成表中。然后,完成单元完成该指令,或使该指令退役,并向其余执行单元发送完成信号,使已结束的数据写回构建的寄存器。
完成表的大小与被跟踪的未完成指令数对应。例如,被跟踪的未完成指令数越大,完成表的大小越大。但是,完成表的大小越大,消耗的功率越多和使用更大的硅片面积。虽然较小的完成表缩减硅片面积和功耗,但跟踪的未完成指令变少,性能也随之下降。
因此,本领域需要能跟踪更大量未完成指令,但不增加它的大小的完成表。

发明内容
上面列举的问题,通过能跟踪完成表每一表目中未完成指令的连续数,例如超高速缓冲存储器一行的长度,借助只存储该表目中未完成指令连续数的第一个的有效地址和标识(“ITAG”),至少在一些实施例中已部分被解决。于是,该完成表能跟踪更大量未完成指令,但不增加它的大小。
在本发明的一个实施例中,一种在完成表中跟踪更大量未完成指令的方法,可以包括向第一和第二执行单元发布指令的步骤。本方法还可以包括,在第一和第二执行单元之一上,选择已结束的指令或现役的指令之一的标识。本方法还可以包括,使用被选择指令的标识,计算下一条要完成的指令的标识。本方法还可以包括,在完成表的表目中,选择未完成指令连续数的第一个的指令地址和标识。本方法还可以包括,使用下一条要完成的指令及被选择的指令的标识,和完成表的表目中未完成指令连续数的第一个的标识,计算下一条要完成的指令的指令地址。
在本发明的另一个实施例中,完成表可以包括多个表目,其中该多个表目的每一个,跟踪一个未完成指令的连续数。此外,该多个表目的每一个,可以用于存储未完成指令连续数的第一个的指令地址和标识。
前面很一般地列举了本发明的一个或多个实施例的特征和技术优点,是为了对本发明下面的详细说明有更好的理解。本发明另外的特征及优点将在本文后面说明,这些特征及优点构成本发明权利要求书的主题。


当结合下面的附图,阅读后面的详细说明时,能够获得对本发明更好的理解,附图有图1画出一种计算机系统的本发明的实施例;
图2画出一种处理器的本发明的实施例;图3A和3B是一种方法的流程图,用于按照本发明的一个实施例,计算下一条要完成的指令的有效地址和标识;和图4是一种方法的流程图,用于按照本发明的一个实施例,选择适当指令的标识,以便为非顺序的处理器计算下一条要完成的指令的标识。
具体实施例方式
本发明包括一种方法、完成表、和处理器,用于跟踪完成表中更大量的未完成指令。在本发明的一个实施例中,完成表可以包括多个表目,其中每一个表目跟踪一个未完成指令的连续数。每一个表目可以用于存储未完成指令连续数的第一个的指令地址和标识。通过能跟踪完成表每一表目中未完成指令的连续数,例如超高速缓冲存储器一行的长度,借助只存储该表目中未完成指令连续数的第一个的指令地址和标识,该完成表能跟踪更大量未完成指令,但不增加它的大小。
在下面的说明中,阐明许多专门的细节,以提供对本发明的完整的理解。但是,本领域熟练人员显然知道,没有这些专门的细节,也能实施本发明。在其他情况下,熟知的电路以方框图形式表示,以便不使本发明被不必要的细节掩盖。绝大部分关于定时考虑的细节等等都被省略,因为这种细节对完整理解本发明不是必需的,且属于本领域普通人员的技能之内。
图1-计算机系统图1画出计算机系统100的典型硬件配置,它代表实施本发明的硬件环境。计算机系统100可以有处理器110,通过总线112与各种其他部件耦合。处理器110更为详细的说明,将在下面结合图2给出。操作系统140可以在处理器110上运行,并提供控制和协调图1各部件的功能。按照本发明原理的应用程序150可以结合操作系统140运行,并向操作系统140提供调用,在操作系统上,调用可以实现由应用程序150施行的各种功能或服务。只读存储器(ROM)116可以与系统总线112耦合,并包括控制计算机系统100某些基本功能的基本输入/输出系统(“BIOS”)。随机存取存储器(RAM)114和磁盘适配器118,也可以与系统总线112耦合。应当指出,包括操作系统140和应用程序150的软件成分,可以装入RAM 114,RAM 114可以是计算机系统100用于执行的主要存储器。磁盘适配器118可以是与磁盘单元120如磁盘驱动器通信的集成驱动电子线路(“IDE”)适配器。
现在参考图1,计算机系统100还可以包括与总线112耦合的通信适配器134。通信适配器134可以把总线112与外部网络互连,使计算机系统100能与其他该类系统通信。I/O装置也可以通过用户接口适配器122和显示适配器136,与系统总线112连接。键盘124、鼠标126、和扬声器130,可以全都通过用户接口适配器122与总线112互连。事件数据可以通过这些装置的任一个,输入计算机系统100。显示监控器138可以经由显示适配器136与系统总线112连接。这样,用户能通过键盘124或鼠标126,向计算机系统100输入,和经过显示器138或扬声器130,从计算机系统100接收输出。
图2-处理器图2画出处理器110(图1)的一个实施例。处理器110可以包括取指令单元201。取指令单元201可以包括取指令地址寄存器(IFAR,Instruction Fetch Address Register)202和指令高速缓冲存储器203。取指令单元201可以用于,例如从多流系统中的程序计数器取指令,也可以把取出的指令地址装入IFAR 202。装入IFAR 202的地址可以是代表来自程序或编译程序地址的有效地址。与接收的有效地址对应的指令,可以存储在指令高速缓冲存储器203中。
取指令单元201还可以用于发布被取出的指令的有效地址、与被取出的指令关联的标识(本文称为“ITAG”)、和被取出的指令是否对与取指令单元201耦合的完成单元204有效的指示。ITAG可以指完成表某一特定表目的超高速缓冲存储器一行中,用于识别某一长度较长地址的特定指令的较少量的比特,例如完成表有8个表目,例如该长度较长地址是64比特的地址,例如该超高速缓冲存储器一行是超高速缓冲存储器一行中32条指令,那么该较少量的比特例如是8比特(下面还要讨论)。
完成单元204可以用于对被取出的指令何时已经“完成”保持跟踪。本文使用的“完成”,可以指一条指令已经被执行单元执行,并处于任何例外都不会再发布该指令的状态。完成单元204借助包括一个表205,对指令何时已经“完成”保持跟踪,本文称该表为“完成表”。完成表205可以包括多个表目。在完成表205中的每一表目,可以用于对未完成指令的连续数保持跟踪。在一个实施例中,可以用每一表目,对等于超高速缓冲存储器一行长度的未完成指令连续数保持跟踪,该超高速缓冲存储器一行的长度例如是32条指令。
现在参考图2,完成表205中每一表目,可以用于存储未完成表目,例如32条相继指令,的连续数第一指令的有效地址。该有效地址本文称“基本指令有效地址(Base IEA)”。完成表205中每一表目还可以用于存储该第一指令的ITAG,本文称之为“Base ITAG”。完成表205中每一表目还可以用于存储该第一指令是否有效的指示,有效的指令在完成表205中以“V”标记。通过能跟踪完成表中每一表目中未完成指令的连续数,例如超高速缓冲存储器一行的长度,借助只存储该表目未完成指令连续数的第一个的有效地址和标识(“ITAG”),该完成表能跟踪更大量未完成指令,但不增加它的大小。
参考图2,处理器110可以包括与取指令单元201耦合的指令调度单元206。取指令单元201可以用于从指令高速缓冲存储器203接收指令。这些指令可以存储在指令调度单元206的队列207中,本文称该队列为“指令队列”。指令队列207可以包括“N”个表目,存储总共N条指令。在任何时钟周期中,可以用指令调度单元206,把存储在指令队列207中的指令,调度至适当的执行单元,如浮点单元、定点单元、装入/存储单元、分支单元。在调度指令前,该指令可以存储在适当锁存器208-210中,以便调度至适当的执行单元211-213。例如,定点指令可以存储在锁存器208,以便稍后调度至定点执行单元“FXU”,例如“FXU0”211。另外,定点指令可以存储在锁存器209中,以便稍后调度至定点执行单元“FXU”,例如“FXU1”212。在另一个实施例中,浮点指令可以存储在锁存器210中,以便稍后调度至浮点执行单元“FPU”213。应当指出,处理器110可以包括比画出的和图2所示的更多的执行单元(在数量和类型上更多)。
在完成指令的执行时,执行单元211-213向完成单元204发送指示,表明指令已经“结束”。本文使用的“结束”是指一条指令已经被适当的执行单元执行结束。执行单元211-213可以把结束的指令的标识(“ITAG”)分别放进锁存器214-216。
处理器110余下的单元,将结合图3和4在下面讨论。图3是一种方法的流程图,用于按照本发明的一个实施例,计算下一条要完成的指令的有效地址和标识。图4是一种方法的流程图,用于按照本发明的一个实施例,选择指令的标识,以便为非顺序的处理器计算下一条要完成的指令的标识。
在一个实施例中,处理器110可以是顺序处理器,是指它同时执行相同类型的指令,如定点指令,如果这些指令在同一周期中被调度的话。在另一个实施例中,处理器110可以是非顺序处理器,是指它执行不同类型的指令,如定点和浮点指令,按与调度不同的次序执行这些指令。例如,浮点指令的执行一般比定点指令要用更长的时间。因此,如果在同一周期调度两种类型的指令,则定点指令将在浮点指令之前“结束”。本文使用的“结束”是指一条指令已经被适当的执行单元执行结束。为在定点单元和浮点单元之间维持输送(指被执行的指令流),下一调度群(即指令调度单元206要调度的下一指令群)必须在调度上拖延,并等待浮点单元的执行结束。但是,为了改进性能,最好在每一周期都调度定点指令流,即使在浮点指令已被调度之后。当出现这种情况时,许多比浮点指令年轻(即指令调度单元206较新近的调度)的定点指令,在较老(即指令调度单元206较早调度)的浮点指令结束时早已结束。因此,浮点指令的结束相对于定点指令是非顺序的。
如上所述,完成单元204可以使用完成表205,对取出的指令何时已经完成保持跟踪。在一个实施例中,完成单元204可以通过跟踪指令,对取出的指令何时已经完成保持跟踪,该指令本文称为“下一条要完成的指令”。该下一条要完成的指令,可以是完成单元204将要完成的下一个指令。
如在背景信息段所述,完成表的大小与被跟踪的未完成指令数对应。例如,被跟踪的未完成指令数越大,完成表的大小越大。但是,完成表的大小越大,消耗的功率越多和使用更大的硅片面积。虽然较小的完成表缩减硅片面积和功耗,但跟踪的未完成指令变少,性能也随之下降。因此,本领域需要能跟踪更大量未完成指令,但不增加它的大小的完成表。在一个实施例中,完成表通过能跟踪完成表内每一表目中未完成指令的连续数,借助只存储未完成指令连续数的第一个的有效地址和标识(“ITAG”),该完成表能够跟踪更大量未完成指令,但不增加它的大小。完成表204通过跟踪下一条要完成的指令的状态,可以在完成表205内每一表目的未完成指令的连续数中,跟踪每一指令的完成。为了跟踪下一条要完成的指令的状态,完成单元206需要确定下一条要完成指令的有效地址和标识。完成单元206可以用图3说明的方法,为顺序处理器确定下一条要完成的指令的有效地址和标识,或用图3和4说明的方法,为非顺序处理器确定下一条要完成的指令的有效地址和标识。
图3-用于计算下一条要完成指令的有效地址和标识的方法图3是本发明的一个实施例的流程图,用于计算下一条要完成指令的有效地址和标识。
现在结合图2参考图3,在步骤301,取指令单元201取出指令。在步骤302,取指令单元201把取出的指令的有效地址(“IEA”)和标识(“ITAG”),连同指示取出的指令的有效性,发送至完成单元204。
在步骤303,完成单元204确定,接收的IEA是否与前面取出的IEA相邻。就是说,完成单元204确定,取出的指令的有效地址,是否紧随前面取出的指令的有效地址。
如果取出的指令的有效地址,是紧随前面取出的指令的有效地址,那么,在步骤304,完成单元204确定,完成表205的“Head-1”位置是否已满。“Head-1”位置是指完成表205中的表目,新近用未完成指令连续数第一个的有效地址和标识,以及指示该指令有效性填充的。“Head”位置是紧随着的表目,也就是将要填充的表目。
如果完成表205的“Head-1”位置没有满,那么,取指令单元201在步骤301取出另一条指令。应当指出,在方法300的任一步骤的完成之中或完成之后,取指令单元201可以取出下一条指令,并且举例说明,另一条指令的取出,是在完成表205的“Head-1”位置没有满时进行的。
但是,如果完成表205的“Head-1”位置已满,或者,如果取出的指令的有效地址,不是紧随前面取出的指令的有效地址,那么,在步骤305,完成单元204确定,完成表205是否已满。
如果完成表205已满,那么取指令单元201在步骤306,再取出该指令(指步骤301中取出的指令)。在步骤306再取出该指令时,取指令单元201在步骤302,把取出的指令的有效地址(“IEA”)和标识(“ITAG”),连同指示取出的指令的有效性,发送至完成单元204。
如果完成表205没有满,那么在步骤307,完成单元204把接收的有效地址、标识、和有效性的指示,写入完成表205的表目中对应的“Head”位置。因为接收的取出指令的有效地址,不是紧随前面取出的指令的有效地址,该取出的指令可以是下一群相继的未完成指令,例如在紧随的超高速缓冲存储器一行中的第一指令。
在步骤308,完成单元204把“Head”指针前推,指向与下一个空位置对应的“Head+1”位置。在一个实施例中,完成单元204可以使指针指向完成表205中下一个空表目。
现在参考步骤301,在取指令单元201取出指令后,取指令单元201在步骤309,把取出的指令写入指令队列207。在步骤310,指令调度单元206把存储指令队列207中的指令,发布至一个或多个执行单元211-213。在步骤311,执行单元211、212、或213在执行指令时,向完成单元204发送指示。
在步骤312,完成单元204选择新近被执行单元211、212、或213执行,或被执行单元211、212、或213结束的指令的标识(“ITAG”),这里,该被选择的ITAG,可以用来计算下一条要完成指令的标识(“ITAG”),说明如下。
在顺序处理器的实施例中,完成单元204接收最新近结束,即最后结束的指令的标识(“ITAG”)。该接收的最后结束指令的标识,与完成单元204的机构217为计算下一条要完成指令的标识而选择的标识对应,讨论如下。在一个实施例中,存储在锁存器214、215、或216中已结束的指令的标识(“ITAG”),可以发送至机构217,然后被存储在完成单元204的锁存器218中。因为在该处理器110是顺序处理器的实施例中,完成单元204可以不包括用于存储最老的现役浮点指令的锁存器219。锁存器219可以用在非顺序处理器中,下面还要结合图4说明。在该处理器110是非顺序处理器的实施例中,机构217可以用于从锁存器214、215、216、或219之一,选择ITAG,计算下一条要完成的指令的ITAG,现讨论如下。如果机构217从锁存器219选择ITAG(“最老的现役浮点指令”,下面要解释),然后,选择的ITAG存储在锁存器221中,而不是在锁存器218中,说明如下。
在非顺序处理器的实施例中,完成单元204的机构217,选择新近被执行单元211、212、或213执行的,或被执行单元211、212、或213结束的指令的标识(“ITAG”),如下面结合图4的说明。应当指出,图4说明用于非顺序处理器的步骤312中,定点指令和浮点指令可以不按上述次序执行。还应当指出,这些是举例说明的,而且图4可以用于任何能够不按次序执行的两种不同类型的指令。
在讨论图4之前,先适当地讨论4种定点指令和浮点指令执行次序的可能情况。
第一种可能情况是,定点指令和浮点指令同时结束。例如,假定指令FX0、FX1、FX2、FP1、和FX4在同一周期被指令调度单元206调度,并同时结束。在此情况中,选择浮点指令FP1的标识(“ITAG”)来计算下一条要完成的指令的标识(“ITAG”)。选择浮点指令FP1的标识(“ITAG”),部分是由于浮点指令一般比定点指令需要更长的执行时间。因此,下一条要完成的指令,很可能是下一个浮点指令。
第二种可能情况是,假如没有浮点指令正在结束(由浮点单元,如浮点单元213执行的浮点指令尚未完成),和新近已经结束一条定点指令。那么,该新近结束的定点指令与最老的现役浮点指令比较(指尚未结束但目前正在被浮点单元执行的最早被调度的浮点指令)。假如最年轻的正在结束的定点指令(最新近结束的定点指令),比最老的现役浮点指令更老,那么,选择该最年轻正在结束的定点指令的ITAG,用来计算下一条要完成的指令的ITAG。例如,假定指令FX0、FX1、和FP1,在相同的周期中,按上面指出的次序,被指令调度单元206调度。定点指令FX0结束后,跟着是定点指令FX1。浮点指令FP1仍然是现役。在这种情况中,选择定点指令FX1的标识(“ITAG”)来计算下一条要完成的指令的标识(“ITAG”)。选择浮点指令FX1的标识(“ITAG”),部分是因为它是已经结束的最老指令。在上述情况中,下一条要完成的指令将是FP1。FP1的ITAG可以用下一条要完成的指令的ITAG确定,说明如下。
第三种可能情况是,假如没有浮点指令正在结束(由浮点单元,如浮点单元213执行的浮点指令尚未完成),和新近已经结束一条定点指令。那么,该新近结束的定点指令与最老的现役浮点指令比较(指尚未结束但目前正在被浮点单元执行的最早被调度的浮点指令)。假如最年轻的正在结束的定点指令(最新近结束的定点指令),比最老的现役浮点指令更年轻,那么,选择该最老的现役浮点指令的ITAG,用来计算下一条要完成的指令的ITAG。例如,假定指令FX0、FP1、和FX1在相同的周期中,按上面指出的次序,被指令调度单元206调度。定点指令FX0结束后,跟着是定点指令FX1。在这种情况中,选择浮点指令FP1的标识(“ITAG”)来计算下一条要完成的指令的标识(“ITAG”)。在该情况下,浮点指令FP1的标识ITAG,是下一条要完成的指令的ITAG。选择浮点指令FP1的标识(“ITAG”),部分是因为,浮点指令的执行一般比定点指令要用更长的时间,还因为它是最老的现役浮点指令。在该情况中,选择FP1的ITAG为下一条要完成的指令的ITAG。此外,可以保存最年轻的正在结束的定点指令(最新近结束的定点指令)的ITAG。该保存的定点指令,可以在下面的情况中使用。
第四种可能情况是,当最老的现役浮点指令结束,且假如没有更老的浮点指令在输送(指在一周期中被调度的浮点指令流)中,假定没有已经结束的更年轻的定点指令,那么,选择该保存的最年轻的定点指令的ITAG,来计算下一条要完成的指令的ITAG。如果有任何比保存的定点指令更年轻的已经结束的定点指令,那么,选择该更年轻定点指令的ITAG,来计算下一条要完成的指令的ITAG。例如,参考第三种情况的例子,当浮点指令FP1结束时,那么用保存的定点指令(在本例中是FX1)的ITAG计算下一条要完成的指令的ITAG,除非有更年轻的定点指令已经结束。可以选择保存的,或可能更年轻的浮点指令的标识(“ITAG”),部分是因为它是已经结束的最老的指令。然后,用该保存的,或可能更年轻的浮点指令的ITAG,确定下一条要完成的指令的ITAG。
在上述第四种情况中,使用下面结合图4说明的方法,处理器110的机构217,可以用于选择适当的ITAG来计算下一条要完成的指令的ITAG。
现在结合图2参考图4,在步骤401中,完成单元204确定,定点单元211、212是否结束执行一条定点指令。
如果定点单元211、212已经结束执行一条定点指令,那么在步骤402,完成单元204确定,是否有最老的现役浮点指令。如果没有最老的现役浮点指令,那么在步骤403,完成单元204选择已结束的定点指令的标识(“ITAG”)。
但是,如果有最老的现役浮点指令(存储在锁存器219中),那么,在步骤404,完成单元204确定,该已经结束的定点指令,是否比该最老的现役浮点指令更年轻。
如果该已经结束的定点指令,不比该最老的现役浮点指令更年轻,那么在步骤403,完成单元204选择该结束的定点指令的标识(“ITAG”),计算下一条要完成的指令的ITAG。然后,完成单元204确定,定点单元211、212是否已经在步骤401结束执行一条定点指令。
但是,如果结束的定点指令,比最老的现役浮点指令更年轻,那么在步骤405,完成单元204选择该最老的现役浮点指令,作为计算下一条要完成的指令ITAG的ITAG。如上所述,在该情况下,最老的现役浮点指令的ITAG,是下一条要完成的指令的ITAG。然后,完成单元204确定,定点单元211、212是否已经在步骤401结束执行一条定点指令。
现在回到步骤401,如果定点单元211、212没有结束执行一条定点指令,那么在步骤406,完成单元204确定,浮点单元213是否已经结束执行一条指令。如果浮点单元213没有结束执行一条浮点指令,那么完成单元204确定,定点单元211、212是否已经在步骤401结束执行一条定点指令。
但是,如果浮点单元213已经结束执行一条浮点指令,那么在步骤407,完成单元204确定,是否有任何保存的定点指令(指最年轻的正在结束的定点指令)。
如果没有保存的定点指令,那么在步骤408,完成单元204选择已结束的浮点指令的ITAG,作为要确定下一条要完成的指令ITAG的ITAG。然后,完成单元204确定,定点单元211、212是否已经在步骤401结束执行一条定点指令。
但是,如果有保存的定点指令,那么在步骤409,完成单元204确定,是否有任何比该保存的定点指令更年轻的已结束的定点指令。如果没有比该保存的定点指令更年轻的已结束的定点指令,那么在步骤410,完成单元204选择该保存的定点指令的ITAG,作为要确定下一条要完成的指令ITAG的ITAG。然后,完成单元204确定,定点单元211、212是否已经在步骤401结束执行一条定点指令。
但是,如果有比保存的定点指令更年轻的已结束的定点指令,那么在步骤411,完成单元204选择该更年轻已结束的定点指令的ITAG,作为要确定下一条要完成的指令ITAG的ITAG。然后,完成单元204确定,定点单元211、212是否已经在步骤401结束执行一条定点指令。
现在回到图3,在步骤313,完成单元204确定,选择的ITAG是否为最老的现役浮点指令的ITAG。在一个实施例中,机构217包含确定被选择的ITAG是否为最老现役浮点指令的ITAG的逻辑。
如果选择的ITAG不是最老现役浮点指令的ITAG,那么,完成单元204可以在步骤314,通过把逻辑值“1”加到被选择标识的标识上,计算下一条要完成的指令的标识。在一个实施例中,完成单元204可以通过增量器220,把选择的标识(“ITAG”)增加逻辑值1,来计算下一条要完成的指令的标识,并把结果存储在锁存器221中。锁存器221可以用于存储下一条要完成的指令的ITAG。
但是,如果选择的ITAG是最老现役浮点指令的ITAG,那么,完成单元204可以在步骤315中,通过令选择的ITAG(最老现役浮点指令的ITAG)为下一条要完成的指令的ITAG,来计算下一条要完成的指令的标识。在一个实施例中,可以用机构217把选择的ITAG(最老现役浮点指令的ITAG)存储在锁存器221中。
在步骤316,完成单元204确定,选择的指令(指机构217选择的ITAG标识的指令),是否比完成表205“Tail+1”位置中未完成指令连续数的第一个对应的指令更老。“Tail”位置可以指完成表205中最老的表目。“Tail+1”位置可以指完成表205中次最老的表目。在一个实施例中,完成单元204可以通过比较器222,把Tail+1位置中的Base ITAG,与选择的指令的ITAG比较,确定最后结束的指令,是否比完成表205“Tail+1”位置中未完成指令连续数的第一个对应的指令更老。比较结果可以存储在锁存器223、224、和225中。
如果选择的指令,比完成表205“Tail+1”位置中未完成指令连续数第一个对应的指令更老,那么在步骤317,完成单元204选择完成表205中Tail位置表目的Base ITAG和Base IEA。如果选择的指令,比完成表205“Tail+1”位置中未完成指令连续数第一个对应的指令更老,那么选择的指令,与完成表205的Tail位置中代表的指令之一对应。在一个实施例中,完成单元204可以通过把完成表205中Tail和Tail+1两个位置的Base ITAG,输入复用器226,以选择完成表205中Tail位置表目中的Base ITAG。复用器226通过复用器226选择从锁存器227接收适当的值,如0或逻辑值“1”的输入,选择适当的ITAG(在本例中,是完成表205的Tail位置的Base ITAG)。然后,复用器226选择的ITAG,可以存储在锁存器227中。在一个实施例中,完成单元204可以通过把完成表205中Tail和Tail+1两个位置的Base IEA,输入复用器228,以选择完成表205中Tail位置表目中的Base IEA。复用器228通过复用器228选择从锁存器223接收适当的值,如0或逻辑值“1”的输入,选择适当的IEA(在本例中,是完成表205的Tail位置的Base IEA)。然后,复用器228选择的ITAG,可以存储在锁存器229中。
在步骤318,完成单元204计算地址偏移。在一个实施例中,完成单元204从步骤314或315计算的下一条要完成的指令的ITAG中,减去选择的Base ITAG,计算地址偏移。在一个实施例中,完成单元204通过减法器230,从步骤314或315中计算的下一条要完成指令的ITAG,减去选择的Base ITAG,计算地址偏移。然后,该地址偏移可以存储在锁存器231内。
在步骤319,完成单元204计算下一条要完成的指令的有效地址。在一个实施例中,完成单元204通过把步骤318中计算的地址偏移,与选择的Base IEA相加,计算下一条要完成的指令的有效地址。在一个实施例中,完成单元204通过加法器232,把步骤318中计算的地址偏移,与选择的Base IEA相加,计算下一条要完成的指令的有效地址。然后,该下一条要完成的指令的有效地址,可以存储在锁存器233中。
在计算下一条要完成的指令的有效地址后,取指令单元201在步骤301取出另一条指令。应当指出,取指令单元201可以在方法300的任一步骤之中或之后,取出下一条指令,并举例说明,取出是在计算下一条要完成的指令的有效地址时进行的。
现在回到步骤316,如果选择的指令,不比完成表“Tail+1”位置中未完成指令连续数第一个对应的指令更老,那么在步骤320,完成单元204选择完成表205的Tail+1位置表目中的Base ITAG和Base IEA。如果选择的指令,不比完成表“Tail+1”位置中未完成指令连续数的第一个对应的指令更老,那么,选择的指令与完成表205的Tail+1位置中代表的指令之一对应。在一个实施例中,完成单元204可以通过把完成表205中Tail和Tail+1两个位置的Base ITAG,输入复用器226,以选择完成表205中Tail+1位置表目中的Base ITAG。复用器226通过复用器226选择从锁存器225接收适当的值,如0或逻辑值“1”的输入,选择适当的ITAG(在本例中,是完成表205的Tail+1位置的Base ITAG)。然后,复用器226选择的ITAG,可以存储在锁存器227中。在一个实施例中,完成单元204可以通过把完成表205中Tail和Tail+1两个位置的BaseIEA,输入复用器228,以选择完成表205中Tail+1位置表目中的BaseIEA。复用器228通过复用器228选择从锁存器223接收适当的值,如0或逻辑值“1”的输入,选择适当的IEA(在本例中,是完成表205的Tail+1位置的Base IEA)。然后,复用器228选择的ITAG,可以存储在锁存器229中。
在步骤321,完成单元204计算地址偏移。在一个实施例中,完成单元204从步骤314或315计算的下一条要完成的指令的ITAG中,减去选择的Base ITAG,计算地址偏移。在一个实施例中,完成单元204通过减法器230,从步骤314或315中计算的下一条要完成的指令的ITAG中,减去选择的Base ITAG,计算地址偏移。然后,该地址偏移可以存储在锁存器231内。
在步骤322,完成单元204计算下一条要完成的指令的有效地址。在一个实施例中,完成单元204通过把步骤321中计算的地址偏移,与选择的Base IEA相加,计算下一条要完成的指令的有效地址。在一个实施例中,完成单元204通过加法器232,把步骤321中计算的地址偏移,与选择的Base IEA相加,计算下一条要完成的指令的有效地址。然后,该下一条要完成的指令的有效地址,可以存储在锁存器233中。
在步骤323,完成单元204对完成表205位于Tail位置的表目,解除分配。完成单元204对完成表205位于Tail位置的表目,解除分配,是因为该表目代表的所有指令的连续数已经完成。在一个实施例中,完成单元204的逻辑单元234从锁存器224接收适当的值,如0或逻辑值“1”时,对完成表205位于Tail位置的表目,解除分配。
在对完成表205位于Tail位置的表目解除分配后,取指令单元201在步骤301取出另一条指令。应当指出,在方法300的任一步骤的完成之中或完成之后,取指令单元201可以取出下一条指令,并且举例说明,取出是在对完成表205位于Tail位置的表目解除分配时进行的。
应当指出,为按顺序的或不按顺序的处理器之一计算下一条要完成指令的有效地址和指示(“ITAG”)所使用的上述方法,可以用来处理例外的情形。在执行单元211、212、或213结束一条指令的执行时,执行单元211、212、或213可以报告存在例外的条件。然后,完成单元204可以用上述方法,为按顺序的或不按顺序的处理器之一计算下一条要完成的指令的有效地址和指示(“ITAG”)。下一条要完成的指令的有效地址和ITAG,可以作为例外条件已经处理后送回的有效地址和ITAG而保存起来。
还应当指出,方法300可以包括为清楚起见没有画出的其他和/或另外的步骤。还应当指出,方法300可以按不同于给出次序的次序执行,且图3和4讨论中给出的次序,是示例性的。还应当指出,方法300中包含的步骤,可按同时方式执行。
虽然本方法、完成表、和处理器,是结合若干个实施例说明的,但这不意味限制在本文阐明的特定形式,相反,应当认为,附于后面的权利要求书规定的本发明的精神和范围中,合理地包括那些变化、修改、和等价的内容。应当指出,标题仅用于组织的目的,不是对说明或权利要求的限制。
权利要求
1.一种完成表,包括多个表目,其中,所述多个表目的每一个跟踪未完成指令的连续数,其中,所述多个表目的每一个用于存储所述未完成指令连续数第一个的指令地址和所述未完成指令连续数所述第一个的标识。
2.按照权利要求1的完成表,其中所述未完成指令的连续数包括超高速缓冲存储器一行的长度。
3.按照权利要求1的完成表,其中所述指令地址是有效地址。
4.按照权利要求1的完成表,其中在所述完成表的选择表目中下一条要完成的指令的指令地址和标识是用所述未完成指令连续数的所述第一个的所述指令地址和所述未完成指令连续数的所述第一个的所述标识分别计算的。
5.按照权利要求4的完成表,其中所述表目是根据执行单元上最老的现役指令和已结束指令之一选择的。
6.一种跟踪完成表中更大量未完成指令的方法,包括如下步骤向第一和第二执行单元发布指令;在所述第一和第二执行单元之一上选择已结束指令和现役指令之一的标识;用所述选择指令的所述标识计算下一条要完成的指令的标识;选择位于所述完成表表目中未完成指令连续数的第一个的指令地址和标识;和用所述下一条要完成指令的所述标识和所述完成表所述表目中所述未完成指令连续数所述第一个的所述选择的指令地址及标识计算所述下一条要完成指令的指令地址。
7.按照权利要求6的方法,还包括步骤用位于所述完成表所述表目中所述未完成指令连续数所述第一个的所述选择的标识和所述下一条要完成指令的所述标识计算地址偏移。
8.按照权利要求7的方法,其中,如果所述选择的指令比位于所述完成表尾位置前一个的表目中未完成指令连续数的第一个更老,则所述未完成指令连续数所述第一个的所述选择的指令地址及标识从位于所述完成表的所述尾位置的表目中选择。
9.按照权利要求7的方法,其中,如果所述选择的指令不比位于所述完成表尾位置前一个的位于表目中未完成指令连续数的第一个更老,则所述未完成指令连续数所述第一个的所述选择的指令地址及标识从位于所述完成表所述尾位置前一个的所述表目中选择。
10.按照权利要求7的方法,还包括步骤用所述计算的地址偏移和所述选择的指令地址计算所述下一条要完成的指令的指令地址。
11.按照权利要求10的方法,其中所述下一条要完成指令的所述指令地址是通过把所述计算的地址偏移与所述选择的指令地址相加来计算的。
12.按照权利要求9的方法,还包括步骤如果所述选择的指令不比位于所述完成表所述尾位置前一个表目中所述未完成指令连续数所述第一个更老,则对位于所述完成表所述尾位置的所述表目解除分配。
13.按照权利要求6的方法,其中所述选择的指令是在所述第一和所述第二执行单元上最新近结束的指令。
14.按照权利要求13的方法,其中所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
15.按照权利要求6的方法,其中所述第一执行单元是浮点单元,其中所述第二执行单元是定点单元。
16.按照权利要求15的方法,其中,如果在所述浮点单元上执行的所述选择的指令与在所述定点单元上执行的指令同时结束,则所述选择的指令是在所述浮点单元上已结束的指令,其中,所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
17.按照权利要求15的方法,其中,如果在所述浮点单元上没有指令正在结束和所述选择的指令比所述浮点单元上最老的现役指令更老,则所述选择的指令是在所述定点单元上已结束的指令,其中,所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
18.按照权利要求15的方法,其中,如果在所述浮点单元上没有指令正在结束和所述选择的指令比所述浮点单元上最老的现役指令更年轻,则所述选择的指令是在所述浮点单元上所述最老的现役指令,其中,在所述定点单元上最年轻的正在结束的指令被保存,其中,所述下一条要完成的指令的所述标识是所述选择的指令的所述标识。
19.按照权利要求18的方法,其中,如果在所述浮点单元上所述最老的现役指令已经结束,和在所述浮点单元上没有比所述浮点单元上所述已结束的最老现役指令更老的指令,又如果在所述定点单元上没有其他更年轻的指令,则所述选择的指令是所述保存的指令,其中,所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
20.按照权利要求18的方法,其中,如果在所述浮点单元上所述最老的现役指令已经结束,和在所述浮点单元上没有比所述浮点单元上所述已结束的最老现役指令更老的指令,又如果在所述定点单元上最年轻的正在结束的指令比所述保存的指令更年轻,则所述选择的指令是所述定点单元上所述最年轻的正在结束的指令,其中,所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
21.一种处理器,包括取指令单元,用于取出指令;与所述取指令单元耦合的指令调度单元,其中,所述取指令单元还用于向所述指令调度单元发布所述取出的指令,其中,所述指令调度单元包括指令队列,用于存储所述取出的指令;与所述指令调度单元耦合的第一和第二执行单元,其中所述调度单元用于把所述存储的取出的指令调度至所述第一和所述第二执行单元;和与所述取指令单元耦合的完成单元,其中,所述取指令单元还用于向所述完成单元发布指令地址和每一个所述取出的指令的标识,其中,所述完成单元用于对所述取出的指令何时已经完成保持跟踪,其中,所述完成单元包括完成表,其中,所述完成表包括多个表目,其中,每一所述多个表目跟踪未完成指令的连续数,其中,每一所述多个表目用于存储所述未完成指令连续数的第一个的指令地址和所述未完成指令连续数所述第一个的标识。
22.按照权利要求21的处理器,其中所述完成单元包括用于选择标识的逻辑,该逻辑在所述第一和所述第二执行单元之一上选择已结束指令和现役指令之一的标识;用于计算标识的逻辑,该逻辑使用所述选择的指令的所述标识计算下一条要完成的指令的标识;用于选择指令地址和标识的逻辑,该逻辑选择位于所述完成表表目中未完成指令连续数第一个的指令地址和标识;和用于计算指令地址的逻辑,该逻辑使用所述下一条要完成的指令的所述标识和位于所述完成表所述表目中所述未完成指令连续数所述第一个的所述选择的指令地址及标识计算所述下一条要完成的指令的指令地址。
23.按照权利要求22的处理器,其中所述完成单元还包括用于计算地址偏移的逻辑,该逻辑使用位于所述完成表所述表目中所述未完成指令连续数所述第一个所述选择的标识和所述下一条要完成的指令的所述标识计算地址偏移。
24.按照权利要求23的处理器,其中,如果所述选择的指令比位于所述完成表尾位置前一个的表目中未完成指令连续数的第一个更老,则所述未完成指令连续数所述第一个的所述选择的指令地址及标识从位于所述完成表的所述尾位置的表目中选择。
25.按照权利要求23的处理器,其中,如果所述选择的指令不比位于所述完成表尾位置前一个的位于表目中未完成指令连续数的第一个更老,则所述未完成指令连续数所述第一个的所述选择的指令地址及标识从位于所述完成表所述尾位置前一个的所述表目中选择。
26.按照权利要求23的处理器,其中,所述完成单元还包括用于计算指令地址的逻辑,该逻辑使用所述计算的地址偏移和所述选择的指令地址计算所述下一条要完成的指令的指令地址。
27.按照权利要求26的处理器,其中所述下一条要完成的指令的所述指令地址是通过在所述选择的指令地址上加上所述计算的地址偏移计算的。
28.按照权利要求25的处理器,其中,所述完成单元还包括用于解除分配的逻辑,如果所述选择的指令不比位于所述完成表所述尾位置前一个的表目中所述未完成指令连续数所述第一个更老,则该逻辑对位于所述完成表所述尾位置的所述表目解除分配。
29.按照权利要求22的处理器,其中所述选择的指令是在所述第一和所述第二执行单元之一上最新近结束的指令。
30.按照权利要求29的处理器,其中所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
31.按照权利要求22的处理器,其中所述第一执行单元是浮点单元,其中所述第二执行单元是定点单元。
32.按照权利要求31的处理器,其中,如果在所述浮点单元上执行的所述选择的指令与在所述定点单元上执行的指令同时结束,则所述选择的指令是在所述浮点单元上已结束的指令,其中,所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
33.按照权利要求31的处理器,其中,如果在所述浮点单元上没有指令正在结束,和所述选择的指令比所述浮点单元上最老的现役指令更老,则所述选择的指令是在所述定点单元上已结束的指令,其中,所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
34.按照权利要求31的处理器,其中,如果在所述浮点单元上没有指令正在结束,和所述选择的指令比所述浮点单元上最老的现役指令更年轻,则所述选择的指令是在所述浮点单元上所述最老的现役指令,其中,在所述定点单元上最年轻的正在结束的指令被保存,其中,所述下一条要完成的指令的所述标识是所述选择的指令的所述标识。
35.按照权利要求34的处理器,其中,如果在所述浮点单元上所述最老的现役指令已经结束,和在所述浮点单元上没有比所述浮点单元上所述已结束的最老现役指令更老的指令,又如果在所述定点单元上没有其他更年轻的指令,则所述选择的指令是所述保存的指令,其中,所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
36.按照权利要求34的处理器,其中,如果在所述浮点单元上所述最老的现役指令已经结束,和在所述浮点单元上没有比所述浮点单元上所述已结束的最老现役指令更老的指令,又如果在所述定点单元上最年轻的正在结束的指令比所述保存的指令更年轻,则所述选择的指令是所述定点单元上所述最年轻的正在结束的指令,其中,所述下一条要完成的指令的所述标识是通过在所述选择的指令的所述标识上加上逻辑值1来计算的。
全文摘要
一种用于跟踪更大量未完成指令的方法、完成表、和处理器。该完成表可以包括多个表目,其中每一表目跟踪未完成指令的一个连续数。每一表目可以用于存储未完成指令的连续数的第一个。通过能跟踪完成表每一表目中未完成指令的连续数,例如超高速缓冲存储器一行的长度,借助只存储该表目中未完成指令连续数的第一个的指令地址和标识,该完成表能跟踪更大量未完成指令,但不增加它的大小。
文档编号G06F12/08GK1680917SQ200510009310
公开日2005年10月12日 申请日期2005年2月18日 优先权日2004年4月8日
发明者苏珊·E·艾尔森, 恒·Q·乐, 戴维·A·鲁伊克, 邓·Q·古扬 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1