CN1328657C - 在计算机处理器中发出指令的方法以及计算机处理器 - Google Patents
在计算机处理器中发出指令的方法以及计算机处理器 Download PDFInfo
- Publication number
- CN1328657C CN1328657C CNB2004100702617A CN200410070261A CN1328657C CN 1328657 C CN1328657 C CN 1328657C CN B2004100702617 A CNB2004100702617 A CN B2004100702617A CN 200410070261 A CN200410070261 A CN 200410070261A CN 1328657 C CN1328657 C CN 1328657C
- Authority
- CN
- China
- Prior art keywords
- instruction
- computer processor
- confidence factor
- streamline
- command issuing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 239000000872 buffer Substances 0.000 claims abstract description 35
- 238000000034 method Methods 0.000 claims abstract description 35
- 230000008569 process Effects 0.000 claims description 3
- 238000012545 processing Methods 0.000 abstract description 8
- 230000003111 delayed effect Effects 0.000 description 11
- 230000009471 action Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000008929 regeneration Effects 0.000 description 1
- 238000011069 regeneration method Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
Abstract
在能够同时处理多个指令线程的微处理器中优化吞吐量的方法。在输入缓冲器和微处理器流水线之间提供一个指令发出逻辑。该指令发出逻辑根据一个概率预测性地发出来自给定线程的指令,该概率是当该指令达到流水线中需要操作数的一级时将能得到这些操作数的概率。如果当前的流水线状态表明有大的概率该指令将需要拖延在一个共享资源中以等待操作数,则该指令的发出被封锁。根据当前流水线状态一旦指令将会拖延的概率低于某一阈值,该指令将被允许发出。
Description
技术领域
一般地说,本发明涉及计算机处理器领域,更具体地说,涉及提高同时多线程处理器中的吞吐量。
背景技术
计算机处理器是任何计算机系统的心脏。它们负责处理使计算机的所有功能成为可能的那些指令。计算机处理器还被称作中央处理单元(CPU)和微处理器。一个流水线式计算机处理器有多个级,在处理阶段每个指令必须穿过这些级。一个示例性五级流水线式处理器含有如下各级:取指、解码、存储器访问、执行和写回。在取指级,一个指令被从寄存器或缓冲器取来,该指令在解码级被解码,以确定要进行的操作的类型以及需要什么操作数来完成该操作。在存储器访问级提取所需要的操作数,并在执行阶段执行该指令。然后,执行指令的结果在写回级就写回存储器。许多处理器有多于五级,一些处理器有不只一条流水线。然而,流水线式处理器的一些特性对于所有流水线都是相同的。具体地说,一旦一个指令进入一个流水线,由该指令造成的任何拖延(stall)将造成整个流水线拖延,当该流水线被拖延时,便没有输出产生,于是性能下降。这样,防止流水线拖延是实现微处理器最佳性能的一个重要因素。
微处理器按照由时钟协调的定时调度运行。时钟提供定时信号,称作周期。指令,操作数和结果的运动最好在每个时钟周期上完成。在一个流水线内的一个给定级,如执行级,可能用不只一个时钟周期来完成。然而,该执行级最好被分成多个子级,从而在每个时钟周期结束时能产生某种输出并允许进入下一级。以这种方式,微处理器在每个时钟周期结束时产生某种输出。时钟周期和时钟频率二者都能用来描述处理器的速度。时钟周期短的计算机将有高的时钟频率。一般地,时钟频率越高,则计算机越快,或者更准确地说,该计算机能更快速地处理指令。
一个线程是若干计算机指令形成的线或流,当它被处理时能达到计算机或计算机用户的某个目的。同时多线程处理器允许并发地执行两个或更多个可能独立的指令流。尽管在一个时刻只有一个指令能占有一个流水线的任何一级,让来自其他线程的指令准备好供处理能提高系统性能。为最有效地使用可得到的硬件和避免功能重复,某些流水线资源在所有线程当中共享。如果一个给定线程占有一个共享资源,它的指令流必定在某一点与其他线程的指令流汇合。为了本申请的目的,来自任何给定线程的指令汇合到一个共享流水线资源中的动作被定义为“发出(issue)”。在一个指令发出后,数据依赖性会使它拖延在一个共享资源中,直至依赖性解除为止,于是拖延了需要这同一资源的所有线程。这一问题的影响在高频设计中被放大,因为流水线深度要求在知道操作数可用性之前一个或多个周期时做出发出一个特定指令的决定。这增加了一个不独立的指令为等待所需操作数而在共享资源中拖延的机会。如果不是这样,而是让指令的发出延迟到知道操作数可用性之时,那么在不独立指令需要一些操作数时这些操作数本已准备好的情况下,系统的总体性能会受到负面影响。由于这增大的延迟,单个线程的性能也会受到影响,而多线程性能和/或效率会由于没有利用每个可能的机会从给定线程发出指令而受到影响。
先前克服这一问题的尝试涉及封锁一个具有依赖性的线程使其操作数数据准备好转发之前不发出指令。对于较低频的设计,这是一个适当的解决方案,但对于高频设计,这不是最佳的,因为高频设计由于其流水线深度使它必须在知道操作数可用性之前一个或多个周期时做出发出指令的决定。在高时钟频率的处理器中使用这一先有方法,会使得在每次遇到依赖性时对特定线程的总延迟引入一些惩罚性周期,因为没能在操作数数据变为可用时立即使用该操作数数据。
发明内容
一种在多线程计算机处理器中发出指令的方法,该方法包括如下步骤:
在指令发出逻辑中接收计算机指令组,其中每组指令包含来自多个独立的指令线程中的每一个指令线程的一个指令;
在计算机处理器的多级指令流水线中预测一个级,在该级每个指令的结果将是可得到的;
把所收到的需要从作为先决条件的指令得到结果的那些指令识别为不独立指令;
为每个所收到的指令确定一个置信因子,它指出该指令将完成该流水线所有各级而不造成拖延的概率;以及,
由指令发出逻辑发出其置信因子在预定阈值之上的指令。
一种在单线程计算机处理器中发出指令的方法,该方法包括:
在指令发出逻辑中接收计算机指令组,其中每组指令包含来自单一指令线程的多个指令;
在计算机处理器的多级指令流水线中预测一个级,在该级每个指令的结果将是可得到的;
把所收到的需要从作为先决条件的指令得到结果的那些指令识别为不独立指令;
为每个所收到的指令确定一个置信因子,它指出该指令将完成流水线所有各级而不造成拖延的概率;以及
由指令发出逻辑发出其置信因子在预定阈值之上的指令。
一种具有能增大吞吐量的预测性指令发出能力的多线程计算机处理器,该计算机处理器包括:
多个独立的输入缓冲器,其中为多个独立的指令线程中的每一个提供一组缓冲器;
与独立的输入缓冲器连接的指令发出逻辑,其中该指令发出逻辑:
从每个指令线程接收指令;
在处理器的多级流水线中预测一个级,在该级每个指令的结果将是可得到的;
把所收到的需要从作为先决条件的指令得到结果的那些指令识别为不独立指令;
为每个指令确定一个置信因子,它指出该指令将完成多级流水线所有各级而不造成拖延的概率;以及
发出其置信因子在预定阈值之上的指令;而且,其中多级流水线的第一级与指令发出逻辑的输出缓冲器相连接。
一种具有能增大吞吐量的预测性指令发出能力的单线程计算机处理器,该计算机处理器包括:
多个输入缓冲器,用于接收来自一个指令线程的指令;
与输入缓冲器连接的指令发出逻辑,其中该指令发出逻辑:
从输入缓冲器接收指令;
在处理器的多级流水线中预测一个级,在该级每个指令的结果将是可得到的;
把所收到的需要从作为先决条件的指令得到结果的那些指令识别为不独立指令;
为每个指令确定一个置信因子,它指出该指令将完成流水线所有各级而不造成拖延的概率;以及
发出其置信因子在预定阈值之上的指令;而且,其中多级流水线的第一级与指令发出逻辑的输出缓冲器相连接。
在同时多线程微处理器中发出指令的方法。该微处理器包括至少一个多级流水线用于处理指令。该处理器还包括一个高速缓冲存储器、用于每个线程的多个独立的输入缓冲器以及指令发出逻辑。指令发出逻辑位于输入缓冲器和多级流水线之间。该方法包含以等于微处理器时钟速率的速率在指令发出逻辑中接收指令组的步骤,其中每个指令组包含来自每个独立输入缓冲器的一个指令。然后指令发出逻辑预测在其中每个指令的结果将可用于转发的流水线级。然后存储这一流水线级信息直至该指令达到所预测的级。然后指令发出逻辑识别需要来自先前指令的结果的任何不独立指令,该先前指令处在该不独立指令的临界距离之内。临界距离等于该不独立指令将需要结果的那一级和将会得到该结果的那一级之间的级数。基于该流水线的当前内容,指令发出逻辑发出那些将要完成流水线中所有各级而不会造成拖延的概率超过预定阈值的所有指令。指令发出逻辑保持其概率低于预定阈值的所有指令,其中被指令发出逻辑保持的指令将在其不造成流水线中拖延的概率上升到该阈值之上以后被发出。
本发明的一个目的是提高同时多线程微处理器的性能。
本发明的又一个目的是确定一个指令造成拖延的概率并根据所确定的概率推测性地发出指令。
附图说明
现在将参考附图更详细地描述本申请的发明,这些附图仅是作为举例给出,其中:
图1是在其中能利用本发明的一个计算机系统的方块图;
图2是具有本指令发出逻辑的中央处理单元的示意图;
图3是本指令发出逻辑的方块图;
图4是本方法的一般流程图;
图5是本指令发出逻辑的示例性决策树;以及
图6显示一个具有双流水线的处理器中的指令发出逻辑。
具体实施方式
这里描述的解决方案是根据当指令需要操作数时将得到所需操作数的概率推测性地发出来自给定线程的指令。如果当前流水线状态表明有大的概率该指令将需要拖延在一个共享资源中以等待操作数,则指令的发出被封锁。一旦指令将会拖延的概率低于某个阈值,则该指令被允许发出。
图1是方块图,显示一个能利用本方法的计算机系统的主要部件。有多线程能力的CPU 100是一个微处理器,它能处理指令的多个线程。多线程CPU通常比单线程CPU效率高,所以能比严格地在一个指令线程上操作的CPU有更好的总体性能。CPU 100与存储器105、控制单元110、电源控制单元115、显示控制单元125以及I/O控制单元135电连接。存储器105是随机存取存储器(RAM),它与高速缓冲存储器的区别在于高速缓冲存储器位于CPU 100内部。控制单元110向CPU 100内的多个寄存器和缓存器提供控制信号,告诉寄存器何时接受和何时不接受新的数据。这些控制信号与系统时钟同步。系统时钟与图1中的每个部件电连接,唯电源控制单元115除外。为了清楚,这些连接没有示出。电源控制单元115向图1中的每个部件分配电源。显示控制单元125接收来自CPU 100的显示信息并控制如何在显示单元120上显示该信息。I/O控制单元135接收来自键盘130和鼠标器140的输入并将输入转换成机器可读形式,然后将其转发给CPU 100。当打印机连接到图1的系统时,I/O控制单元135还会接收来自CPU 100的信息并将这一信息转换成打印机指令。
图2是多线程CPU 100的更详细示意图。CPU输入缓冲器205为来自多个指令线程每一个的三个指令担任暂时存储器。当然,在其他实施例中能有多于三个或少于三个缓冲器用于每个指令流。第一列缓冲器保持来自第一指令线程的三个指令。第二列缓冲器保持来自第二指令线程的三个指令。这一暂时存储器系统重复CPU上存在的那么多缓冲器列,即直至第n列缓冲器被来自第n线程的指令充满。本指令发出方法是灵活的,能用于CPU所能接受的任何数量线程。来自每列缓冲器的一个指令进入指令发出逻辑200,在那里识别那一组中任何指令的依赖性问题。如果发现一个指令需要一个操作数而当该指令需要它时它可能不会被得到,则作为该指令来源的线程被从供发出的候选线程池中抛出,这里“发出”是指向流水线转发一个指令供处理。然后,最不可能在流水线中造成拖延的指令线程被发出。这并不是说保证整个线程穿过该流水线而不受中断。在优选实施例中,指令发出逻辑200评估每个时钟周期上造成拖延的概率。这样,如果发现来自当前被处理的线程的一个指令有造成拖延的高概率,则那个线程将被延时,而来自另一线程的一个指令将会发出。当一个指令被发出时,它进入该线程流水线各级210的第一级“A”。不同的流水线有不同的级数,图2显示本指令发出逻辑与具有任何级数的流水线兼容。在流水线210的每一级,对指令进行不同的操作。级A、B、C、W、X、Y和Z是被共享的资源,它们含有来自不同线程的指令的混合,然而,任何一级在任何给定时刻只含有一个指令。指令发出逻辑200必须从n个线程中选择适当的指令汇合到被共享的资源中。在这个例子中,要求指令在离开级B之前解除它们的依赖性。在级B,需要由该指令操作的操作数。级Y代表流水线中的其指令结果可能被转发到级B中的不独立指令的第一次机会。这样,在这个例子中,该流水线有一个四个时钟周期的“临界范围”,如果假定总共有七级而且每级只需一个时钟周期的话。临界范围定义为:在一个不独立指令所依赖的指令发出之后,在流水线中发出该不独立指令并且不造成拖延之前,该不独立指令必须延迟多久。当把本方法应用于这个例子时,有依赖性的指令将被封锁发出,直至它所依赖的指令达到级W。通过以这种方式延迟发出,不独立指令将在它所依赖的指令达到级Y的同时达到级B,假定不存在流水线保持的话。在发出之后,该不独立指令能继续深入该水线210而不会在任何被共享的资源中拖延,从而对其他线程的执行造成的影响最小。这一技术实现多线程吞吐量最大化。如果这不独立指令的发出不被延迟的话,这不独立指令将在它所依赖的指令到达级Y之前到达级B,造成该流水线拖延并影响所有其他线程的性能。封锁不独立指令的发出允许其他无关联的指令使用“指令时隙(instruction slot)”,否则的话这些“指令时隙”会被封锁该流水线的不独立指令浪费掉了。
图3是指令发出逻辑200的更详细示图,指令发出逻辑200有若干输入缓冲器300,其数量与CPU输入缓冲器的数量相等。输入缓冲器300与结果预测单元305相连,它预测并暂时存储流水线内的一级,在该级每个指令将首次使其结果可被不独立指令使用,结果预测单元305还确定每个指令在该流水线内进行处理期间需要什么资源。这样,也能避免在共享资源上的冲突,如特定存储器阵列资源。结果预测单元305连接于识别与延时单元310,它识别不独立指令并使不独立指令延迟,直至它们的操作数来源指令不再处在临界距离之内时为止。识别与延时单元310根据该流水线的当前内容以及由结果预测单元305提供的信息,确定一个特定指令是否应被延迟发出。识别与延时单元310还延时那些对一共享资源(如特定存储器阵列)有冲突的指令。在指令发出逻辑中的最后一个单元含有逻辑输出缓冲器315。对于单流水线处理器,逻辑输出缓冲器的作用是具有“n”个输入和只有一个输出的多路复用器。在优选实施例中,在输出缓冲器315中的所有指令都已被确定为不大可能在该流水线中造成拖延。所以输出缓冲器315只是简单地作为一个多路复用的FIFO(先进,先出)缓冲器。在每个时钟周期从输出缓冲器315发出的指令直接进入该流水线的第一级接受处理。
图4是一个流程图,显示由指令发出逻辑完成的步骤。优选地,每个步骤在一个时钟周期内执行,任何需要不只一个周期的步骤能被分成若干子步骤,从而在每个时钟周期结束时产生一个输出。在步骤400,发出逻辑从CPU中的每个指令线程接收一个指令。在步骤405,预测一个指令在其结果可供转发之前必须达到的级。这些预测用于确定其后的一个不独立指令是否在该指令的临界范围内。在优选实施例中,在这些指令达到流水线中可用它们的结果的级之后,被预测的级信息被清仓。还有,在指令发出(进入流水线)之后,根据流水线的当前内容,以每个时钟周期的频率,对预测的级信息进行更新。在步骤410,至少是部分地通过对指令解码,识别出指令所需操作数。以这种方式还能识别共享资源冲突。在步骤415,流水线的当前内容被检验,由此得到的信息用于更新级预测结果,操作数可用性以及其他共享资源的冲突(如特定存储器)。在步骤420,可能有冲突的那些指令被加以标志,从而使指令发出逻辑能计算那些指令造成拖延的概率。在步骤425,确定造成拖延的似然性。如果造成拖延的似然性低于一个阈值水平,例如50%,则允许该指令发出(步骤435)。如果确定在一个流水线中造成拖延的概率超过阈值水平,则该指令被延迟一个或多个时钟周期(步骤430)。被延迟的指令在每个时钟周期都被重新估价,并在流水线内容表明造成拖延的概率已降到阈值水平之下时立即被允许发出。
图5是流程图,显示一旦一个指令已被标记为有潜在冲突时的后续步骤。在步骤500中,确定这潜在冲突是否是一个操作数冲突。如果没有操作数冲突,则在步骤505确定是否存在一个共享资源冲突。如果没有共享资源冲突,则在步骤510允许该指令发出。然而,如果在步骤500或505中确定存在一个冲突,则指令发出逻辑在步骤515确定这两个冲突的指令是否在彼此的临界范围内。使用图2的例子,那里操作数冲突的临界范围是四个时钟周期,如果这不独立指令落后于它所依赖的指令(“独立”指令)四个或更多个流水线级,则在步骤510允许发出这不独立指令。然而,如果这不独立指令在这“独立”指令之后不足四级,则必须计算造成拖延的概率。共享资源冲突的临界范围将比操作数冲突的临界范围少一个或多个时钟周期,这取决于所涉及的资源。在步骤520中,在流水线中造成拖延的概率是根据该临界范围以及流水线的当前内容确定的。在步骤525,该概率与一个阈值进行比较,该阈值可以改变。如果概率低于阈值,则该指令被允许发出。然而,如果造成拖延的概率在该阈值之上,则该指令被延迟。被延迟的指令可在每个时钟周期有被重计算的概率。当造成拖延的概率最终降到阈值以下时,该指令被允许发出。
图6显示具有双指令流水线210和605的CPU 600中处于操作状态的当前指令发出逻辑200。在这一实施例中,指令发出逻辑200仍从多个线程,从CPU缓冲器205,接收多个指令。然而,指令发出逻辑200在每个时钟周期发出两个指令,从而在每个时钟周期每个流水线210和605各接收一个指令供处理。在这一实施例中的指令发出逻辑在确定造成拖延的概率时考虑两个流水线的内容。
使用本方法还能实现单线程微处理器的最小迟时。根据将能得到其操作数的概率推测性地发出不独立指令,通过在“最佳”时刻发出指令,能改善单线程的性能。封锁不独立指令的发出,直至它有高概率得到它的操作数,这就不会招致对带有依赖性的线程的惩罚。预测性发出的指令仍能在它们的操作数恰好变为可用时使用这些操作数。通过允许处理器利用在给定线程上能取得进展时的每个可能的发出机会,来减小正在进行的全部指令流的总延迟,从而改善多线程和单线程性能。
如果根据某些预测,预测性地允许发送指令,则有可能该预测是不正确的。这种情况的一个例子是一个依赖于可高速缓存负载的指令的发出。为使单线程延迟尽可能小,可能在假定一个指令所依赖的负载将是一个高速缓存命中的情况下预测性地发出这一指令。如果在发出时刻之后认识到该负载是一个高速缓存未命中,则这个不独立指令将被迫等在共享资源中直至高速缓存未命中被解决为止。
前文中对具体实施例的描述如此充分地揭示了本发明的一般特性,以致其他人应用当前的知识能容易地修改这些具体实施例和/或使其适应于其他应用而不脱离其通用概念。所以,这些适应和修改应该成为和打算成为处于所公开的实施例的等效物的意义和范围内。应该理解,这里所用术语的措辞是为了描述的目的,而不是为了限制。
Claims (30)
1.一种在多线程计算机处理器中发出指令的方法,该方法包括如下步骤:
在指令发出逻辑中接收计算机指令组,其中每组指令包含来自多个独立的指令线程中的每一个指令线程的一个指令;
在计算机处理器的多级指令流水线中预测一个级,在该级每个指令的结果将是可得到的;
把所收到的需要从作为先决条件的指令得到结果的那些指令识别为不独立指令;
为每个所收到的指令确定一个置信因子,它指出该指令将完成该流水线所有各级而不造成拖延的概率;以及,
由指令发出逻辑发出其置信因子在预定阈值之上的指令。
2.权利要求1的方法,进一步包括如下步骤:
存储每个指令的预测流水线级;以及
根据流水线当前内容,动态地更新存储的每个指令的预测流水线级。
3.权利要求2的方法,其中一个指令的置信因子是根据当前位置和作为先决条件的指令的预测流水线级而确定的。
4.权利要求3的方法,进一步包括如下步骤:
根据流水线当前内容动态地重新计算每个指令的置信因子。
5.权利要求2的方法,进一步包括如下步骤:
把所收到的对共享资源有冲突的那些指令识别为不独立指令,其中的共享资源是该计算机处理器所在的计算机系统内的资源,该计算机处理器在该共享资源中进行操作。
6.权利要求5的方法,其中一个不独立指令的置信因子是根据当前位置、任何作为先决条件的指令的预测流水线级、以及任何被识别出的共享资源冲突而确定的。
7.权利要求6的方法,进一步包括如下步骤:
根据流水线当前内容和任何共享资源的当前状态动态地重新计算每个指令的置信因子。
8.权利要求1的方法,其中在每个时钟周期从指令发出逻辑发出一个或多个指令。
9.一种在单线程计算机处理器中发出指令的方法,该方法包括:
在指令发出逻辑中接收计算机指令组,其中每组指令包含来自单一指令线程的多个指令;
在计算机处理器的多级指令流水线中预测一个级,在该级每个指令的结果将是可得到的;
把所收到的需要从作为先决条件的指令得到结果的那些指令识别为不独立指令;
为每个所收到的指令确定一个置信因子,它指出该指令将完成流水线所有各级而不造成拖延的概率;以及
由指令发出逻辑发出其置信因子在预定阈值之上的指令。
10.权利要求9的方法,进一步包括如下步骤:
存储每个指令的预测流水线级;以及
根据流水线的当前内容,动态更新存储的每个指令的预测流水线级。
11.权利要求10的方法,其中一个指令的置信因子是根据当前位置和作为先决条件的指令的预测流水线级而确定的。
12.权利要求11的方法,进一步包括如下步骤:
根据流水线的当前内容动态地重新计算每个指令的置信因子。
13.权利要求10的方法,进一步包括如下步骤:
把所收到的需要来自一个存储器的操作数的那些指令识别为不独立指令,其中的存储器是该计算机处理器所在的计算机系统内的存储器,该计算机处理器在该存储器中运行操作。
14.权利要求13的方法,其中一个不独立指令的置信因子是根据当前位置和任何作为先决条件的指令的预测流水线级以及任何所需要的操作数将在该处理器的高速缓冲存储器中被找到的概率而确定的。
15.权利要求14的方法,进一步包括如下步骤:
根据流水线的当前内容和该处理器高速缓冲存储器的当前内容,动态地重新计算每个指令的置信因子。
16.一种具有能增大吞吐量的预测性指令发出能力的多线程计算机处理器,该计算机处理器包括:
多个独立的输入缓冲器,其中为多个独立的指令线程中的每一个指令线程提供一组缓冲器;
与独立的输入缓冲器连接的指令发出逻辑,其中该指令发出逻辑包括:
用于从每个指令线程接收指令的装置;
用于在处理器的多级流水线中预测一个级的装置,在该级每个指令的结果将是可得到的;
用于把所收到的需要从作为先决条件的指令得到结果的那些指令识别为不独立指令的装置;
用于为每个指令确定一个置信因子的装置,该置信因子指出该指令将完成多级流水线所有各级而不造成拖延的概率;以及
用于发出其置信因子在预定阈值之上的指令的装置;而且,其中多级流水线的第一级与指令发出逻辑的输出缓冲器相连接。
17.权利要求16的计算机处理器,其中该指令发出逻辑存储每个指令的预测流水线级,并根据流水线的当前内容动态地更新存储的每个指令的预测流水线级。
18.权利要求16的计算机处理器,其中一个指令的置信因子是根据当前位置和作为先决条件的指令的预测流水线级而确定的。
19.权利要求17的计算机处理器,其中的指令发出逻辑根据流水线的当前内容动态地重新计算每个指令的置信因子。
20.权利要求16的计算机处理器,其中每个时钟周期由指令发出逻辑发出一个或多个指令。
21.权利要求16的计算机处理器,其中指令发出逻辑进一步把所收到的对共享资源有冲突的那些指令识别为不独立指令,其中的共享资源是该计算机处理器所在的计算机系统内的资源,该计算机处理器在该共享资源中进行操作。
22.权利要求21的计算机处理器,其中一个不独立指令的置信因子是根据当前位置、任何作为先决条件的指令的预测流水线级、以及任何被识别出的共享资源冲突而确定的。
23.权利要求22的计算机处理器,其中的指令发出逻辑根据流水线的当前内容和任何共享资源的当前状态动态地重新计算每个指令的置信因子。
24.一种具有能增大吞吐量的预测性指令发出能力的单线程计算机处理器,该计算机处理器包括:
多个输入缓冲器,用于接收来自一个指令线程的指令;
与输入缓冲器连接的指令发出逻辑,其中该指令发出逻辑包括:
用于从输入缓冲器接收指令的装置;
用于在处理器的多级流水线中预测一个级的装置,在该级每个指令的结果将是可得到的;
用于把所收到的需要从作为先决条件的指令得到结果的那些指令识别为不独立指令的装置;
用于为每个指令确定一个置信因子的装置,该置信因子指出该指令将完成流水线所有各级而不造成拖延的概率;以及
用于发出其置信因子在预定阈值之上的指令的装置;而且,其中多级流水线的第一级与指令发出逻辑的输出缓冲器相连接。
25.权利要求24的计算机处理器,其中该指令发出逻辑存储每个指令的预测流水线级,并根据流水线当前内容动态地更新存储的每个指令的预测流水线级。
26.权利要求24的计算机处理器,其中一个指令的置信因子是根据当前位置和作为先决条件的指令的预测流水线级而确定的。
27.权利要求25的计算机处理器,其中的指令发出逻辑根据流水线当前内容动态地重新计算每个指令的置信因子。
28.权利要求24的计算机处理器,其中指令发出逻辑进一步把所收到的对共享资源有冲突的那些指令识别为不独立指令,其中的共享资源是该计算机处理器所在的计算机系统内的资源,该计算机处理器在该共享资源中进行操作。
29.权利要求28计算机处理器,其中一个不独立指令的置信因子是根据当前位置、任何作为先决条件的指令的预测级、以及任何被识别出的共享资源冲突而确定的。
30.权利要求29的计算机处理器,其中的指令发出逻辑根据流水线当前内容和任何共享资源的当前状态动态地重新计算每个指令的置信因子。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/664,384 US7366877B2 (en) | 2003-09-17 | 2003-09-17 | Speculative instruction issue in a simultaneously multithreaded processor |
US10/664,384 | 2003-09-17 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1598763A CN1598763A (zh) | 2005-03-23 |
CN1328657C true CN1328657C (zh) | 2007-07-25 |
Family
ID=34274597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100702617A Expired - Fee Related CN1328657C (zh) | 2003-09-17 | 2004-07-30 | 在计算机处理器中发出指令的方法以及计算机处理器 |
Country Status (2)
Country | Link |
---|---|
US (2) | US7366877B2 (zh) |
CN (1) | CN1328657C (zh) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7366877B2 (en) * | 2003-09-17 | 2008-04-29 | International Business Machines Corporation | Speculative instruction issue in a simultaneously multithreaded processor |
US7957389B2 (en) * | 2004-03-31 | 2011-06-07 | Alcatel-Lucent Usa Inc. | Method of stall identification and recovery |
US20070043930A1 (en) * | 2005-08-16 | 2007-02-22 | Hill Stephen J | Performance of a data processing apparatus |
US20160098279A1 (en) * | 2005-08-29 | 2016-04-07 | Searete Llc | Method and apparatus for segmented sequential storage |
GB0519597D0 (en) * | 2005-09-26 | 2005-11-02 | Imagination Tech Ltd | Scalable multi-threaded media processing architecture |
US7584346B1 (en) * | 2007-01-25 | 2009-09-01 | Sun Microsystems, Inc. | Method and apparatus for supporting different modes of multi-threaded speculative execution |
CN101339523B (zh) * | 2007-07-05 | 2011-09-21 | 国际商业机器公司 | 多处理器环境中的流水线处理方法和设备 |
US7779233B2 (en) * | 2007-10-23 | 2010-08-17 | International Business Machines Corporation | System and method for implementing a software-supported thread assist mechanism for a microprocessor |
US7779234B2 (en) * | 2007-10-23 | 2010-08-17 | International Business Machines Corporation | System and method for implementing a hardware-supported thread assist under load lookahead mechanism for a microprocessor |
US8260990B2 (en) * | 2007-11-19 | 2012-09-04 | Qualcomm Incorporated | Selective preclusion of a bus access request |
GB2458487B (en) * | 2008-03-19 | 2011-01-19 | Imagination Tech Ltd | Pipeline processors |
US8271765B2 (en) * | 2009-04-08 | 2012-09-18 | International Business Machines Corporation | Managing instructions for more efficient load/store unit usage |
GB2469822B (en) * | 2009-04-28 | 2011-04-20 | Imagination Tech Ltd | Method and apparatus for scheduling the issue of instructions in a multithreaded microprocessor |
US9104399B2 (en) * | 2009-12-23 | 2015-08-11 | International Business Machines Corporation | Dual issuing of complex instruction set instructions |
US9182991B2 (en) * | 2012-02-06 | 2015-11-10 | International Business Machines Corporation | Multi-threaded processor instruction balancing through instruction uncertainty |
US9047092B2 (en) * | 2012-12-21 | 2015-06-02 | Arm Limited | Resource management within a load store unit |
GB2514956B (en) | 2013-01-21 | 2015-04-01 | Imagination Tech Ltd | Allocating resources to threads based on speculation metric |
US10447823B2 (en) * | 2014-01-08 | 2019-10-15 | Marvell Semiconductor, Inc. | Packet parsing engine |
US10437637B1 (en) | 2015-05-26 | 2019-10-08 | Thin CI, Inc. | Configurable scheduler for graph processing on multi-processor computing systems |
US11436045B2 (en) | 2015-05-26 | 2022-09-06 | Blaize, Inc. | Reduction of a number of stages of a graph streaming processor |
US11379262B2 (en) | 2015-05-26 | 2022-07-05 | Blaize, Inc. | Cascading of graph streaming processors |
US11150961B2 (en) | 2015-05-26 | 2021-10-19 | Blaize, Inc. | Accelerated operation of a graph streaming processor |
US11354129B2 (en) * | 2015-10-09 | 2022-06-07 | Spreadtrum Hong Kong Limited | System and method for predicting latency of a variable-latency instruction |
GB2544994A (en) * | 2015-12-02 | 2017-06-07 | Swarm64 As | Data processing |
US9983875B2 (en) * | 2016-03-04 | 2018-05-29 | International Business Machines Corporation | Operation of a multi-slice processor preventing early dependent instruction wakeup |
US10037211B2 (en) | 2016-03-22 | 2018-07-31 | International Business Machines Corporation | Operation of a multi-slice processor with an expanded merge fetching queue |
US10346174B2 (en) | 2016-03-24 | 2019-07-09 | International Business Machines Corporation | Operation of a multi-slice processor with dynamic canceling of partial loads |
US10761854B2 (en) | 2016-04-19 | 2020-09-01 | International Business Machines Corporation | Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor |
US10037229B2 (en) | 2016-05-11 | 2018-07-31 | International Business Machines Corporation | Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions |
US9934033B2 (en) | 2016-06-13 | 2018-04-03 | International Business Machines Corporation | Operation of a multi-slice processor implementing simultaneous two-target loads and stores |
US10042647B2 (en) | 2016-06-27 | 2018-08-07 | International Business Machines Corporation | Managing a divided load reorder queue |
US10318419B2 (en) | 2016-08-08 | 2019-06-11 | International Business Machines Corporation | Flush avoidance in a load store unit |
US10680976B2 (en) * | 2016-09-09 | 2020-06-09 | Intel Corporation | Technologies for performing switch-based collective operations in distributed architectures |
US10620962B2 (en) * | 2018-07-02 | 2020-04-14 | Arm Limited | Appratus and method for using predicted result values |
US20230315446A1 (en) * | 2022-03-30 | 2023-10-05 | Fujitsu Limited | Arithmetic processing apparatus and method for arithmetic processing |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5193156A (en) * | 1988-02-23 | 1993-03-09 | Mitsubishi Denki Kabushiki Kaisha | Data processor with pipeline which disables exception processing for non-taken branches |
US5872947A (en) * | 1995-10-24 | 1999-02-16 | Advanced Micro Devices, Inc. | Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions |
US5909566A (en) * | 1996-12-31 | 1999-06-01 | Texas Instruments Incorporated | Microprocessor circuits, systems, and methods for speculatively executing an instruction using its most recently used data while concurrently prefetching data for the instruction |
WO2002050667A2 (en) * | 2000-12-20 | 2002-06-27 | Intel Corporation | Speculative register adjustment |
US20020112228A1 (en) * | 1999-12-29 | 2002-08-15 | Granston Elana D. | Method for collapsing the prolog and epilog of software pipelined loops |
US6442678B1 (en) * | 1998-12-31 | 2002-08-27 | Intel Corporation | Method and apparatus for providing data to a processor pipeline |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5404469A (en) * | 1992-02-25 | 1995-04-04 | Industrial Technology Research Institute | Multi-threaded microprocessor architecture utilizing static interleaving |
WO1994027216A1 (en) * | 1993-05-14 | 1994-11-24 | Massachusetts Institute Of Technology | Multiprocessor coupling system with integrated compile and run time scheduling for parallelism |
US6393550B1 (en) * | 1993-12-30 | 2002-05-21 | Intel Corporation | Method and apparatus for pipeline streamlining where resources are immediate or certainly retired |
JP3547482B2 (ja) * | 1994-04-15 | 2004-07-28 | 株式会社日立製作所 | 情報処理装置 |
US5555432A (en) * | 1994-08-19 | 1996-09-10 | Intel Corporation | Circuit and method for scheduling instructions by predicting future availability of resources required for execution |
US5933627A (en) * | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
US5848256A (en) * | 1996-09-30 | 1998-12-08 | Institute For The Development Of Emerging Architectures, L.L.C. | Method and apparatus for address disambiguation using address component identifiers |
US5864341A (en) * | 1996-12-09 | 1999-01-26 | International Business Machines Corporation | Instruction dispatch unit and method for dynamically classifying and issuing instructions to execution units with non-uniform forwarding |
US5870580A (en) * | 1996-12-13 | 1999-02-09 | Advanced Micro Devices, Inc. | Decoupled forwarding reorder buffer configured to allocate storage in chunks for instructions having unresolved dependencies |
US5923862A (en) * | 1997-01-28 | 1999-07-13 | Samsung Electronics Co., Ltd. | Processor that decodes a multi-cycle instruction into single-cycle micro-instructions and schedules execution of the micro-instructions |
US6144982A (en) * | 1997-06-25 | 2000-11-07 | Sun Microsystems, Inc. | Pipeline processor and computing system including an apparatus for tracking pipeline resources |
US5958041A (en) * | 1997-06-26 | 1999-09-28 | Sun Microsystems, Inc. | Latency prediction in a pipelined microarchitecture |
US5964867A (en) * | 1997-11-26 | 1999-10-12 | Digital Equipment Corporation | Method for inserting memory prefetch operations based on measured latencies in a program optimizer |
US6360315B1 (en) * | 1999-02-09 | 2002-03-19 | Intrinsity, Inc. | Method and apparatus that supports multiple assignment code |
US6601162B1 (en) * | 2000-01-19 | 2003-07-29 | Kabushiki Kaisha Toshiba | Processor which executes pipeline processing having a plurality of stages and which has an operand bypass predicting function |
US6907520B2 (en) * | 2001-01-11 | 2005-06-14 | Sun Microsystems, Inc. | Threshold-based load address prediction and new thread identification in a multithreaded microprocessor |
US6820173B1 (en) * | 2001-02-23 | 2004-11-16 | Nvidia Corporation | Data prefetcher with predictor capabilities |
JP3577052B2 (ja) * | 2002-03-19 | 2004-10-13 | 株式会社東芝 | 命令発行装置及び命令発行方法 |
US7366877B2 (en) * | 2003-09-17 | 2008-04-29 | International Business Machines Corporation | Speculative instruction issue in a simultaneously multithreaded processor |
-
2003
- 2003-09-17 US US10/664,384 patent/US7366877B2/en not_active Expired - Fee Related
-
2004
- 2004-07-30 CN CNB2004100702617A patent/CN1328657C/zh not_active Expired - Fee Related
-
2008
- 2008-04-17 US US12/105,091 patent/US7725684B2/en not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5193156A (en) * | 1988-02-23 | 1993-03-09 | Mitsubishi Denki Kabushiki Kaisha | Data processor with pipeline which disables exception processing for non-taken branches |
US5872947A (en) * | 1995-10-24 | 1999-02-16 | Advanced Micro Devices, Inc. | Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions |
US5909566A (en) * | 1996-12-31 | 1999-06-01 | Texas Instruments Incorporated | Microprocessor circuits, systems, and methods for speculatively executing an instruction using its most recently used data while concurrently prefetching data for the instruction |
US6442678B1 (en) * | 1998-12-31 | 2002-08-27 | Intel Corporation | Method and apparatus for providing data to a processor pipeline |
US20020112228A1 (en) * | 1999-12-29 | 2002-08-15 | Granston Elana D. | Method for collapsing the prolog and epilog of software pipelined loops |
WO2002050667A2 (en) * | 2000-12-20 | 2002-06-27 | Intel Corporation | Speculative register adjustment |
Also Published As
Publication number | Publication date |
---|---|
US7725684B2 (en) | 2010-05-25 |
US20050060518A1 (en) | 2005-03-17 |
CN1598763A (zh) | 2005-03-23 |
US20080189521A1 (en) | 2008-08-07 |
US7366877B2 (en) | 2008-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1328657C (zh) | 在计算机处理器中发出指令的方法以及计算机处理器 | |
CN108170471B (zh) | 基于类型的优先化指令 | |
KR100871956B1 (ko) | 다중 스레드 초장 명령어 프로세서, 명령 처리 방법 및 컴파일러 | |
CN106104481B (zh) | 用于执行确定性和机会性多线程的系统和方法 | |
CN109101276B (zh) | 在cpu中执行指令的方法 | |
EP0813145B1 (en) | Pipelined instruction dispatch unit in a superscalar processor | |
US20120079255A1 (en) | Indirect branch prediction based on branch target buffer hysteresis | |
EP2159689A1 (en) | Instruction execution controller and instruction execution control method | |
CN101681259A (zh) | 用于使用局部条件码寄存器以加速管线处理器中的条件指令执行的系统和方法 | |
US5684971A (en) | Reservation station with a pseudo-FIFO circuit for scheduling dispatch of instructions | |
CN113467830A (zh) | 具有时延移位器的处理器和使用所述处理器的控制方法 | |
WO2021218633A1 (zh) | Cpu指令处理方法、控制器和中央处理单元 | |
EP4020189A1 (en) | Methods, systems, and apparatuses for a scalable reservation station implementing a single unified speculation state propagation and execution wakeup matrix circuit in a processor | |
US6988185B2 (en) | Select-free dynamic instruction scheduling | |
CN114168202B (zh) | 指令调度方法、指令调度装置、处理器及存储介质 | |
KR100431975B1 (ko) | 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템 | |
US7328327B2 (en) | Technique for reducing traffic in an instruction fetch unit of a chip multiprocessor | |
EP4020170A1 (en) | Methods, systems, and apparatuses to optimize partial flag updating instructions via dynamic two-pass execution in a processor | |
US20040006682A1 (en) | Processor and instruction control method | |
US5784639A (en) | Load buffer integrated dynamic decoding logic | |
US20190057093A1 (en) | Ranking items | |
CN113918225A (zh) | 指令预测方法、指令数据处理装置、处理器以及存储介质 | |
EP3278212A1 (en) | Parallelized execution of instruction sequences based on premonitoring | |
JP2877531B2 (ja) | 並列演算処理装置 | |
EP2843543B1 (en) | Arithmetic processing device and control method of arithmetic processing device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070725 |