具有多程序计数器和在执行流水线外面的追踪缓冲区的处理器的制作方法

文档序号:6415992阅读:293来源:国知局
专利名称:具有多程序计数器和在执行流水线外面的追踪缓冲区的处理器的制作方法
技术领域
本发明涉及处理器,更具体地,涉及同时处理相关的线索的处理器。
背景技术
当前超大规模处理器,例如微处理器,实行诸如支路预测和不按次序执行的那样的技术,以便增强性能。具有不按次序执行的流水线的处理器以与获取和译码指令次序不同的次序执行某些指令。这些指令可以相对于没有相关性的指令不按次序地执行。不按次序执行可以通过防止执行单元仅仅因为程序指令次序所造成的空闲,而提高处理器性能。指令结果在执行后被恢复次序。
处理数据相关性的任务可通过限制指令译码按次序进行而被简化。然后处理器可以识别数据如何通过寄存器从一个指令流到后面的指令。为了确保程序正确性,寄存器被重新命名,以及指令在保存站中等待,直至它们的输入的操作数被产生为止,在这时它们被发送到适当的功能性单元用于执行。寄存器重新命名器、保存站、和相关的机制把具有相关性的指令链接在一起,以使得相关的指令在与它有关的指令以前不被执行。因此,这样的处理器被按次序提取和译码所限制。
当来自指令超高速缓存的指令丢失或一个支路被误预测时,处理器必须等待或者直至从更高级别的超高速缓存或存储器提取指令块为止,或者直至误预测的支路被解决以及错误路径的执行被复位为止。这样的行为的结果是无关的指令在指令超高速缓存丢失或误预测支路以前和以后,不能并行地被执行,虽然它可以正确地这样做。
多线索处理器,诸如共用资源多线索处理器和芯片上多处理器(MP)的处理器,具有同时处理和执行多个线索的能力。这些处理器处理和执行的线索是互相无关的。例如,这些线索或者来自完全独立的程序,或者来自同一个程序、但是被专门编译来建立互相之间没有相关性的线索的。然而,这些处理器没有同时执行来自同一个程序的、可能具有相关性的不同的线索的能力。多线索处理器的有用性由此被限制。
因此,需要具有同时执行来自同一个程序的、在线索之间可能具有相关性的不同的线索的能力的多线索处理器。
发明概要在本发明的一个实施例中,处理器包括一条执行流水线,同时执行至少部分线索,其中至少一个线索与至少另一个线索相关。处理器也包括检测电路,检测在执行线索时的推测错误。
在另一个实施例中,处理器包括线索管理逻辑,控制来自一个程序的线索的动态建立。
附图简述从下面给出的详细说明和从本发明的实施例的附图将更全面地了解本发明,然而,不应当把本发明限制在所描述的特定的实施例上,而这些实施例只是用于解释和理解。


图1是代表处理器的一个实施例中的某些部件的高级别方框图。
图2是按照本发明的一个实施例的处理器的方框图。
图3是按照本发明的另一个实施例的处理器的方框图。
图4是两个线索的一个例子的流程图。
图5是两个线索的另一个例子的流程图。
图6是四个线索的一个例子的流程图。
图7是显示重叠执行图6的线索的图。
图8是显示按照本发明的一个实施例的单独的追踪缓冲区的方框图。
图9显示一个表示在两个时间处的程序和次序的阵列。
图10是显示图8的追踪缓冲区的一个实施例中的某些部件的方框图。
图11是显示图8的追踪缓冲区的另一个实施例中的某些部件的方框图。
图12是表示图10的追踪缓冲区的指令排队阵列的一个实施例的部分的图。
图13是表示图10的追踪缓冲区的数据和相关性阵列的一个实施例的部分的图。
图14显示了在创建图10的阵列的相关区时使用的修正器寄存器和修改的寄存器的一个实施例。
图15是在创建图13的阵列的相关区时使用的逻辑或门。
图16是显示用来创建图13的阵列的相关区的运行的一个实施例的流程图。
图17是显示按照本发明的一个实施例的其上具有相关性的追踪缓冲区中的特定的寄存器和存储单元的图。
图18是显示图10的追踪缓冲区的输出寄存器文件的一个实施例的部分的图。
图19是显示图10的追踪缓冲区的输入寄存器文件的一个实施例的部分的图。
图20是显示按照本发明的一个实施例的结合图18的输出寄存器文件和图19的输入寄存器文件使用的比较器和重放触发逻辑的方框图。
图21是显示可以借以利用输出寄存器的内容的点的流程图。
图22是显示按照本发明的一个实施例的在图2的存储器指令缓冲器(MOB)中的单独的存储器指令缓冲器的方框图。
图23是表示图22的一个MOB的存储缓存器的一个实施例的部分的图。
图24是表示图22的一个MOB的装载缓存器的一个实施例的部分的图。
图25显示了一个比较器,用于比较装载和存储指令的地址。
图26显示了一个比较器,用于比较存储和装载指令的地址。
图27是表示按照本发明的一个实施例的MOB控制电路和存储缓存器的方框图。
图28是表示按照本发明的一个实施例的MOB控制电路和装载缓存器的方框图。
图29是六个线索的例子的流程图。
图30是在图29的线索中在时间t1的关系的树。
图31是在图29的线索中在时间t2的关系的树,假定线索T4在线索T1退役以前被复位。
图32是在图29的线索中在时间t2的关系的树,假定线索T1在线索T4被复位以前退役。
图33是显示图29的线索中在时间t3的关系的树。
图34是显示五个线索的例子的流程图。
图35是显示图34的线索中在时间t1的关系的树。
图36是显示图34的线索中在时间t2的关系的树。
图37是表示按照图2的处理器的另一个实施例的处理器的方框图。
图38是包括图2的处理器的计算机系统。
优选实施例详细描述A.线索创建和流水线108总览B.关于追踪缓冲区114的细节1.追踪缓冲区114Aa.指令排队阵列202Ab.DAD阵列206A和相关性生成电路212Ac.输出寄存器文件210A和输入寄存器文件208A2.追踪缓冲区114’C.重放序列算法
D.第二级别或最后的退役E.存储器系统1.存储缓存器和装载缓存器2.比较装载和存储地址a.执行装载指令b.执行存储指令c.复位3.重放存储指令4.重放多个装载指令5.装载和存储指令的最后退役F.有关线索管理逻辑和最后的退役逻辑的附加信息G.不带有多穿线的实施例H.附加信息和实施例图1显示了处理器10的某些部件。处理器10包括执行流水线12和在执行流水线12外面的追踪缓冲区14。追踪流水线12可以包括存储器指令缓冲器。在导体18上的指令被提供给执行流水线12,用于执行。指令也通过导体22被提供给追踪缓冲区14。指令可以在执行流水线12中被推测地执行。推测的实例包括时间推测和相关性推测。任意的各种各样的推测可以被涉及到。处理器10包括在追踪缓冲区14中所包括的机制,用于检测推测错误(误推测)和从它们复原。
当检测到误推测时,误推测的指令从追踪缓冲区14通过导体24被提供给执行流水线12,以及在执行流水线12中被重放。如果指令被“重放”,则该指令和所有与该指令有关的的指令被重新执行,虽然不一定同时执行。如果指令被“全部重放”,则该指令和所有的按程序次序跟随在该指令后面的指令被重新执行。程序次序是指令在按顺序的处理器中执行的次序。指令可以完全按程序次序或按多少不同于程序次序的次序通过导体18传递。处理器10可以是按顺序的或不按顺序的处理器。重新执行相关的指令可能导致与相关的指令有相关性的指令被重放。指令的重新执行数目可以通过触发重放的控制事件而被控制。通常,术语执行可以包括原先地执行和重新执行。至少一部分指令的结果通过导体26被提供给追踪缓冲区。最后的退役逻辑34在确保指令被正确地执行,或者原先地或者重新执行之后使追踪缓冲区14中的指令退役。
执行流水线12可以是任意的各种各样的执行流水线以及可以是更大的流水线的一段。执行流水线12可以结合各种各样的处理器一起使用。图2上提供了实例,说明具有执行流水线108的处理器50的部件,以及图3上提供了实例,说明具有执行流水线308的处理器100。在图2的本发明的实施例中,执行流水线108包括寄存器重新命名。在其它的实施例中,执行流水线不包括寄存器重新命名。处理器可以同时地处理多个线索(如图2中的处理器50的情况)或不同时地处理处理多个线索(如图3中的处理器100的情况)。首先将讨论处理器50。
在说明书中对于“一个实施例”的参考是指结合该实施例描述的具体的特性、结构、或特征被包括在本发明的至少一个实施例中。在说明书中各个位置处出现词组“在一个实施例中”不一定都是指同一个实施例。
A.线索创建和流水线108总览指令是通过导体102被提供给指令超高速缓存(I-超高速缓存)104的。译码器106被显示为从I-超高速缓存104接收指令,但另一方面可以在指令到达I-超高速缓存104以前译码这些指令。取决于所选择的内容和实施方案,术语“指令”可以包括宏操作(macro-op)、微操作(uops)、或指令的其它形式。任何的各种指令组通常可包括,但不限于,减小的指令组计算(RISC)或复杂的指令组计算(CISC)指令。而且,译码器106可以把CISC指令译码为RISC指令。来自I-超高速缓存104的指令通过MUX 110被提供给流水线108以及通过导体118被提供给追踪缓冲区114。
跟踪是一个指令组。线索包括跟踪和有关的信号,诸如寄存器值和程序计数器值。
线索管理逻辑124通过经过导体130提供起始计数给程序计数器112A,112B,…,112X(其中X代表程序计数器的号码),而从I-超高速缓存104中的程序或处理过程创建不同的线索。例如,X可以是4,或大于4,或小于4。线索管理逻辑124也通过停止相关的程序计数器而结束线索。线索管理逻辑124可以使得程序计数器然后开始另一个线索。不同的线索部分从I-超高速缓存104被同时读出。
为了确定在程序或处理过程中的哪个部分创建线索,线索管理逻辑124可以通过导体128从译码器106读出指令。线索可以包括由编程器或编译器插入的指令,它明显地区分线索的起始点和结尾点。替换地,线索管理逻辑124可以分析程序和处理过程的指令,以便把提供给I-超高速缓存104的程序或处理过程断开成不同的线索。例如,支路,环路,后向支路,返回,跳跃,过程调用,和函数调用可以是分开线索的良好的点。线索管理逻辑124可以考虑潜在线索的长度、涉及到多少个变量、在接连的线索之间共同的变量数目、以及在考虑何处开始一个线索时的其它因子。线索管理逻辑124可以考虑在确定线索的边界时的程序次序。程序次序是在按顺序的处理器中执行线索和线索内的指令的次序。线索内的指令可以不按顺序被执行(与程序次序不同)。线索基本上可以由流水线108独立地处理。线索管理逻辑124可以包括预测机制,它包括历史表格,以避免作出非最佳选择。例如,线索管理逻辑124可以创建一个线索,然后在以后确定线索实际上不是程序次序的一部分。在这种情况下,如果相同的代码再次遇到,则预测机制可被用来确定是否再次创建相同的线索。线索管理逻辑124可以使用线索的动态创建与来自编译器或编程器的明确的指令提示的使用的组合,以确定在指令中何处创建线索。
动态地创建线索是从不是专门为多线索编写的和编译的程序中创建线索,其中至少一个线索与另一个线索相关。程序可以从包括执行流水线108和线索管理逻辑124的一个芯片起始。动态地创建线索、执行线索、和在执行时检测与校正预测错误,被称为动态多线索。
图4显示了线索T1,它包括条件性后向支路指令。按程序顺序,线索T2在条件性支路指令以后被执行。按时间次序,线索T2在线索T1首先达到条件性支路指令的时间开始被预测地执行。所以,线索T1和T2部分被同时执行。如果线索T2涉及到误预测,则线索T2的受影响的指令被重放。
线索管理逻辑124可以通过导体130监视程序计数器的计数。监视计数的目的是确定线索何时结束。例如,当条件性支路的条件不满足时,如果线索T1的程序计数器被允许继续进行,则它进到线索T2的第一指令。所以,当条件不满足时,线索管理逻辑124停止线索T1的程序计数器。
图5显示了包括函数调用指令的线索T1。按程序顺序,当调用指令到达时,程序计数器跳跃到函数位置以及执行,直至返回指令为止,在这时,程序计数器返回到调用后的指令。按程序顺序,线索T2在返回后的指令处开始。按时间次序,线索T2在线索T1首先达到调用的时间开始被预测地执行。如果线索T2涉及到误预测,则线索T2的受影响的指令被重放。当线索T1的程序计数器达到线索T2的第一指令时,线索T1结束。下面将讨论图5上的装载MX和存储MX指令。
图6显示了线索T1,T2,T3,和T4,它们是一个程序段的一部分。不同的程序计数器产生线索T1,T2,T3,和T4。线索T1包括到点A的指令(函数调用指令),以及然后从点B,到点C(条件性后向支路指令),到点D和再次到点C的指令(环路可以重复几次)。线索T2在按程序顺序时紧接在点A处被调用的函数的返回指令以后的指令处开始。线索T3在按程序顺序时紧接在点C处的条件性后向支路以后的指令处开始,以及继续到点E,到点F,到点G,到点H,和到点I,它是对于紧接在线索T2开始的点A以后的指令的返回指令。线索T4在按程序顺序时紧接在点E处的条件性后向支路以后的指令处开始。
如图7所示,线索T1,T2,T3和T4部分被提取,译码,和同时执行。这些线索被提取,译码和不按顺序地执行,因为程序次序并不被遵循。按时间次序,线索T2,T3和T4分别紧接在点A,C,和E处的指令以后立即开始。垂直虚线表示母子关系。线索T2,T3和T4根据寄存器和/或存储器存储单元中的数据,在确定数据是正确的以前被预测地执行。处理器100具有检测误预测和使得被误预测的指令被重放的机制。结果弄清楚线索T4不是程序次序部分。线索T4可以被执行,直至线索管理逻辑124确定线索T4不是程序次序部分。在这时,线索T4可以被复位,以及在处理器100中保持或处理线索T4的资源可以被解除分配,然后被分配给另一个线索。按程序次序时,线索T1,T2,和T3可以如下地被执行首先线索T1,然后线索T3,再然后线索T2。
参照图2,来自MUX 110的指令被重新命名/分配单元150接收,它提供寄存器文件152中的重新命名的物理寄存器的物理寄存器识别号(PRID)。PRID提供旁路导体126被提供给追踪缓冲区114。分配涉及分配寄存器给指令和分配安排/发送单元156的保留站的项目。一旦操作数对于保留站中的特定的指令已准备好,就把指令发送到执行单元158的一个执行单元(例如,整数,浮点数)或一个存储器执行流水线,它包括地址生成单元(AGU)172,存储器次序缓冲器(MOB)178,和数据超高速缓存176。根据指令,操作数可以从寄存器文件152通过导体168被提供。在本发明的一个实施例下,在线索内的相关的指令可以这样地链接,以使得它们不是不按次序地执行的。然而,来自不同线索的相关的指令可以被同时地提取,译码,以及不按次序地执行。某些线索的执行可以是预测的。
对于高性能,保留站和相关的机制被设计成具有低的指令执行时间和高的带宽发送。执行时间和带宽需求对于可以在保留站中等待的指令的数目加上了限制。通过在流水线108外面放置追踪缓冲区114,大量的指令可提供用于执行/重放,而没有显著地减小流水线108的通过量。在执行流水线108与追踪缓冲区114之间的执行时间的影响可以通过流水线技术而被减小。
执行结果和相关的信息从写回单元162通过导体122(在寄存器的情况下)和通过MUX 192和导体196被写到追踪缓冲区114。结果和相关的信息也可以被写到寄存器单元152和相关的重新排序缓冲器(ROB) 164。一旦指令的结果和信息被写到寄存器单元152和ROB164,指令就按流水线108的次序被退役。这个退役被称为第一级别或初始退役。在第一级别退役时或之前,在安排/发出单元156(包括保留站,寄存器文件152,和ROB 164)中用于退役的指令的资源被解除分配。然而,有关指令的所有需要的细节被保持在追踪缓冲器114和MOB 178,直至最后的退役为止,如下面描述的。
当按程序次序时,在后面的线索与先前的线索之间存在相关性,在后面线索中使用的数据是在先前的线索中产生的。数据可以在先前的线索中通过存储器或非存储器指令被产生。例如,如果在后面的线索中的装载指令具有与在先前的线索中的存储指令系统相同的地址,则后面的线索可以是与先前的线索相关的。如果在后面的线索中的指令涉及在先前的线索中被修正的寄存器,则后面的线索也可以是与先前的线索相关的。同样地,当按重新次序,后面的指令使用由先前的指令产生的数据时,后面的指令是与先前的指令相关的。术语“相关性”也被使用于词组“相关性预测”中。相关性预测的例子是预测在装载指令与先前的存储指令之间没有相关性。地址匹配是用于检验相关性预测错误的技术的一个例子。数据预测的例子是预测寄存器中的数据是正确的数据。寄存器匹配是用于检验数据预测错误的技术的一个例子。
B.关于追踪缓冲区114的细节参照图8,追踪缓冲区114包括追踪缓冲区114A,114B,114C,…,114Y,其中Y代表追踪缓冲区的数目。例如,如果Y=4(即,Y=D),则有4个追踪缓冲区。如果Y小于3,则追踪缓冲区114不包括图8所示的所有的追踪缓冲区。Y可以是与X(程序计数器的数目)相同或与X不同。追踪缓冲区114可以是被划分成各个追踪缓冲区的单个存储器,或实际地分开的追踪缓冲区,或二者的某种组合。
参照图9,在一个实施例中,线索管理逻辑124包括说明线索ID的程序次序(它也是退役次序)的阵列198。在本例中,每个追踪缓冲区具有一个独特的线索ID,或与线索ID的一对一对应表。例如,追踪缓冲区114A被分配以线索ID1,追踪缓冲区114B被分配以线索ID2,等等。线索ID可以是硬连线的或编程的。在一个实施例中,每个程序计数器是与特定的线索ID和追踪缓冲区相联系的(替换地,也可以没有这样的严格的关系)。
图9显示在时间t1和时间t2时线索的退役次序的例子。在本例中,只有四个追踪缓冲区和四个线索ID。在括号中显示了相关的线索号码。根据实施方案,在括号中的线索号码实际上不包括在阵列198中。在时间t1,程序和退役次序是线索T1,T3,和T4,正如图6的例子。在时间t1和时间t2之间,确定线索T4不是按程序次序的。所以,线索T4被复位,留出空位用于追踪缓冲区114D中的线索T5(图上未示出)。线索T5与线索ID4相联系。线索T1退役,留出空位用于追踪缓冲区114A中的线索T6。线索T6与线索ID1相联系。在时间t2,程序和退役次序是线索T3,T2,T5,和T6(如果线索T1在线索T4被复位之前退役,则线索T5和T6将具有不同的线索ID,但程序和退役次序将不改变)。根据所使用的算法,可能是线索T2在阵列198中的线索T3之前起始的,但程序和退役次序是被校正的,正如在时间t1时的阵列198。
正如所提到的,线索的程序次序是线索在按次序的处理器执行的次序。指令的程序次序是指令在按次序的处理器中执行的次序。线索管理逻辑124不一定起始地确定线索的正确的程序次序。然而,线索管理逻辑124实际上确定正确的程序次序。
参照图7,追踪缓冲区114A,114B,…,114Y通过被连接到导体118的导体118A,118B,…,118Y接收指令。在导体118A,118B,…,118Y和导体118之间可以有多路分接电路。替换地,使能信号可以控制哪个追踪缓冲区被激活。再替换地,可以有足够的并行导体来处理并行的事项。追踪缓冲区114A,114B,…,114Y通过被连接到导体120的导体120A,120B,…,120Y提供用于重放的指令和相关的信息给流水线108。应当指出,来自追踪缓冲区114的多个指令可以同时地传送通过导体120和MUX 110,用于重新执行。同时,来自译码器106的多个指令也可以在第一时间内传送通过MUX 110。线索ID和指令ID(instr ID)通过流水线与每个指令相伴随。重放计数也可以与指令相伴随。在装载和存储指令的事例中,装载缓存器ID(LBID)和存储缓存器ID(SBID)也可以与指令相伴随。在一个实施例中,LBID和SBID与每个指令相伴随,虽然LBID和SBID值在不是装载和存储的指令的情况下可以是无意义的。如下面所描述的,PRID或数值也可以与被重新执行的指令相伴随。
追踪缓冲区114A,114B,…,114Y通过被连接到导体126的旁路导体126A,126B,…,126Y从重新命名/分配单元150接收PRID,LBID,和SBID数值。追踪缓冲区114A,114B,…,114Y通过被连接到导体122的导体122A,122B,…,122Y和通过被连接到导体196的导体196A,196B,…,196Y接收写回结果信息和相关的信号。重放信号通过被连接到导体194的导体194A,194B,…,194Y被提供。复接和/或使能电路和/或很大量的并行导体可被使用于导体120,126,122,194和196。追踪缓冲区可以是相同的或多少不同的。
在图10上,追踪缓冲区114A显示追踪缓冲区的第一个实施例。在图11上,追踪缓冲区114A’显示追踪缓冲区的第二个实施例。追踪缓冲区的其它的实施例可包括各种追踪缓冲区114A和114A’或相当不同的结构。
1.追踪缓冲区114A参照图10,追踪缓冲区114A包括指令排队阵列202A,数据和相关性(DAD)阵列206A,输入寄存器文件208A,输出寄存器文件210A,相关性生成电路212A,和控制电路224A。术语“阵列”在广义上打算包括在多个方向上的信息,而不限制于特定的形式。
a.指令排队阵列202A参照图12,下面描述按照本发明的一个实施例的指令排队阵列202A的结构及其与其它部件的交互作用。指令排队阵列202A接收从I-超高速缓存104取得的、作为特定的线索的一部分的指令。在线索内的指令被取得,以及按次序被写入到指令排队阵列202A。作为另一个线索的一部分的指令由指令排队阵列202A在不同的时间被写入到不同的追踪缓冲区的指令队列。指令排队阵列202A包括用于每个指令识别号(instr ID)的各个信息区。不同的实施例可包括多少不同的区和不同的行数。在指令排队阵列202A的实施例中,程序计数器值不被考虑,但可以是在另一个实施例中。指令排队阵列202A和附图上显示的所有其它的部件可包括不同的区,信号,和未显示出的结构。这样的区、信号、和结构因为它们随实施方案而变化,而没有被显示出,本领域技术人员会明白它们,以及它们将使得本技术条件大大地复杂化,并且会扰乱本发明。
指令在追踪缓冲区114A中等待,直至它们最后退役或被丢弃(因为,例如,确定线索是按次序执行程序的一部分)。如果指令排队阵列202A填充满而同时在跟踪时仍旧有还未被执行的指令,则指令没有被追踪缓冲区114或重新命名/分配单元150接收,直至指令最后从指令排队阵列202A退役和一行被解除分配为止。系统100中的各个阵列的项目可通过头部和结尾部指针的移动而被分配和解除分配。
指令排队阵列202A结合以下的代码行来描述I0mul R1,R2→R1I1mul R3,R4→R2I2add R1,R2→R1I3add 10,R1→R4I4store R2→MxI5store R1→My它们是线索内的头六个指令。将会看到,除了追踪缓冲区114A以外的追踪缓冲区在程序次序上比追踪缓冲区114A更早。
“Op Code(运算代码)”区包含与特定的指令有关的运算代码。“Dest(目的)”,“Source 1(源1)”,和“Source 2(源2)”区表示指令的目的地,源1,和源2。“Index for Source1(源1的变址)”区表示在追踪缓冲区114A内包含源的指令项目。例如,instr ID 0的目的地被使用于instr ID 2的源1。所以,把一个0放置在instrID 2的“Index for Source 1”区。instr ID 2的目的地被使用于instr ID 3的源2。所以,把一个2放置在instr ID 3的“Index forSource 2”区。X表示不必关心。
“Valid 1(正确性1)”和“Valid 2(正确性2)”区是当instr ID的相应的源操作数已经由来自追踪缓冲区114A的线索以外的指令产生时被设置为第一值(例如,逻辑0)的比特和当instr ID的相应的源操作数已经由线索内的指令产生时被设置为第二值(例如,逻辑1)的比特。Instr ID 0的源1(R1)是在指令排队阵列202A中跟踪以外产生的。因此,instr ID 0的valid 1(正确性1)是逻辑0。Instr ID3的源2是来自Instr ID 2的目的地。因此,Instr ID 3的valid 2是逻辑1。
指令13涉及把R1加到常数“10”上。常数可以与指令一起存储在专门的寄存器(未示出),在源1区,或通过某些其它的机制。在图12上,显示了在instr ID 3的源1区中的X(不必关心)。替换地,某些指示符可被放置在源1区。
“存储缓存器(SBID)”区保存与在存储缓存器中的存储指令有关的SBID,如下面描述的。“装载缓存器(LBID)”区保存与在存储缓存器中的装载指令有关的LBID项目,如下面描述的。SBID和LBID值由重新命名/分配单元150分配,通过旁路导体126被写入到指令排队阵列中。线索ID号码可被包括在指令排队阵列202A中,但并不需要,因为是隐含的。
b.DAD阵列206A和相关性生成电路212A参照图13,DAD阵列206A的一个实施例包括“instr ID(指令ID)”项目(行),它以一一对应的方式相应于指令排队阵列202A的指令ID项目。事实上,指令排队阵列202A和DAD指令206A可以是同一个指令的不同部分。然而,在某些实施例中,对于指令排队阵列202A和DAD阵列206A,有不同的读数端口。
DAD阵列206A包括“Value(数值)or PRID”区,包含由指令产生的数值或在寄存器文件152中的PRID。该数值通过写回单元162和写回总线122和196从执行单元被写入到追踪缓冲器114A。“Status(状态)”区,可以是2个比特,表示“Value or PRID”区包含一个“Value(数值)”还是一个“PRID”。在一个实施例中,“Valueor PRID”区既不保存正确性“数值”也不保存正确性“PRID”。“ReplayCount(重放计数)”区,唯一地表示指令派送,每次当同一个instr ID的指令在流水线108中被重放时,被加增量。在一个实施例中,有可能一个指令可以在流水线108内被同时重放一次以上。在这种情况下,在一个实施例中,只把与最高的“重放计数”有关的信息写回到DAD阵列206A中。
“Dependency(相关性)区”包括一个用于每个逻辑寄存器的比特。在图13上,为简单起见,只显示了四个逻辑寄存器(R1,R2,R3,和R4)。然而,数目可以大得多。在本例中,相关性区项目被设置为1,表示在输入到跟踪的值与指令项目之间存在数据相关性链,以及如果没有相关性,则设置为0。相关性区项目表示如果接收到一个输入值(例如,当检测到数值误预测时),在跟踪中的哪个指令需要被执行。
当指令被提取,译码,和写入到追踪缓冲器114A时,相关性比特被顺序地计算,然后被写入到DAD阵列206A中。相关性比特可以在确定是否重放一个指令之前产生。图13上的相关性比特是对于如上面在节B.1.a中所述的六个指令I0-I5的。
相关性区可以通过机械方法创建。在描述一个这样的方法之前,将以更直观的方式解释这种创建。
ⅰ.直观方式指令I0的结果只取决于寄存器R1和R2。所以把1放置在instrID 0(它保存有关指令I0的信息)的R1和R2列,以及把0放置在R3和R4列。
指令I1的结果只取决于寄存器R3和R4。所以把0放置在instrID 1的R1和R2列,以及把1放置在R3和R4列。
指令I2的结果直接取决于分别在指令I0和I1中产生的寄存器R1和R2。在指令I0中,R1取决于在跟踪起始时的R1和R2值。在指令I2中,R2取决于在跟踪起始时的R3和R4值。所以,指令I2间接地取决于在跟踪起始时的R1-R4值,以及把1放置在instr ID 2的R1-R4列。
指令I3的结果直接取决于在指令I2中产生的寄存器R1。所以,指令I3间接地取决于在跟踪起始时的R1-R4值,因为指令I2取决于这些值,以及把1放置在instr ID 3的R1-R4列。
指令I4的结果直接取决于在指令I1中产生的寄存器R2。R2取决于在跟踪起始时的R3和R4值。所以,把0放置在instr ID 4的R1和R2列,以及把1放置在R3和R4列。
指令I5的结果直接取决于在指令I2中产生的寄存器R1,它取决于在跟踪起始时的R1-R4值。所以,把1放置在instr ID 5的R1-R4列。
ⅱ.机械方法下面是可被使用来产生按照本发明的一个实施例的相关性区的寄存器和算法。参照图14,相关性产生电路212A包含每个逻辑寄存器一个的临时寄存器230,232,234和236,加上一个附加的临时寄存器240。临时寄存器230,232,234和236包含用于逻辑寄存器R1,R2,R3,R4的修正器。修正的寄存器240包含一组比特,它表示哪个逻辑寄存器要被追踪缓冲区内的指令修正。寄存器230,232,234,236和240在每次新的指令被写入到追踪缓冲区时被更新。在寄存器之间的边界或多或少地是任意的。例如,它们可以是在一个组合的寄存器中。
对于每个逻辑寄存器,提供一个追踪缓冲区地址寄存器,它指向追踪缓冲区114A中的最后指令,以便修正逻辑寄存器。修正的比特和最后的修正器地址被用来计算对于要被写入到追踪缓冲区114A中的下一个指令的相关性比特。
应当指出,正如这里所使用的,修正一个寄存器仅仅是指把一个数值写入到寄存器中。它并不一定是指寄存器的内容不同于指令的结果。例如,如果R1和R2的内容进行相乘(如它们在指令I0中那样),以及把结果写入到寄存器R1中,则R1的内容不一定不同于指令I0的结果。例如,如果在指令以前,R1的内容是“0”或R2的内容是“1”,则在指令后的R1的内容将不是不同的。
在图16上,流程图250表示一种算法,它作用于指令的每个源操作数(例如,源1和源2),以产生DAD阵列206A的相关性区。在步骤252,确定在寄存器240中是否设置了相关的比特。如在步骤254所述的,如果寄存器240中的比特没有被设置,则与寄存器有关的相关性区中的比特被设置为逻辑1。如在步骤258所述的,如果寄存器240中的比特被设置,则通过使用从用于有关的寄存器的修正器寄存器(230,232,234和236)产生的变址,把与寄存器有关的相关性区中的比特设置为逻辑1。接着,如在步骤262所述的,通过使用逻辑“或”运算,把源相关性比特与当前的指令相关性比特合并。这样的逻辑“或”运算由图15的或门244所说明的(其中乘数比特呈现在输入端处)。在执行图16的算法时,所指的修正的寄存器和修正器是紧接在执行指令之前存在的那些值。
对于I0,在指令I0之前,寄存器240具有对于R1,R2,R3,和R4的逻辑0,以及寄存器230,232,234和236的值是X(不必关心)。在步骤252,在寄存器240中对于R1和R2的修正的比特,每个是0。所以,在步骤254,对于R1和R2的相关性区,每个被设置为在DAD阵列206A的instr ID 0的行中的1。寄存器R3和R4没有涉及到,以及保持为在instr ID 0的行中的0。指令I0修改寄存器R1。所以,把0放置在寄存器230中,表示指令I0是最近的修改寄存器R1的指令。在寄存器232,234,和236中的值保持为X(不必关心)。寄存器240的R1比特被设置为1,表示R1已经被追踪缓冲区的指令修改。
指令I1的相关性区是以与指令I0的相同的方式被产生的。修正的寄存器240的R1逻辑寄存器列仍旧被设置为1。把逻辑1放置在修正的寄存器240的R2列。寄存器232中的1代表指令I1。
对于指令I2,在指令I2之前,在步骤252,在寄存器240中对于R1和R2的修正的比特,每个是逻辑1(即,设置)。在步骤258,对于R1(230)和R2(232)的修正的寄存器,紧接在指令I2之前,被用作为变址。寄存器230包含用于指令I0的一个0。在DAD阵列206A的instr ID 0中用于指令I0的相关性区是0011。寄存器232包含用于指令I1的一个1。在instr ID 1中用于指令I1的相关性区是1100。在步骤262,0011和1100的逻辑“或”的结果是1111。所以,把1111放置在DAD阵列206A的用于instr ID 2的相关性区。R1被指令I2修改。然而,一个1已经是在用于寄存器R1的寄存器240中。把一个2放置在寄存器230中,表示指令I3是最近的修改寄存器R1的指令。
指令I3的相关性区是以与指令I2的相同的方式被产生的。把逻辑1加到修正的寄存器240的R4列,以及把代表指令I3的一个3放置在寄存器236中。逻辑“或”产生1111。
对于指令I4,在指令I4之前,在步骤252,寄存器240中对于R2的修正的比特被设置为1。在步骤258,对于R2(232)的修正的寄存器,紧接在指令I4之前,被用作为变址。寄存器232包含用于指令I1的一个1。在DAD阵列206A的instr ID 1中用于指令I1的相关性区是1100。在步骤262,1100(来自instr ID 1的源1)和0000(没有源2)的逻辑“或”的结果是1100。所以,把1100放置在DAD阵列206A的用于instr ID 4行的相关性区。
指令I5的相关性区是以与指令I4的相同的方式被产生的。指令I5和I6修改外部存储器的存储单元,以及不会引起寄存器230,232,234,236,或240的变化。
相关性信息可以被安排/发出单元156使用,或安排/发出单元156可以仅仅得出它自己的相关性信息。
在重放时,可以有不同的方式来从追踪缓冲区114A发出一系列指令。一种方式是顺序地读追踪缓冲区,提取那些使得相关性比特被设置的指令,和发送它们用于重放。然而,零可能具有在流水线中产生泡沫的作用。另一种方法是通过在发送用于执行/重放的指令以前合并逻辑而使得泡沫除去。参照图17,另一种方法涉及某些附加的硬件,包括用于每个逻辑寄存器的阵列268。阵列268包括取决于寄存器R1的指令的instr ID值。阵列268中的数值用作为指针,指向指令排队阵列202A中的全部instr ID项目。这允许非常快地从指令缓冲器读数。一次读出一个指令块(或许2或4)。追踪缓冲区114A可以是多端口的,以及具有四个译码器,把从寄存器阵列得到的这些变址的每一个变址传送到译码器,以及在一个周期内读出指令I0,I2,I3,和I5。寄存器R1阵列可以在重放开始以前,在产生相关性区时被汇编。间接的程度使得易于实行高的带宽重放。
c.输出寄存器文件210A和输入寄存器文件208A追踪缓冲区114包括检测电路,用于检测某些预测错误。按照本发明的一个实施例,每个追踪缓冲器具有输出寄存器文件,它保存相关的线索的寄存器内容,以及输入寄存器文件,接收按程序次序紧接在先前的线索的寄存器内容。寄存器内容是逻辑寄存器的内容或状态。输出寄存器文件的内容经常被更新,或许是在每次寄存器中有变化时被更新。输出寄存器文件的内容只在比较以后才被更新,如下面所描述的。
图18和19显示了输出寄存器文件208A(在追踪缓冲区114A中)和输入寄存器文件208B(在追踪缓冲区114B中)的实施例,虽然其它的实施例也可被使用。输出寄存器文件208A和输入寄存器文件208B包括一个Value(数值)或PRID区和一个状态区。状态区表示在Value或PRID区中保存一个正确性数值还是保存一个正确性PRID。在一个实施例中,或者有一个正确性数值,或者有一个正确性PRID。在另一个实施例中,可能二者都没有,在这种情况下,与输入寄存器文件有关的指令会等待其中的一个。
应当指出,上述的本例中的指令I0涉及寄存器R1和R2,二者都不是先前的、在包括指令10的线索内的一个指令的目的地。然而,对于R1和R2的数值或PRID是从输入寄存器文件208A可提供的,被使用于执行指令10。
参照图20,比较器280B把对于当前线索的输入寄存器文件208B(在追踪缓冲区114B中的)的内容与对于按程序次序紧接在以前的线索的输出寄存器文件210A(在追踪缓冲区114A中的)的内容进行比较。该比较可以在紧接在先前的线索的执行结束时或在原先执行先前的线索期间进行。该比较也可以在先前的线索退役结束时进行。在一个实施例中,该比较只在先前的线索退役结束时进行。
各种事件可以触发由比较器280B进行的比较。进行比较以便检测预测错误。如果在输入和输出寄存器文件之间有差别,则紧接地前面的线索的一个或多个输出寄存器的值发生改变。作为应答,输入寄存器文件208B被更新,以及重放触发逻辑284B使得受影响的指令连同改变的寄存器值被重放。相关性区可以被重放触发逻辑284B使用。不保证改变的数值是最后的正确的值(即,在纯粹按次序的处理器中产生的寄存器值)。指令可能需要被再次重放,或许几次。
在一个实施例中,用于线索的检测电路包括输出寄存器文件、输入寄存器文件、比较器、和有关的控制电路,以便检测被保存在包括输入寄存器文件的追踪缓冲区中的指令中某些预测错误。在另一个实施例中,检测电路可包括或多或少不同的电路。
例如,参照图21,线索T2是当前的线索,以及是与追踪缓冲区114B有关的。线索T1是紧接在线索T2以前的线索。以及是与追踪缓冲区114A有关的。线索T1包括函数调用,函数,和从函数调用的返回。线索T2的执行紧接在函数调用以后开始。在函数调用时存在的输出寄存器210A的内容被复制到输入寄存器文件208B中。线索T2的指令根据在输入寄存器文件208B中的寄存器内容被预测地执行。在返回指令时,由比较器280B把输入寄存器文件208B的内容与输出寄存器文件210A的内容进行比较。如果有差别,则输入寄存器文件208B被更新,以及在线索T2中受影响的指令被重放。该比较也可以在一个或多个中间的时间进行。这可以有助于通过更均匀地分布指令的重放而防止瓶颈现象,但如果输出寄存器文件内容在函数期间改变一次以上,这可导致附加的重放。在输出寄存器文件恒定地改变的情况下,可能希望有一个中间的缓冲器,它接收输出寄存器文件210A的内容。然后,可以在中间的缓冲器与输入寄存器文件208B的内容之间进行比较。
如图8和10所示,寄存器内容通过导体216在输出寄存器文件与输入寄存器文件之间传送。导体216连接每个输入寄存器文件与每个追踪缓冲区的输出寄存器文件,它保存对于紧接在先前的线索的跟踪。如果它可保证程序次序总是遵循特定的追踪缓冲区次序,则对于导体216的配置可以相当简单。输出和输入寄存器文件可以由图10和11所示的控制电路224A控制。
因为输出和输入寄存器文件将提供一个数值或一个PRID,所以,在接收输入寄存器文件中的内容与能够通过使用来自输入寄存器文件的寄存器作为源操作数来执行指令之间有非常小的执行时间。如果一个数值是不可提供的,则可以使用寄存器文件152的PRID在流水线108上执行。
可以期望,许多指令将被重放几次,因为正确的源操作数在各种线索的寄存器文件中以不同方式得到。然而,也可以期望,对于许多程序,大量的指令将完全不需要被重放或需要重放相当少的次数,导致在每单位时间内正确执行的指令上很大的增加,和在运行一个程序所需要的总的时间的减小。
2.追踪缓冲区114’参照图11,追踪缓冲区114A’类似于追踪缓冲区114(图10)。然而,在追踪缓冲区114A’中,相关性区是在决定指令是要被重放以后在相关性产生和译码电路218A中产生的。虽然这可能造成在重放时某些起始操作时间,如果用于重放的指令的发出和相关性的确定是以流水线方式执行的,则一旦处理开始就可以几乎没有附加的执行时间。
在一个实施例中,相关性产生和译码电路218A值保存一个区用于相关性信息。(在图13上,有四个区。)该相同的区可被复用。例如,在重放与寄存器R1有关的指令期间,该区可被使用来列出与寄存器R1有关的指令。在重放与寄存器R2有关的指令期间,该同一个区可被使用来列出与寄存器R2等有关的指令。相关性产生和译码电路218A可包括仅仅一个修正器区和一个修正器寄存器。(在图14上,有四个。)替换地,相关性产生和译码电路218A可包括多个相关性区和寄存器。相关性产生和译码电路218A可以一次只对于几个指令确定相关性。
数据阵列214A包括对于每个instr ID项目的数值或PRID区、状态比特区、和重放计数区(如在图10和13的DAD阵列206A中那样)。替换地,数据阵列214A的内容可被放置在相关性产生和译码电路218A中使得数据阵列214A不必要。为什么分开地保持数据阵列214A和相关性产生和译码电路218A可能是有利的,这有两个理由。首先,它们可能涉及不同的读数端口。其次,在一个实施例中,相关性产生和译码电路218A没有像指令排队阵列202A和数据阵列214A那么多的行。换句话说,在一个实施例中,相关性产生和译码电路218A复用这些行,就像它可以复用相关性区那样。当然有许多可能性。
正如下面更详细地描述的,M0B 178通知装载指令要在何时通过导体194被重放。具有相关性区的阵列(像用于图13的R1的那样)可以被产生来列出取决于要被重放的装载指令的指令。然而,对于装载指令,相关指令的列表与装载指令一起开始,而不是如在寄存器的情况下与追踪缓冲区中的第一指令开始。对于装载指令的相关性区可以处在相关性产生和译码电路218A中(图11)。(当然,对于其它跟踪的装载指令将从其它追踪缓冲区重放。)在一个实施例中,相关性产生和译码电路218A被使用于对于装载指令和寄存器的相关性区。同一个区可被使用于二者。在另一个实施例中,对于寄存器的相关性区是处在DAD阵列206A中以及对于装载的相关性区是处在相关性产生和译码电路218A中。
在再一个实施例中,装载指令全部被重放(即,在装载后的所有指令被重新执行),以使得不需要相关性区。
C.重放序列算法当重放触发逻辑(诸如触发触发逻辑284B)确定源操作数(或其它输入值)已被误预测时,它触发相应的追踪缓冲区(如追踪缓冲区114B),以便快速传送那些直接或间接取决于在流水线108上要被重放的误预测的源操作数的指令。直接或间接有关的指令可以从追踪缓冲区中的DAD阵列的相关性区或通过图13所示的另一个阵列被识别。
识别的指令从追踪缓冲区被快速传送,用于按次序执行在追踪缓冲区(它是程序次序)中存在的指令。例如,在instr ID0项目中的指令在instr ID1项目中的指令之前或与它相同的时间被快速传送。然而,指令可以在安排/发出单元156的控制下不按次序地执行,正如在任何的不按次序的处理器中那样。控制比特被附属在从追踪缓冲区快速传送的指令上,以便向重新命名/分配单元150表示是否(1)就像寄存器重新命名,(2)旁路在重新命名/分配单元150中的重新命名查找表,而使用来自相应的追踪缓冲区的PRID,或(3)完全旁路重新命名,以及使用来自DAD阵列的数值,就好像它是指令1中的常数操作数那样。
正如结合图8所解释的,“Valid 1(正确性1)”和“Valid 2(正确性2)”区是当instr ID的相应的源操作数已经由来自追踪缓冲区114A的线索以外的指令(例如,的目的地)产生时,被设置为第一值(例如,逻辑0)的比特和当instr ID的源操作数已经由线索内的指令产生时,被设置为第二值(例如,逻辑1)的比特。从追踪缓冲区114A快速传送的重放的指令可以使得它的源操作数被如下地确定(1)正确性比特1如果在指令排队阵列202A这的正确性比特被设置为逻辑1,则源操作数被使用来读出相应的数值或DAD阵列206A中的PRID。如果该数值比特和DAD阵列状态区的PRID比特都不正确,则这意味着源操作数寄存器还没有被重新命名。在这种情况下,指令连同数值和具有逻辑0值的PRID状态比特通过导体120和MUX110被快速传送,允许重新命名/分配单元150执行别名查找表(寄存器重新命名),如它通常执行的那样。如果PRID或数值是正确的,则它连同指令一起通过导体120和MUX 110传送到重新命名/分配单元150,它响应于此旁路重新命名级。
(2)正确性比特0如果源操作数的正确性比特被设置为逻辑0,则输入源操作数来自于追踪缓冲区以外。源寄存器名字被使用来进入输入寄存器文件208A。来自输入寄存器文件208A的数值或PRID比特连同指令一起传送到重新命名/分配单元150,它响应于此旁路重新命名级。
对于每个快速传送的指令,不管正确性比特是0或1,在DAD阵列206A中的数值和PRID状态区比特都被复位到或保持在逻辑0。这达到两个目的。首先,它确保在PRID被复制到来自重新命名级的项目之前快速传送的以后的相关指令将被允许从重新命名别名表中重新命名,避免使用来自追踪缓冲区114A的陈旧的PRID。其次,它也确保指令在最后的执行事例被写回以前不退役,所以,允许指令只在所有的数据误预测被校正时才退役。
D.第二级别或最后的退役当对于所有以前的线索的所有指令都已退役和属于指令的所有重放事件已服务时,一个指令最后从追踪缓冲区114退役。换句话说,当可以确保指令已经用正确的源操作数执行时,一个指令最后被退役。线索按次序退役。例如,在线索X中的一个指令在所有的先前的线索都已退役(即,所有的先前的线索的指令都已退役)以前不能退役。线索内的指令按次序退役,虽然已经准备好退役的指令可以同时退役。
最后的退役由最后退役逻辑134控制。在本发明的一个实施例中,最后退役包括(1)把结果提交给按次序寄存器文件;(2)服务中断,异常,和/或支路误预测;(3)解除分配追踪缓冲区和MOB 178资源项目;和(4)通知MOB把存储标志为退役,以及把它们发送到存储器。解除分配项目可以涉及移动一个标题指针。正如下面所描述的,在MOB 178中的存储指令在确定相关的数据被复制到数据超高速缓存176或其它存储器以前不被解除分配。
有关MOB 178中的装载和存储指令的最后退役的细节在下面描述。
E.存储器系统图22显示,图2的MOB 178的一个实施例包括MOB 178A,178B,…。178Y,其中Y代表MOB的数目,它与追踪缓冲区114的数目一致。MOB178A,178B,…。178Y,保存分布在追踪缓冲区114A,114B,…,114Y中的装载和存储指令的副本。装载指令被保存在装载缓存器182A,182B,…。182Y中。存储指令被保存在存储缓存器184A,184B,…,184Y中。导体292代表载送信号到/来自MOB 178的各种导体。重放导体194把信号从MOB 178提供到追踪缓冲区114,提醒追踪缓冲区114一个装载指令应当被重放。控制电路302执行各种控制功能。
1.存储缓存器和装载缓存器图23显示了存储缓存器184A的一个实施例,它代表存储缓存器184B,…,184Y。各种其它的实施例可以被使用。存储缓存器184A包括用于成行的存储缓存器项目的各个区。每个项目由存储缓存器ID(SBID)标识。当存储指令第一次被提取和执行、但不是重放时,重新命名/分配单元150分配一个SBID项目给每个存储指令。存储指令具有相同的SBID值,直至最后的退役为止。例如,在图23上,项目SBID 0被分配用于指令存储0。项目SBID 1被分配用于指令存储1,等等。图23上显示了保存一个“store LBID(保存SBID)”数值的LBID区,如下面描述的。在一个实施例中,当指令排队阵列202A的项目(图12)保存一个存储指令时,指令排队阵列202A的SBID区保存SBID,该SBID标识在保存存储指令的存储缓存器184A中的项目,以及LBID区保存存储LBID,如果有一个的话,用于该存储指令。SBID和存储LBID通过流水线108与存储指令相伴随。在这个实施例中,LBID区不一定也被包括在存储缓存器184A中。
Instr ID区保存在指令排队阵列202A中的存储指令的指令ID。线索缓冲器ID在存储缓存器184A和追踪缓冲区114A中是隐含的。运算代码区保存存储指令的运算代码。存储地址区保存存储指令所指向的地址。在所示的实施例中,地址由AGU 172产生。SB地址正确性区包括一个比特,表示存储地址是否正确的地址。数据区保存要被存储的数据。数据正确性区包括一个比特,表示数据是否正确。可以使用分开的地址和数据正确性比特,因为正确的地址可以在与正确的数据的不同的时间到达。地址和数据都在存储指令被执行以前到达。在一个实施例中,数据被包括作为指令的一部分。退役区包括一个比特,当最后的退役逻辑134表示存储指令应当退役时被设置,以及当从存储器接收到关于存储到存储器已完成的确认时被复位。下面讨论装载和存储的退役。重放计数区包括重放计数的数目(以及它类似于图13的DAD阵列206A的重放计数区)。重放计数区不是必须的。在一个实施例中,存储指令一次只被重放一次,以及没有重放计数区。
图24显示了装载缓存器182A的一个实施例,它代表装载缓存器182B,…,182Y。各种其它的实施例可以被使用。装载缓存器182A包括用于成行的装载缓存器项目的各个区。每个项目由装载缓存器ID(LBID)标识。当装载指令第一次被提取和执行、但不是重放时,重新命名/分配单元150分配一个LBID项目给每个装载指令。装载指令具有相同的LBID值,直至最后的退役为止。例如,在图24上,项目LBID 0被分配用于指令装载0。项目LBID 1被分配用于指令装载1,等等。(LBID项目号码和SBID区可以被称为MOB ID)。图24上显示了保存一个“load SBID(装载SBID)”数值的SBID区,如下面描述的。在一个实施例中,当指令排队阵列202A的项目(图12)保存一个装载指令时,指令排队阵列202A的LBID区保存LBID,该LBID标识在保存装载指令的装载缓存器182A中的项目,以及SBID区保存装载SBID,如果有一个的话,用于该存储指令。LBID和装载SBID通过流水线108与装载指令相伴随。在这个实施例中,SBID区不一定也被包括在存储缓存器182A中。
Instr ID区保存在指令排队阵列202A中的装载指令的指令ID。线索缓冲器ID在装载缓存器182A和追踪缓冲区114A中是隐含的。运算代码区保存装载指令的运算代码。装载地址区保存装载指令进行装载的地址。项目正确性区包括一个比特,表示项目被正确的装载指令占用。在所示的实施例中,地址正确性区没有被包括在内,因为地址已经由AGU 172产生。PRID区保存来自寄存器文件152的PRID,它表示在寄存器文件152中的装载指令的目的地。SB Hit(击中),SBID,线索ID,和重放计数区(如果有一个的话)可被看作为状态区的一部分,以及在下面结合存储指令的执行来描述。
在存储和装载指令首先被重新命名/分配单元150接收时,用于存储和装载指令的项目被分配在存储缓存器184和装载缓存器182中,以及用于接收装载的数值的寄存器的项目被分配在寄存器文件150和ROB 164中。执行项目不受到第一级别退役,但像追踪缓冲区114中项目那样,保持所分配的,直至最后退役为止。因此,项目在重放时不被解除分配。如果存储或装载缓存器已充满,则来自I-超高速缓存104的存储或装载指令将不传递通过重新命名/分配单元150,直至一个项目被释放为止。然而,从装载缓存器重新执行的装载或存储指令将传递通过重新命名/分配单元150。
2.比较装载和存储地址参照图5,按程序次序,在线索T1中的存储MX在线索T2中的装载MX被执行以前被执行。然而,由于同时执行,按时间次序,存储MX可以在装载MX之前或之后被执行。如果存储MX按时间次序在装载MX之前被执行,则装载MX的预测执行对于存储MX将是正确的次序。如果按程序次序在存储MX之前的所有指令已经退役,则可以确信装载MX将从存储器存储单元MX装载正确的数值。如果线索被按次序的处理器执行,则正确的数值是已被装载的数值。如果在按程序次序在存储MX以前不是所有的指令都已经退役,则总有一个机会用于存储MX的数据是不正确的。
相反地,如果存储MX在按时间次序在装载MX以后被执行,则装载MX的预测执行相对于存储MX将不是正确的次序,以及不能确信装载MX将装载正确的数值。只是由于巧合正确的数值是在存储器存储单元MX中(或存储缓存器项目的数据区保存存储MX,直至存储MX最后退役为止)。为确保执行的最终的正确性,MOB 178包括各种机制确保在线索之间的存储器数据相干性。
a.执行装载指令在装载指令被执行以前,把它的地址与存储指令的地址进行比较,以便确定哪个存储指令(如果有的话)是最接近的早先的匹配存储指令(CEMSI)。“匹配”是指具有与装载指令相同的地址。“早先”是指CEMSI在按程序次序比装载指令更早的。“最接近”是指在CEMSI与要被执行的装载指令之间没有其它的匹配存储指令。如果只有一个早先的匹配存储指令,则它是CEMSI。
如果有一个CEMSI,则装载指令从CEMSI的数据区读出它的数据。如果没有CEMSI,则装载指令从存储器(诸如,数据超高速缓存176,L2超高速缓存,或主存储器)取出它的数据。来自存储缓存器184或存储器的数据传送通过MUX 192,以及被写入到由线索ID和instr ID表示的追踪缓冲区114中的项目。数据也可以被写入到由PRID表示的寄存器文件152中的寄存器。数据也可以根据超高速缓存法则被存储到数据超高速缓存176中(例如,写回,写入等等)。MUX192是一个旁路,因为它可以旁路存储器,诸如,数据超高速缓存176,L2超高速缓存,或主存储器。
在一个实施例中,不同的比较器与每个存储缓存器184的每个项目相联系,以便进行在要被执行的装载的地址和存储指令的地址之间的比较。图25上的比较器是一个例子,它接收在存储缓存器184A中的项目SBID 1的装载指令地址和存储地址。导体322以及来自其它比较器的输出导体被连接到MOB控制电路302。
装载SBID指向相对于要被执行的装载指令的最接近的早先存储指令(CESI)的LBID。CESI处在具有与装载指令相同的线索ID的存储缓存器中。如果有一个CEMSI,则它或者是CESI,或者按程序次序比CESI早。重新命名/分配单元150跟踪在程序中存储和装载指令的次序,以及提供SBID和LBID数值。它们开通过导体126被写入到追踪缓冲区114。在一个实施例中,如果相对于装载指令没有CESI,则没有与该指令有关的装载SBID。这是在追踪缓冲器中第一存储器指令是装载时发生。各种方法可被使用来处理这种情形,包括重新命名/分配单元150发送某些信号以表示没有正确的装载SBID。装载包装比特可被使用于这个目的,在下面描述。
考虑按以下的程序次序的存储和装载指令存储0存储1装载0存储2装载1存储3存储4
装载2在LBID区中的存储LBID值被显示为在存储缓存器182A中。在SBID区中的装载SBID值被显示为在装载缓存器184A中。例如,LBID项目1的SBID区中的2表示在存储缓存器184A中的项目SBID 2处的存储指令保存相对于LBID项目1中的装载指令的CESI。指令存储0,存储1,存储2,和装载0是比装载1老的,或早的。指令存储3,存储4,和装载2是比装载1年轻的,或迟的。
控制电路302可以有多种方法确定哪个存储指令(如果有的话)是CEMSI。这些方法的例子结合图27进行讨论,其中存储缓存器184A,184B,184C,和184D是在MOB 178中唯一的存储缓存器,它们分别与线索A,B,C和D有关。假定程序次序是线索A,然后线索B,然后线索C,然后线索D。在本例中,要被执行的装载指令处在装载缓存器182C中。有一个CESI,它处在存储缓存器184C中。
导体342,344,346,和348是各种比较器的输出导体。导体362,364,366,和368提供控制信号,它受到比较器能够执行比较。在不同的实施例中,控制电路302使能(1)用于每个存储缓存器中所有的项目的比较器,(2)只有那些处在具有与装载指令的线索ID相同的线索ID、或按程序次序比装载指令的线索ID早的线索ID的存储缓存器中的比较器,或(3)只有那些与按程序次序比装载指令早的项目有关的比较器。
匹配确定逻辑356确定哪个存储指令(如果有的话)是CEMSI。在图27上,在存储缓存器184C的上面部分中的存储MX指令是CEMSI。如果该存储MX指令不处在存储缓存器184C中,则CEMSI是在存储缓存器184B中的存储MX指令。
在匹配确定逻辑356正在确定是否有CEMSI的同时,如果没有CEMSI,则查找表可以在数据超高速缓存176(和其它的存储器)中准备好。匹配确定逻辑356包括数据路径控制逻辑390,它在导体370上提供信号,来控制MUX 192是否从存储器或存储缓存器传送数据。
在一个方法中,由MOB控制电路302作出两个优先权决定。一个可以确定存储缓存器内的存储指令的优先权。另一个可以确定存储缓存器的优先权。这些决定可以是任意次序的。载送链结构可被使用来确定存储缓存器内的优先权。例如,在一个实施例中,对于与具有与装载指令相同的线索ID的存储缓存器不同的每个存储缓存器,确定哪个匹配存储指令(如果有的话)是按程序次序最年轻的。对于具有与装载指令相同的线索ID的存储缓存器,确定哪个匹配存储指令(如果有的话)是按程序次序最接近于(包括等于)CESI的。然后,确定在具有匹配指令的那些存储缓存器中哪个存储缓存器具有按程序次序最接近于装载指令的线索ID的线索ID。
存储缓存器184可以是圆形阵列,每个具有头和尾。起始地,带有较大的SBID值的存储指令是较年轻的。然而,随着存储项目被解除分配和被分配,尾部将实际上包围在内,以使得头部指向于比尾部指向更高的SBID项目。在一个实施例中,当尾部从最高的变到最低SBID值时,包括一切的比特被系住,以及被提供给最接近的匹配确定逻辑356。
b.执行存储指令当存储指令被执行时,它的多种与装载指令的多种进行比较,以确定按程序次序处在后面的(来自同一个或更年轻的线索的)哪个装载指令(如果有的话)具有与存储指令相同的地址。由存储SBID指出的最接近的后面的装载指令(CLLI)表示可以被考虑的最早的装载指令。
在一个实施例中,不同的比较器与每个装载缓存器182的每个项目相联系,以便进行那些比较。比较器之一是比较器324,如图26所示。仅仅作为一个例子,比较器324是与装载缓存器182A的项目LBID 1相联系的。比较器324在一个输入端接收存储指令的地址,以及在另一个输入端接收在装载缓存器182A中的项目LBID 1的装载指令地址。在输出导体326上的信号表示两个地址是否相同。导体326以及来自其它比较器的输出导体被连接到MOB控制电路302。比较器(例如,比较器324)也可以比较存储指令的状态比特与装载缓存器中的状态比特,如下面描述的。
图28类似于图27。然而,在图28上,在装载缓存器182A-182D中的装载指令地址与要被执行的存储指令的地址进行比较,以及匹配确定逻辑356确定是否重放装载指令。在一个实施例中,匹配确定逻辑包括重放触发逻辑394,它在导体194上提供信号,向追踪缓冲器表示哪个装载指令是要被重放的。在一个实施例中,匹配确定逻辑356考虑装载指令与存储指令从CLLI开始时的匹配。可以使用不同的算法。线索管理逻辑124指出那些按程序次序比正在被执行的存储指令的线索ID较后面的线索ID。在一个实施例中,使得所有的比较器能够工作。在另一个实施例中,只使得在具有等于或按程序次序迟于装载指令线索ID的线索ID的装载缓存器中的导体能够工作。在再一个实施例中,只使得在与CLLI和后面的指令有关的装载缓存器中的导体能够起作用。所考虑的线索可以在确定装载缓存器内的哪个装载指令按程序次序迟于存储指令时的期间内,之前,或之后,被确定。
在一个实施例中,用来在执行装载指令时检测某些预测错误的检测电路包括与装载缓存器有关的比较器,部分的匹配确定逻辑356,和相关的控制电路。在另一个实施例中,检测电路可包括多少不同的电路。不必要求用来检测预测错误的检测电路处在执行流水线中。不同的匹配确定逻辑可以结合数据路径控制逻辑和重放触发逻辑一起被使用。
ⅰ.其中有地址匹配的情形在确定是否重放时,考虑那些其中有地址匹配的较年轻的指令的状态区(SB Hit(击中),SBID,线索ID,重放计数(如果使用的话))。状态区表示装载指令从存储器(例如,数据超高速缓存176)得到它的数据,还是从存储缓存器的数据区得到数据。SB hit(击中)区,例如,如果数据来自存储器则具有一个0,以及如果数据来自存储缓存器则具有一个1。SBID区和线索ID区保存其中数据来自的存储指令的SBID和线索ID。存储指令的线索ID不一定是具有地址匹配的装载指令的线索ID。装载指令的线索ID隐含在装载缓存器中。重放计数区(如果使用的话)表示涉及到哪个重放。(如果SB Hit是0,则SBID、线索ID、和重放计数区中的数据没有意义。)如果SB Hit=0(先前的数据来自存储器),则由装载缓存器通过导体194把重放事件通知到由装载指令线索ID和该装载指令标识的追踪缓冲区,以及所有的相关指令从追踪缓冲区被重放。Instr ID和线索ID在导体194上被传送,以表示哪个指令被重放。
如果SB Hit=1(先前的数据来自存储缓存器),则在SBID区、线索ID区、和重放计数区(如果使用的话)中的数值控制是否触发一次重放。在第一种情况下,特定的装载指令的状态区的线索ID等于存储指令的线索ID,以及特定的装载指令的状态区中的SBID与存储指令的SBID相匹配。在该第一种情况下,如果装载指令的重放计数大于在状态区中的重放计数,则装载指令被重放。如果没有重放计数(因为存储指令一次只被重放一次),则装载指令被重放。
在第二种情况下,在状态区中的线索ID等于存储指令的线索ID,但在状态区中的SBID与存储指令的SBID不匹配。在该第二种情况下,如果状态区中的SBID小于存储指令的SBID,但是如果状态区中的SBID大于存储指令的SBID,则不被重放。
在第三种情况下,状态区和存储指令的线索ID不匹配。期望这是不经常的情况。为简单起见,在一个实施例中,装载指令被重放(即使它可以与程序次序相反)。它可以是伪重放。装载指令在被重放时将接收正确的存储数据。可以使用其它的方法,但它们可能复杂得多,这对于这样的不经常的情况是正当的。
ⅱ.其中没有地址匹配的情形如果地址不匹配,则不触发重放,除了以下的不经常的情况以外。如果SB Hit=1,则状态区的线索ID与存储指令的线索ID相匹配,和状态区的SBID与存储指令的SBID相匹配。在这种情况下,将会有重放,以及被重放的装载指令从新的项目或存储器接收它的数据。
c.复位当确定线索不是按程序次序时,线索被复位。然而,来自其它线索的装载可以从与该线索中的存储指令有关的数据区中取得数据。线索管理逻辑124发送一个信号给控制电路302。在一个实施例中,当线索被复位时,复位的线索的线索ID与在每个装载缓存器(除了或许相应于复位的线索的装载缓存器以外)中的每个装载进行比较。对于其中状态区中的线索ID与复位的线索的线索ID相匹配时的装载指令,触发一次重放。装载指令从适当的追踪缓冲区被重放。
3.重放存储指令如上所述,装载指令根据存储指令的执行而被重放。在一个实施例中,装载指令根据在追踪缓冲区中寄存器比较结果表示寄存器值已被改变而被重放。例如,参照图12和13,在追踪缓冲区114A中的instr ID 4和5,作为存储指令,被显示为取决于寄存器R1-R4。
4.重放多个装载指令在装载缓存器中的一个以上的装载指令有可能具有与存储指令匹配的状态区。为了避免复杂化的逻辑,用于控制电路302的一个方法是检测何时有多个装载地址匹配,以及使得在追踪缓冲区中的最早的装载以后的所有指令被重新执行。
5.装载和存储指令的最后退役当装载或存储指令是要被最后退役时,最后退役逻辑134提供信号给追踪缓冲区114和MOB 184,表示一个指令要被最后退役。在追踪缓冲区中的项目(由instr ID和线索ID标识)被解除分配。在装载指令的情况下,在装载缓存器中的项目(由线索ID和LBID标识)被解除分配。在装载指令的情况下,最后的退役完成。在存储指令的情况下,在解除分配以前,数据区中的数据必须被提交给存储器。在存储缓存器中的项目的解除分配,从而最后的退役在接收到关于存储已完成的确认以前并不发生。替换地,项目可以在确认以前最后地退役,但项目的解除分配在接收到确认以前不发生。在导体200上的信号可以向线索管理逻辑124表示存储的最后退役何时完成,以及下一个线索可以何时开始。
SB Retired(退役)表示指令已经退役。在最后的退役逻辑134表示一个指令应当被退役时,SB Retired(退役)区中的一个比特被认定。一旦SB Retired区被认定,则相关的指令被按次序写入到存储器。一旦MOB 184A获知指令已被写入到存储器,SB Retired区就被认定,以及指令被解除分配。
装载缓存器182A和存储缓存器184A可以排队,带有一个头部和一个尾部。当指令被解除分配时,头部被移动。在装载缓存器184A和追踪缓冲区114中,退役和解除分配可以同时发生。最后退役逻辑134提供导体136和140提供信号。分接器188选择是装载缓存器182还是存储缓存器184将接收退役信号。分接器188是可任选的,以及可以由装载缓存器182和存储缓存器184中的使能端口来代替。
F.有关线索管理逻辑和最后退役逻辑的附加信息在一个实施例中,线索管理逻辑124使用树结构来跟踪线索次序。在树结构下,程序次序(也是退役次序)从顶部流到底部,右面的节点按程序次序比左面的节点早。根部在按程序次序时是第一步。树是一个抽象概念,而树结构是实施该树的电路。
线索是在跟随在后向支路或函数调用后面的指令处开始。也就是,假定没有取后向支路或没有调用函数时,线索在下一个指令处开始(如图4和5的线索T2所示)。由此,从线索(节点)看来,线索的子节点的程序次序是与线索开始(创建)的次序相反的。例如,在图6上,按时间次序,线索T2的执行在线索T3执行以前开始,但按程序次序,线索T3在线索T2之前发生。
在一个实施例中,三个事件可以引起线索从树上移去(1)当线索退役时,树的根部处的线索被移去。当根部处的线索退役时,按程序次序是下一个的线索(节点)变成为根部,节点随之被重新分配。(2)按程序次序是最后的线索从树上被移去,以使得按程序次序是更高的线索被加到树上。在这方面,树起到最后一个进-第一个出(LIFO)堆栈的作用。(3)线索可被复位,由此,当它发现其母线索的程序计数是在起始计数与结尾计数之间的范围以外时,从树上移去。在子线索在后向支路上被创建的情况下,起始计数是后向支路的目标,以及结尾计数是在后向支路指令中的程序计数值。在函数调用以后起始的线索也可被复位,因为没有从函数的返回,虽然这种情形很少发生。处理没有从函数的返回的可能性的一个方法是忽略这种可能性,以及当线索变成为按程序次序是最低时,如事件(2),令系统实际上从树上移去线索。当线索从树上移去时,被分配用于该线索的资源(例如,追踪缓冲区,存储缓存器,和装载缓存器)被解除分配。
图29上显示了事件(1)和(3),图上除了线索T5和T6以外,包括图6的例子的线索。线索T5在跟随在后向支路指令后面的点J开始,以及线索T6在跟随在函数调用后面的点K开始。假定只有四个追踪缓冲区。图30显示了在时间t1时的树结构。线索T2在线索T3被加到树上之前被加到树上。线索T4在线索T3被加到树上之后被加到树上。按照从顶部到底部和从右到左的法则,程序和退役次序是线索T1,T3,T4,和T2。图31显示了在时间t2时的树结构,假定线索T4在线索T1退役后被复位。程序和退役次序是线索T1,T3,T2,和T5。图32显示了在时间t2时的树结构,假定线索T1在线索T4被复位后退役。程序和退役次序是线索T3,T4,T2,和T5。图33显示了在时间t3时的树结构,该时间是在线索T1退役和线索T4被复位的时间以后。程序和退役次序是线索T3,T2,T5,和T6。
图34上显示了事件(2),图上包括嵌套的函数。按时间次序,线索以次序T1,T2,T3,T4,和T5被创建(起始)。然而,程序次序是T1,T5,T4,T3,和T2。在本例中,只有四个追踪缓冲区。所以,不是所有五个线索都同时存在。图35显示了在时间t1时的树结构,这是在线索T5开始以前的情形。程序和退役次序是线索T1,T4,T3,和T2。线索T5还不是树结构的一部分。图36显示了在时间t2时的树结构,这是在线索T5开始以后的情形。按程序次序是最低的线索T2从树结构中被移去,以便留出空位用于线索T5。从树上移去的线索可以在以后的时间重新起始。替换地,另一个线索可以执行被从树上移去的线索的所有指令或部分指令。在一个实施例中,在复位的情况下,线索可以设法加入下一个跟随的线索,而不是复位的线索。替换地,线索可以只继续进行,直至结束为止。阵列198的函数可以在树的节点上执行。
子线索的线索ID按照树结构的程序次序被正确地放置。(虽然由线索管理逻辑124确定的程序次序可以改变。)当线索加入到或匹配于树上的下一个线索的程序计数时,线索结束。如果只有一个子线索,则这是按程序次序的下一个线索。例如,在图33上,线索T2是按程序次序的树上的下一个线索。
最后退役逻辑134从树结构得到信息,以便从树结构的电路直接组合出阵列198。在树结构与线索管理逻辑124的其它逻辑和最后退役逻辑134的逻辑之间可以有译码电路。可以不需要阵列198。
总之,树结构提供至少用于以下的目的的信息(1)树规定退役次序;(2)树规定由MOB 178使用的程序次序,如上所述;(3)树通过指出另一个线索的起始指令而规定线索的结尾点;(4)树通过指出哪些资源是可提供的和哪些资源得到解除分配而被使用于线索资源分配。
G.不带有多线索的实施例图3显示了包括流水线308的处理器100。处理器100类似于处理器50。然而,追踪缓冲区300是唯一的追踪缓冲区,以及MOB 310是唯一的MOB。处理器100不是被设计成处理多个线索的。所以,对于处理器100并不需要线索管理逻辑。追踪缓冲区300可以类似于追踪缓冲区114A,例如,除了不需要多线索特定的部件以外。例如,不需要导体216和输出寄存器文件210。各种电路可被使用来检测预测错误,包括熟知的电路。MOB 310可以类似于MOB 178A,例如,除了不需要多线索特定的特性以外。例如,在装载缓存器中不需要线索ID区。处理器100的其它部件相对于它们在处理器50中的结构可以多少加以修正,去除与多线索一个的特性。追踪缓冲区300和MOB310可被使用于各种预测和从其中的错误中复原方面。追踪缓冲区允许大量的指令被保存在流水线以外,用于在最后退役以前的可能的重放。
处理器50可以被使用于非-多线索程序。在这种情况下,线索管理逻辑124可以总保持按程序次序相同的线索ID。替换地,线索管理逻辑124可以被禁止。在非多线索事例中,只使用一个追踪缓冲区114和一个MOB 178。替换地,追踪缓冲区可被组合,做成更大的追踪缓冲区,以及MOB可被组合,做成更大的MOB。
H.附加信息和实施例参照图37,处理器400是包括多流水线单元402的多处理器(MP)芯片。多流水线单元402不同于图2的共用资源流水线108之处在于,整个流水线(例如,用于每个流水线的分开的重新命名/分配单元)由多流水线单元402的每个流水线0,1,…,W组成。(W可以等于或大于或小于X。)另外,处理器400可以基本上与处理器50相同,或不同于处理器50。其它的处理器可以包括多流水线单元402的某些特性和流水线108的某些特性。
这里提到的每个处理器可以组成各种计算机系统的一部分。参照图38,仅仅作为一个例子,处理器50可以是计算机系统430的一部分。系统430也可以包括第二处理器434。芯片上的第二级别(L2)超高速缓存可以包括在处理器50内。处理器50可以通过处理器总线442与存储器控制器440通信。存储器控制器440可以通过总线452和454(它们可以是PCI总线)与主存储器446和外设448通信。
类似于流水线108或308(图2和3)的流水线可被使用于一个不使用寄存器重新命名的处理器中。在这种情况下,涉及到寄存器重新命名的部件(例如,重新命名/分配单元150)可被修改,以便去除与重新命名有关的特性。
所描述和显示的电路和细节只是示例性的。在它们的位置上可以使用各种其它电路和细节。而且,在尺寸、执行时间等等方面,可以有各种设计折衷选择。例如,最大运行时钟频率可能不得不减小,如果在执行路径上(例如,在保留站,寄存器文件,ROB上)的缓冲区太大的话。这里显示的部件可以按照各种技术被设计和构建。
在两个所显示的结构之间可以有中间结构(例如缓冲器)或信号。某些导体可以是不像所显示的那样连续的,而是被中间结构断开的。图上方块的边界是用于说明的目的。实际的装置不必包括带有这样规定的边界的部件。所显示的部件的相对尺寸并不是建议的实际相对尺寸。在某些实施例中箭头表示某些数据流动,但不是每个信号,例如数据请求。在上面描述逻辑高电平信号的地方,可以用逻辑低电平信号代替,反之亦然。
处理器中显示的部件可以是在同一个处理器芯片上。替换地,例如,追踪缓冲区可以和执行流水线在不同的芯片上。
术语“连接的”,“耦合的”以及有关的术语不限于直接连接或直接耦合,而可以包括间接连接或间接耦合。术语“响应于”以及有关的术语是指一个信号或事件被另一个信号或事件影响到某个程度,但不一定是完全地或直接地受到影响。如果技术条件阐述一个部件“可以”,“能够”,或是包括“优选地”,则不一定需要包括该特定的部件。
MOB可以使用数据匹配,而不是地址匹配来检测误预测。
获得本揭示内容的好处的本领域技术人员将会看到。在本发明的范围内可以从以上的说明和附图中作出许多其它变动。因此,以下的包括任何修正方案在内的权利要求规定了本发明的范围。
权利要求
1.处理器,包括执行流水线,用来同时地执行至少部分线索,其中至少一个线索与至少另一个线索有关;以及检测电路,用来检测在线索执行中的预测错误。
2.权利要求1的处理器,其特征在于,还包括被耦合到检测电路的重放触发逻辑,用来触发重新执行与预测错误有关的指令。
3.权利要求1的处理器,其特征在于,还包括被耦合到检测电路的重放触发逻辑,用来触发重放与预测错误有关的指令。
4.权利要求1的处理器,其特征在于,还包括被耦合到执行单元的追踪缓冲区,用来保存线索的跟踪,以及其中至少部分检测电路被包括在追踪缓冲区内。
5.权利要求1的处理器,其特征在于,还包括追踪缓冲区,每个追踪缓冲区包括指令排队,用来保存一个线索的指令。
6.权利要求5的处理器,其特征在于,还包括最后退役逻辑,以及其中追踪缓冲区内的指令在最后退役逻辑的控制下最后地退役,但某些指令可以在执行流水线中在执行后开始退役。
7.权利要求1的处理器,其特征在于,还包括译码器和被耦合到执行单元的追踪缓冲区,用来保存线索的跟踪,以及其中执行流水线和追踪缓冲区同时从译码器接收指令。
8.权利要求1的处理器,其特征在于,其中执行流水线包括存储器指令缓存器(MOB),以及至少部分检测电路被包括在MOB内。
9.权利要求1的处理器,其特征在于,其中检测电路包括寄存器内容比较电路;以及地址比较电路。
10.权利要求1的处理器,其特征在于,还包括线索管理逻辑和程序计数器,用来在线索管理逻辑的控制下创建线索。
11.权利要求10的处理器,其特征在于,其中线索按照由线索管理逻辑得出的退役次序退役。
12.处理器,包括线索管理逻辑;程序计数器,在线索管理逻辑的控制下动态地创建线索;执行流水线,用来同时地执行至少部分线索;以及检测电路,用来检测在线索执行中的预测错误。
13.权利要求12的处理器,其特征在于,其中线索是从其上包括执行流水线的芯片外发起的程序的指令创建的。
14.权利要求12的处理器,其特征在于,还包括被耦合到检测电路的重放触发逻辑,用来触发重新执行与预测错误有关的指令。
15.权利要求12的处理器,其特征在于,还包括追踪缓冲区,每个追踪缓冲区包括指令排队,用来保存一个线索的指令。
16.权利要求15的处理器,其特征在于,还包括最后退役逻辑,以及其中追踪缓冲区内的指令在最后退役逻辑的控制下最后地退役,但某些指令可以在执行流水线中在执行后开始退役。
17.动态多线索处理器,包括数据超高速缓存,用来接收要被执行的指令;以及电路,用来从指令动态地创建线索和用来同时地执行至少部分线索,以及检测和校正在执行中的预测错误。检测电路,用来检测在线索执行中的预测错误。
18.处理器,包括程序计数器;以及线索管理逻辑,用来控制程序计数器动态地创建线索,以及其中线索管理逻辑分析指令和响应于检测到某些指令启动线索,和线索管理逻辑包括树结构,用来跟踪线索程序次序。
19.权利要求18的处理器,其特征在于,其中当与线索有关的程序计数器超高速缓存按程序次序的下一个线索时,线索管理逻辑结束这一个线索。
20.权利要求18的处理器,其特征在于,其中某些指令包括调用和后向支路。
21.权利要求18的处理器,其特征在于,还包括最后退役逻辑,用来按照程序次序使线索最后退役。
22.处理器,包括线索管理逻辑,用来控制从程序动态地创建线索。
23.权利要求22的处理器,其特征在于,其中程序是从其上形成线索管理逻辑的芯片以外发起的。
全文摘要
在本发明的一个实施例中,处理器(50)包括执行流水线(108),用来同时执行至少部分的线索T1-T4,其中至少一个线索是与至少另一个线索有关的。处理器(50)也包括检测电路,用来检测在线索T1-T4执行中的预测错误。在另一个实施例中,处理器(50)包括线索管理逻辑(124),用来控制从程序(112A)动态地创建线索。
文档编号G06F9/38GK1286769SQ98813588
公开日2001年3月7日 申请日期1998年12月11日 优先权日1997年12月16日
发明者H·阿克卡利, K·周 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1