CN1629799A - 用于超前执行下的结果推测的方法和装置 - Google Patents
用于超前执行下的结果推测的方法和装置 Download PDFInfo
- Publication number
- CN1629799A CN1629799A CNA2004100913321A CN200410091332A CN1629799A CN 1629799 A CN1629799 A CN 1629799A CN A2004100913321 A CNA2004100913321 A CN A2004100913321A CN 200410091332 A CN200410091332 A CN 200410091332A CN 1629799 A CN1629799 A CN 1629799A
- Authority
- CN
- China
- Prior art keywords
- instruction
- data
- register
- processor
- significance bit
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 13
- 230000003139 buffering effect Effects 0.000 claims description 2
- 231100000331 toxic Toxicity 0.000 claims 4
- 230000002588 toxic effect Effects 0.000 claims 4
- 230000001419 dependent effect Effects 0.000 abstract 1
- 230000015654 memory Effects 0.000 description 20
- 230000006870 function Effects 0.000 description 8
- 241001269238 Data Species 0.000 description 5
- 231100000572 poisoning Toxicity 0.000 description 5
- 230000000607 poisoning effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000008034 disappearance Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000012546 transfer Methods 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, 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, look ahead
- G06F9/3824—Operand accessing
-
- 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, 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, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- 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, 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, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明公开了用于在超前推测执行下使用结果推测的数据的方法和装置。在一个实施例中,来自正被超前执行的指令的未提交的目标数据可以被保存在预置数据表中。该预置数据表可以由指令缓冲器中的行索引,所述指令缓冲器包含用于超前执行的指令。当在超前执行之后,指令被重新执行时,可以从预置数据表中获得有效的目标数据,并且该目标数据可以作为零时钟旁路的一部分来提供,以支持并行的重新执行。这样可以实现相依指令的并行执行。在其它的实施例中,预置数据表可以是对于目标寄存器可搜索的内容可定址存储器,并且为一般的推测执行提供目标数据。
Description
技术领域
本发明一般地涉及微处理器,更具体地说,本发明涉及具有超前(run-ahead)推测执行能力的微处理器。
背景技术
现代的微处理器在其体系结构中可以支持超前执行。超前执行是一种这样的机制,其将指令的正常执行挂起,并且以推测的方式处理后续的指令流。在一个重要的示例中,在遭遇到数据相依性停滞(data-dependencystall)之后可以进入超前执行。在一些实现方式中,超前执行支持加载提升(load boosting)(加载预取,load prefetching),并且不试图利用由超前执行所产生的任何数据。在其它的实现方式中,超前执行可以使用在超前执行期间所产生的,并且由旁路网络(bypass network)所提供的数据。由于旁路网络的深度有限,这些结果最后都被丢掉了,并且相关联的目标寄存器被标注为“中毒的”,以避免启动依赖于这些中毒寄存器的加载。增大旁路网络的深度可以使超前执行更有效,但是要以极大地提高电路复杂性为代价。
发明内容
根据本发明的一个方面,提供了一种处理器,该处理器包括用于保存第一指令和第二指令的指令缓冲器,以及由所述指令缓冲器索引的预置数据表,该预置数据表用于在正常执行期间为所述第一指令的第一目标寄存器存储第一数据,并且用于在重新执行期间,将所述第一数据提供给所述第二指令。
根据本发明的另一方面,提供了一种方法,该方法包括:缓冲第一指令和第二指令;在正常执行期间,在表中存储来自所述第一指令的第一数据;以及在重新执行期间,将所述第一数据提供给所述第二指令。
根据本发明的又一方面,提供了一种系统,该系统包括处理器、用于将所述处理器耦合到输入输出设备的接口和被耦合到所述接口和所述处理器的音频输入输出设备,所述处理器包括用于保存第一指令和第二指令的指令缓冲器,以及由所述指令缓冲器索引的预置数据表,所述预置数据表用于在正常执行期间,为所述第一指令的第一目标寄存器存储第一数据,并且在重新执行期间,将所述第一数据提供给所述第二指令。
根据本发明的再一方面,提供了一种处理器,该处理器包括:用于缓冲第一指令和第二指令的装置;用于在正常执行期间,在表中存储来自所述第一指令的第一数据的装置;以及用于在重新执行期间,将所述第一数据提供给所述第二指令的装置。
附图说明
在附图中,示例性而非限制性地示出了本发明,其中相同的标号指代相似的元件,在附图中:
图1是根据一个实施例示出了预置数据表(advance data table)的处理器的示意图。
图2是根据一个实施例示出了由退耦和重放缓冲器索引的预置数据表的图。
图3A和图3B是根据本发明一个实施例的在正常执行和重新执行中的代码片段。
图4是根据本发明一个实施例的支持推测执行的预置数据表的图。
图5是根据本发明一个实施例示出了在多发射(multi-issue)流水线中的旁路路径的图。
图6A和图6B是根据本发明的两个实施例的包括支持预置数据表的处理器的系统的示意图。
具体实施方式
以下的说明描述了用于存储由指令的超前执行所产生的数据的技术,其中所述数据随后可以在这些指令的重新执行期间被使用。在以下说明中,为了更全面的理解本发明,提出了诸如逻辑实现、软件模块分配、总线信令技术的许多具体的细节,以及操作的细节。但是,本领域的技术人员将会认识到,没有这些具体细节也可以实现本发明。在其它的示例中,为了不模糊本发明,没有详细地示出控制结构、门电平电路和全部的软件指令序列。根据已包括的说明,本领域的普通技术人员无需过多的实验就可以实现适当的功能性。在某些实施例中,本发明以Itanium处理器家族(IPF)可兼容处理器(例如由Intel公司生产的处理器)的形式被公开。但是,在诸如Pentium家族可兼容处理器的其它类型的处理器中也可以实现本发明,所述处理器可能希望在随后的重新执行期间再次使用在超前执行期间所产生的数据。
现在参考图1,根据一个实施例,示出了包括预置数据表的处理器的示意图。该处理器除了系统存储器110之外,还具有多种缓存级别。在一个实施例中,示出了三种缓存级别,但是在其它的实施例中,可以使用不同数目的缓存级别以及它们之间的相互连接。图1的处理器包括一个三级(L3)缓存120、一个二级(L2)缓存124以及分开的一级(L1)数据缓存128和L1指令缓存130。L1指令缓存130还可以包括用于支持预取和取操作的电路系统。
已经被取出的指令可以被放置到指令缓冲器中。在图1的实施例中,指令缓冲器采用了退耦和重放缓冲器(DRB)134的形式。在其它的实施例中,指令缓冲器可以是重排序缓冲器(ROB)或者其它种类的指令缓冲器。DRB 134可以支持处理器的超前执行。在一个实施例中,一旦DRB134中的指令遭遇到诸如长延迟(long-latency)缓存缺失的数据相依性停滞,就可以发射后续指令以用于推测执行,并为防止数据和加载紊乱而采取某些安全措施。一旦解决了数据相依性停滞,处理器则可以在执行流水线中清除掉推测状态,并且在停滞点处,从当前已完成指令开始重新执行(重放)所述后续指令。
被耦合到DRB 134的可以是预置数据表(ADT)138。在一个实施例中,ADT 138可以为目标寄存器存储尚未被提交(commit)的数据。该数据可以有助于减少延迟泡(latency bubble),并且在上述重新执行的过程期间,有助于增强并行执行指令的能力。
寄存器堆栈引擎(RSE)142可以与寄存器组146协同工作,以允许在每个任务(每种功能)的基础上重新分配所需的寄存器。通过基于功能的要求为该功能分配寄存器,可以使若干功能的寄存器内容同时驻留在寄存器146之内。当可用的物理寄存器要比新功能所要求的空间小时,RSE142可以将非当前功能的内容转移到存储器110中。
执行单元150可以包括多个专用单元,例如整数单元、浮点单元、分支单元等等。执行单元150可以从寄存器146、ADT 138或旁路网络中得到源寄存器数据。旁路控制电路可以对给定指令应从这三种源中的哪一个取得其源寄存器数据进行确定和选择。
现在参考图2,根据一个实施例,示出了由退耦和重放缓冲器索引的预置数据表的图。在一个实施例中,DRB 210最多可以存储64条指令,由DRB槽号0到63来索引。在其它的实施例中,可以存储其它数目的指令。作为示例,可以在DRB槽5中存储指令212。DRB 210中的每条指令都可以具有与其相关联的一个DRB有效位。作为示例,指令212可以具有与其相关联的DRB有效位214。该DRB有效位可以指示该指令的某些方面。在一个实施例中,如果指令的执行产生了有效目标数据并将其存储在ADT 250中,则可以设置DRB有效位。另外,DRB有效位可以在重新执行期间被用来控制指令的发射以用于并行执行。被发现设置为无效的DRB有效位可以被解释为:任何数据相依性都不再重要,而且不使用ADT 250中的任何相应的目标数据。在一个实施例中,DRB 210中的指令的位置可以一直保持,直到在指令退休时该指令的实例被释放。
为了利用DRB 210更好地支持超前执行,可以使用ADT 250。在一个实施例中,ADT 250中的条目可以由DRB槽号来索引,但是在其它的实施例中也可以使用其它的索引方法。ADT 250中的每个条目都可以包含未提交的目标数据,该目标数据打算供给相关联指令的目标寄存器(目的寄存器)使用。例如,在ADT 250的DRB槽5中,可以存储打算供给指令212的目标寄存器使用的目标数据254。每个条目还可以包括数据有效位和not-a-thing(NAT)位。在一个实施例中,数据有效位可以部分地从相应指令的源寄存器的中毒位中获得。数据有效位也可以部分地从指令的相关联的判定寄存器(predicate register)的有效性状态中获得。这里,“中毒”这一状况可能指示出寄存器可能具有当前未满足的数据相依性。在其它实施例中,数据有效位也可以通过其它的数据有效性度量来设置。数据有效位可以在非推测(例如重新执行)模式期间被用来控制数据旁路。在一个实施例中,NAT位可以指示延期异常(deferred exception)的存在。
已经产生了被放置到ADT 250中去的有效目标数据的指令在重新执行期间还可以被重新执行。可以将在重新执行期间所产生的目标数据与之前存储在ADT 250中的目标数据相比较。在ADT 250中的目标数据与当前重新执行的结果不匹配的情况下,任何从ADT 250中使用过该目标数据的指令都会被陷入(trap),并被重新执行。换句话说,预置的目标数据不能确保是正确的,但是在重新执行过程期间核实其正确性。
现在参考图3A和3B,根据本发明的一个实施例,示出了在正常执行和重新执行中的代码片段。(指令按如下方式示出:在“←”符号之前是目标寄存器,在“←”符号之后是源寄存器。)图3A表中的第一列指示DRB槽号,第二列是指令,第三列是在执行期间的相对时钟周期。对于这个示例,令从L1缓存的加载延迟为两个时钟周期。在正常执行期间,槽21中的加载指令不仅在L1缓存,而且在L2缓存中也缺失,表明为了完成这次到寄存器r30的加载,有相当大的延迟。这种情况本身不会造成停滞状况,直到后续的指令尝试从r30中获得源数据时才会造成停滞。这种停滞是随着槽22中的加法指令发生的。因而,处理器从槽22中的加法指令开始启动超前执行。在槽21和22中的指令不可以在ADT中存储目标数据,因为它们的数据相依性未被满足。但是,在槽23、24、25和26中的指令可以在ADT中存储数据,这是因为在该示例中,加载指令在L1缓存中命中,在为它们所分配的两个时钟周期中有足够的时间来完成。所述超前执行可以在这种方式下持续进行,直到槽21中的加载指令最终完成。
当槽21中的加载指令最终完成时,那些从槽22中的加法指令开始的已经被超前执行的指令需要被重新执行。图3B示出了重新执行的一个实施例,其中该图的各个列与图3A中的定义相同。图3B的实施例假设处理器在同一时钟周期期间最多可以发射四条指令。在其它的实施例中,在同一时钟周期期间可以发射其它数目的指令。在非推测模式中的重新执行期间,由于在槽23和25中的两次加载都在L1缓存中命中,所以指令执行概况将与超前执行期间相同。重新执行可以从槽22中的加法指令开始。如图3A的示例所示,由于不存在数据相依性,所以指令23可以同指令22并行发射。由于在槽23处的加载指令已经将其预置的r60的结果存储在ADT中,所以在槽24处的加指令也可以被并行的发射。相似地,由于在槽24处的加指令已经将其预置的r50的结果存储在ADT中,所以在槽25处的加载指令也可以被并行的发射。由于本实施例的处理器在同一时钟周期最多发射四条指令的限制,额外的并行指令的发射只能被排除。但是,由于在槽25处的加载指令已经将其预置的r90的结果存储在ADT中,所以只要在一个时钟周期之后就可以发射槽26中的减法指令。在该示例中,由于预置的结果被存储在ADT中,所以重新执行可以在处理器的发射限制之下,以零时钟延迟来发生。这使得重新执行可以只花费两个时钟周期,而原来的执行需要六个时钟周期。
图4的增强型ADT 400中示出了用于图3A和图3B示例的ADT中的目标数据条目,下面将对此进行探讨。
现在参考图4,根据本发明的一个实施例,示出了支持推测执行的预置数据表的图。图4的ADT 400与图2实施例中的ADT类似,只附加了两个新的列来支持一般的推测执行。在目标寄存器标识符字段,可以放置标识符号码,用来代表在相应的DRB槽中的指令的目标寄存器。在寄存器标识符有效字段中,当在该槽内的目标数据被初次输入时,可以将一位设置为有效。然后,当为另一个槽的另一指令输入以同一寄存器为目标的数据时,则可以将该位设为无效。这就确保了对于一个给定的寄存器,每次最多只会出现一个其寄存器标识符有效字段设置为有效的目标数据。这样的寄存器标识符有效位可以在推测(例如超前)模式期间被用来控制数据旁路。
在简单的超前执行中,超前执行被旁路网络的深度所限制。但是,一旦利用推测结果填充了ADT,该ADT可以被用来以旁路形式为使用该目标数据的任意后续指令提供有效的预置结果。在推测执行期间,可以将ADT 400作为内容可定址存储器(CAM),在目标寄存器标识符字段上对其进行搜索410。在ADT中所找到的任意目标寄存器标识符有效位设置为有效的目标数据都可以被消耗型指令所使用。与传统的旁路网络不同,从ADT 400接收旁路数据,这可以支持与产生指令分开并相距很多个指令时钟周期的消耗型指令,而所述传统的旁路网络只能向前延伸几个指令时钟周期。
为了概括各种有效位的一个实施例的获得和利用,当相关联指令的执行产生了有效的目标数据并将其存储到ADT中时,DRB有效位可以被设置(有效)。如果DRB有效位被清除(无效),则数据相依性可以不再有效,并且ADT中的任意相应数据都不应被使用。DRB有效位可以在重新执行模式期间为并行执行控制指令的发射。相反,ADT数据有效位可以通过对相应指令的源寄存器的中毒位的考虑,以及对相应指令的判定寄存器(如果有)的值的考虑来获得。ADT数据有效位可以在非推测(例如重新执行)执行模式期间控制数据旁路。最后,当相应的指令将有效的数据写入相应的目标寄存器时,ADT寄存器标识符有效位可以被设置(有效),并且当任意其它的指令写入同一相应的目标寄存器时,ADT寄存器标识符有效位可以被清除(无效)。在推测(包括超前)执行模式期间,可以使用ADT寄存器标识符有效位来控制数据旁路。
现在参考图5,根据本发明的一个实施例,示出了在多发射流水线中的旁路路径的图。图5的流水线在每个指令时钟周期期间,在标注为管道0到管道3的路径上,最多可以发射四条指令。当按正常的执行顺序来考虑时,放置在管道0中的指令通常应该是要被执行的最后一条指令。因此,用于在流水线0中执行的指令由于可能依赖于之前的三条指令,需要侧路(零时钟)旁路路径520、522和524。相似地,应该有来自一个指令时钟周期之前所发射的指令的旁路路径532、526、528和530,以及来自两个指令时钟周期之前所发射的指令的旁路路径534、536、538和540。旁路路径的数目可以只由电路复杂性的考虑所限制,但是将旁路网络扩展到超过若干流水线级数时,该复杂性可能高得惊人。
与传统的旁路网络的复杂性相比,使用来自ADT 510的旁路路径512,无需扩展旁路网络,就可以支持深得多的指令推测。存储在ADT510中的目标数据可以被旁路输入到管道0中,并且支持与之前将目标数据写入ADT 510的产生指令分隔很远的消耗型指令。值得注意的是,ADT旁路路径512可以只需要覆盖那些不被常规的旁路路径所支持的旁路情况。在任意情况下,一旦在常规旁路中可以获得真实的(例如非推测的)数据,就可以不使用推测的ADT旁路数据。
现在参考图6A和6B,根据本发明的两个实施例,示出了包括处理器的系统的示意图,所述处理器支持预置数据表。图6A的系统一般地示出了这样的系统,该系统中的处理器、存储器和输入/输出设备由系统总线互连,而图6B的系统一般地示出了这样的系统,该系统中的处理器、存储器和输入/输出设备由多个点到点接口互连。
图6A的系统可以包括若干处理器,其中为了清楚,只示出了两个处理器40、60。处理器40、60可以包括一级缓存42、62。图6A的系统可以具有经由接口44、64、12、8,通过系统总线6所连接的若干功能模块。在一个实施例中,系统总线6可以是由Intel公司所出品的Pentium类微处理器所使用的前端总线(FSB)。在其它的实施例中,也可以使用其它的总线。在一些实施例中,存储器控制器34和总线桥32可以被共同称为芯片集。在一些实施例中,芯片集的多种功能可以以与图6A实施例所示不同的方式,被划分到多个物理芯片中去。
存储器控制器34可以允许处理器40、60从系统存储器10和从基本输入/输出系统(BIOS)可擦写可编程只读存储器(EPROM)36进行读取和写入。在一些实施例中,BIOS EPROM 36可以利用闪存。存储器控制器34可以包括总线接口8,用于允许存储器从/向系统总线6上的总线代理读取/写入将要运载的数据。存储器控制器34还可以通过高性能图形接口39与高性能图形电路38连接起来。在某些实施例中,高性能图形接口39可以是高级图形端口AGP接口。存储器控制器34可以通过高性能图形接口39,将从系统存储器10读取的数据定向到高性能图形电路38。
图6B的系统也可以包括若干处理器,其中为了清楚,只示出了两个处理器70、80。处理器70、80可以各自包括本地存储器控制中心(MCH)72、82,用于与存储器2、4连接起来。处理器70、80可以使用点到点接口电路78、88,经由点到点接口50交换数据。处理器70、80可以使用点到点接口电路(P-P)76、94、86、98,经由各自的点到点接口52、54分别与芯片集90交换数据。芯片集90还可以经由高性能图形接口92与高性能图形电路38交换数据。
在图6A的系统中,总线桥32可以允许系统总线6和总线16之间的数据交换,在一些实施例中,所述总线16可以是工业标准体系结构(ISA)总线或外设部件互连(PCI)总线。在图6B的系统中,芯片集90可以经由总线接口96与总线16交换数据。在任一系统中,总线16上都可以有各种输入/输出I/O设备14,在一些实施例中,所述I/O设备14包括低性能图形控制器、视频控制器和网络控制器。在一些实施例中,可以使用另一个总线桥18来允许总线16和总线20之间的数据交换。在一些实施例中,总线20可以是小型计算机系统接口(SCSI)总线、集成驱动电子(IDE)总线或通用串行总线(USB)总线。另外的I/O设备可以与总线20连接起来。这些I/O设备可以包括键盘和光标控制设备22,包括鼠标、音频I/O 24,包括调制解调器和网络接口的通信设备26,以及数据存储设备28。软件代码30可以被存储在数据存储设备28上。在一些实施例中,数据存储设备28可以是固定磁盘、软盘驱动器、光盘驱动器、磁光盘驱动器、磁带或包括闪存的非易失性存储器。
在之前的说明书中,已经参考具体的示例性实施例对本发明进行了描述。但是,显而易见,不脱离如附加的权利要求书中所提出的本发明更广的精神和范围,可以对其进行各种修改和改变。因此,本说明书和附图应从示例性,而不是限制性的意义上来看待。
Claims (28)
1.一种处理器,包括:
用于保存第一指令和第二指令的指令缓冲器;以及
由所述指令缓冲器索引的预置数据表,该预置数据表用于在正常执行期间为所述第一指令的第一目标寄存器存储第一数据,并且用于在重新执行期间,将所述第一数据提供给所述第二指令。
2.如权利要求1所述的处理器,其中所述预置数据表包括用于所述第一数据的第一数据有效位,所述第一数据有效位是从所述第一指令的源寄存器的中毒状态中获得的。
3.如权利要求2所述的处理器,还包括流水线,当所述第二指令和第三指令使用所述第一目标寄存器作为源,并且所述第一数据有效位被设置为有效时,所述流水线在单个时钟周期期间发射所述第二指令和所述第三指令。
4.如权利要求1所述的处理器,其中所述预置数据表包括用于与所述第一数据相关联的所述第一目标寄存器的第一寄存器标识符。
5.如权利要求4所述的处理器,其中所述预置数据表包括可搜索的寄存器标识符字段,所述寄存器标识符字段包含所述第一寄存器标识符。
6.如权利要求5所述的处理器,其中所述预置数据表包括与所述第一寄存器标识符相关联的第一寄存器标识符有效位。
7.如权利要求6所述的处理器,其中当第四指令以所述第一目标寄存器为目标时,所述第一寄存器标识符有效位被设置为无效。
8.如权利要求6所述的处理器,其中当所述第一寄存器是第五指令的源寄存器,并且所述第一寄存器标识符有效位被设置为有效时,所述第一数据可以在推测执行期间被所述第五指令所使用。
9.一种方法,包括:
缓冲第一指令和第二指令;
在正常执行期间,在表中存储来自所述第一指令的第一数据;以及
在重新执行期间,将所述第一数据提供给所述第二指令。
10.如权利要求9所述的方法,还包括从所述第一指令的源寄存器的中毒状态中获得用于所述第一数据的第一数据有效位。
11.如权利要求10所述的方法,还包括当所述第二指令和第三指令使用所述第一目标寄存器作为源,并且所述第一数据有效位被设置为有效时,在单个时钟周期期间发射所述第二指令和所述第三指令。
12.如权利要求9所述的方法,其中所述存储包括存储用于与所述第一数据相关联的所述第一目标寄存器的第一寄存器标识符。
13.如权利要求12所述的方法,还包括当第四指令以所述第一目标寄存器为目标时,将第一寄存器标识符有效位设置为无效。
14.如权利要求12所述的方法,还包括当所述第一寄存器标识符有效位被设置为有效时,在推测执行期间由第五指令消耗所述第一数据。
15.一种系统,包括:
处理器,该处理器包括用于保存第一指令和第二指令的指令缓冲器,以及由所述指令缓冲器索引的预置数据表,所述预置数据表用于在正常执行期间,为所述第一指令的第一目标寄存器存储第一数据,并且在重新执行期间,将所述第一数据提供给所述第二指令;
用于将所述处理器耦合到输入输出设备的接口;以及
被耦合到所述接口和所述处理器的音频输入输出设备。
16.如权利要求15所述的系统,其中所述预置数据表包括用于所述第一数据的第一数据有效位,所述第一数据有效位是从所述第一指令的源寄存器的中毒状态中获得的。
17.如权利要求16所述的系统,其中所述处理器包括流水线,当所述第二指令和第三指令使用所述第一目标寄存器作为源,并且所述第一数据有效位被设置为有效时,所述流水线在单个时钟周期期间发射所述第二指令和所述第三指令。
18.如权利要求15所述的系统,其中所述预置数据表包括用于与所述第一数据相关联的所述第一目标寄存器的第一寄存器标识符。
19.如权利要求18所述的系统,其中所述预置数据表包括可搜索的寄存器标识符字段,所述寄存器标识符字段包含所述第一寄存器标识符。
20.如权利要求19所述的系统,其中所述预置数据表包括与所述第一寄存器标识符相关联的第一寄存器标识符有效位。
21.如权利要求20所述的系统,其中当第四指令以所述第一目标寄存器为目标时,所述第一寄存器标识符有效位被设置为无效。
22.如权利要求20所述的系统,其中当所述第一寄存器是第五指令的源寄存器,并且所述第一寄存器标识符有效位被设置为有效时,所述第一数据可以在推测执行期间被所述第五指令所使用。
23.一种处理器,包括:
用于缓冲第一指令和第二指令的装置;
用于在正常执行期间,在表中存储来自所述第一指令的第一数据的装置;以及
用于在重新执行期间,将所述第一数据提供给所述第二指令的装置。
24.如权利要求23所述的处理器,还包括用于从所述第一指令的源寄存器的中毒状态中获得用于所述第一数据的第一数据有效位的装置。
25.如权利要求24所述的处理器,还包括用于当所述第二指令和第三指令使用所述第一目标寄存器作为源,并且所述第一数据有效位被设置为有效时,在单个时钟周期期间发射所述第二指令和所述第三指令的装置。
26.如权利要求23所述的处理器,其中所述用于存储的装置包括用于存储用于与所述第一数据相关联的所述第一目标寄存器的第一寄存器标识符的装置。
27.如权利要求26所述的处理器,还包括用于当第四指令以所述第一目标寄存器为目标时,将所述第一寄存器标识符有效位设置为无效的装置。
28.如权利要求26所述的处理器,还包括用于当所述第一寄存器标识符有效位被设置为有效时,在推测执行期间由第五指令消耗所述第一数据的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/739,686 US7496732B2 (en) | 2003-12-17 | 2003-12-17 | Method and apparatus for results speculation under run-ahead execution |
US10/739,686 | 2003-12-17 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1629799A true CN1629799A (zh) | 2005-06-22 |
CN1312579C CN1312579C (zh) | 2007-04-25 |
Family
ID=34677679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100913321A Expired - Fee Related CN1312579C (zh) | 2003-12-17 | 2004-11-19 | 用于超前执行下的结果推测的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7496732B2 (zh) |
CN (1) | CN1312579C (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101968734A (zh) * | 2010-10-12 | 2011-02-09 | 中国电子科技集团公司第三十八研究所 | 应用于数字信号处理器的指令缓存器 |
CN103809935A (zh) * | 2012-11-14 | 2014-05-21 | 辉达公司 | 在超前运行期间管理潜在无效结果 |
CN104978282A (zh) * | 2014-04-04 | 2015-10-14 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
US9547602B2 (en) | 2013-03-14 | 2017-01-17 | Nvidia Corporation | Translation lookaside buffer entry systems and methods |
US9569214B2 (en) | 2012-12-27 | 2017-02-14 | Nvidia Corporation | Execution pipeline data forwarding |
CN103907090B (zh) * | 2011-11-10 | 2017-02-15 | 甲骨文国际公司 | 降低用于支持未命中先行的硬件成本的方法和装置 |
US9582280B2 (en) | 2013-07-18 | 2017-02-28 | Nvidia Corporation | Branching to alternate code based on runahead determination |
US9632976B2 (en) | 2012-12-07 | 2017-04-25 | Nvidia Corporation | Lazy runahead operation for a microprocessor |
US9875105B2 (en) | 2012-05-03 | 2018-01-23 | Nvidia Corporation | Checkpointed buffer for re-entry from runahead |
US9880846B2 (en) | 2012-04-11 | 2018-01-30 | Nvidia Corporation | Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries |
CN107885530A (zh) * | 2016-11-14 | 2018-04-06 | 上海兆芯集成电路有限公司 | 提交高速缓存行的方法和指令高速缓存 |
US10001996B2 (en) | 2012-10-26 | 2018-06-19 | Nvidia Corporation | Selective poisoning of data during runahead |
US10108424B2 (en) | 2013-03-14 | 2018-10-23 | Nvidia Corporation | Profiling code portions to generate translations |
US10146545B2 (en) | 2012-03-13 | 2018-12-04 | Nvidia Corporation | Translation address cache for a microprocessor |
US10241810B2 (en) | 2012-05-18 | 2019-03-26 | Nvidia Corporation | Instruction-optimizing processor with branch-count table in hardware |
US10324725B2 (en) | 2012-12-27 | 2019-06-18 | Nvidia Corporation | Fault detection in instruction translations |
CN109947479A (zh) * | 2019-01-29 | 2019-06-28 | 安谋科技(中国)有限公司 | 指令执行方法及其处理器、介质和系统 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060149931A1 (en) * | 2004-12-28 | 2006-07-06 | Akkary Haitham | Runahead execution in a central processing unit |
US8266413B2 (en) * | 2006-03-14 | 2012-09-11 | The Board Of Trustees Of The University Of Illinois | Processor architecture for multipass processing of instructions downstream of a stalled instruction |
CN101449577A (zh) * | 2006-05-19 | 2009-06-03 | 安布克斯英国有限公司 | 环境体验指令生成 |
US20080016325A1 (en) * | 2006-07-12 | 2008-01-17 | Laudon James P | Using windowed register file to checkpoint register state |
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 |
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 |
US8639886B2 (en) | 2009-02-03 | 2014-01-28 | International Business Machines Corporation | Store-to-load forwarding mechanism for processor runahead mode operation |
US20140325156A1 (en) * | 2011-12-19 | 2014-10-30 | The Regents Of The University Of California | Long Latency Tolerant Decoupled Memory Hierarchy for Simpler and Energy Efficient Designs |
US9645929B2 (en) | 2012-09-14 | 2017-05-09 | Nvidia Corporation | Speculative permission acquisition for shared memory |
US9823931B2 (en) | 2012-12-28 | 2017-11-21 | Nvidia Corporation | Queued instruction re-dispatch after runahead |
US10949210B2 (en) | 2018-05-02 | 2021-03-16 | Micron Technology, Inc. | Shadow cache for securing conditional speculative instruction execution |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6598156B1 (en) * | 1999-12-23 | 2003-07-22 | Intel Corporation | Mechanism for handling failing load check instructions |
US6658559B1 (en) * | 1999-12-31 | 2003-12-02 | Intel Corporation | Method and apparatus for advancing load operations |
GB2367406B (en) * | 2000-06-13 | 2002-06-05 | Siroyan Ltd | Predicated execution of instructions in processors |
US7114059B2 (en) * | 2001-11-05 | 2006-09-26 | Intel Corporation | System and method to bypass execution of instructions involving unreliable data during speculative execution |
US6944754B2 (en) * | 2002-10-02 | 2005-09-13 | Wisconsin Alumni Research Foundation | Method and apparatus for parallel execution of computer software using a distilled program |
-
2003
- 2003-12-17 US US10/739,686 patent/US7496732B2/en not_active Expired - Fee Related
-
2004
- 2004-11-19 CN CNB2004100913321A patent/CN1312579C/zh not_active Expired - Fee Related
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101968734B (zh) * | 2010-10-12 | 2012-07-18 | 中国电子科技集团公司第三十八研究所 | 应用于数字信号处理器的指令缓存器 |
CN101968734A (zh) * | 2010-10-12 | 2011-02-09 | 中国电子科技集团公司第三十八研究所 | 应用于数字信号处理器的指令缓存器 |
CN103907090B (zh) * | 2011-11-10 | 2017-02-15 | 甲骨文国际公司 | 降低用于支持未命中先行的硬件成本的方法和装置 |
US10146545B2 (en) | 2012-03-13 | 2018-12-04 | Nvidia Corporation | Translation address cache for a microprocessor |
US9880846B2 (en) | 2012-04-11 | 2018-01-30 | Nvidia Corporation | Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries |
US9875105B2 (en) | 2012-05-03 | 2018-01-23 | Nvidia Corporation | Checkpointed buffer for re-entry from runahead |
US10241810B2 (en) | 2012-05-18 | 2019-03-26 | Nvidia Corporation | Instruction-optimizing processor with branch-count table in hardware |
US10628160B2 (en) | 2012-10-26 | 2020-04-21 | Nvidia Corporation | Selective poisoning of data during runahead |
US10001996B2 (en) | 2012-10-26 | 2018-06-19 | Nvidia Corporation | Selective poisoning of data during runahead |
US9740553B2 (en) | 2012-11-14 | 2017-08-22 | Nvidia Corporation | Managing potentially invalid results during runahead |
CN103809935A (zh) * | 2012-11-14 | 2014-05-21 | 辉达公司 | 在超前运行期间管理潜在无效结果 |
US9632976B2 (en) | 2012-12-07 | 2017-04-25 | Nvidia Corporation | Lazy runahead operation for a microprocessor |
US9891972B2 (en) | 2012-12-07 | 2018-02-13 | Nvidia Corporation | Lazy runahead operation for a microprocessor |
US10324725B2 (en) | 2012-12-27 | 2019-06-18 | Nvidia Corporation | Fault detection in instruction translations |
US9569214B2 (en) | 2012-12-27 | 2017-02-14 | Nvidia Corporation | Execution pipeline data forwarding |
US9547602B2 (en) | 2013-03-14 | 2017-01-17 | Nvidia Corporation | Translation lookaside buffer entry systems and methods |
US10108424B2 (en) | 2013-03-14 | 2018-10-23 | Nvidia Corporation | Profiling code portions to generate translations |
US9804854B2 (en) | 2013-07-18 | 2017-10-31 | Nvidia Corporation | Branching to alternate code based on runahead determination |
US9582280B2 (en) | 2013-07-18 | 2017-02-28 | Nvidia Corporation | Branching to alternate code based on runahead determination |
CN104978282B (zh) * | 2014-04-04 | 2019-10-01 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN104978282A (zh) * | 2014-04-04 | 2015-10-14 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN107992331A (zh) * | 2016-11-14 | 2018-05-04 | 上海兆芯集成电路有限公司 | 处理器及操作处理器的方法 |
CN107885530A (zh) * | 2016-11-14 | 2018-04-06 | 上海兆芯集成电路有限公司 | 提交高速缓存行的方法和指令高速缓存 |
CN107885530B (zh) * | 2016-11-14 | 2020-06-23 | 上海兆芯集成电路有限公司 | 提交高速缓存行的方法和指令高速缓存 |
CN107992331B (zh) * | 2016-11-14 | 2020-10-23 | 上海兆芯集成电路有限公司 | 处理器及操作处理器的方法 |
CN109947479A (zh) * | 2019-01-29 | 2019-06-28 | 安谋科技(中国)有限公司 | 指令执行方法及其处理器、介质和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN1312579C (zh) | 2007-04-25 |
US20050138332A1 (en) | 2005-06-23 |
US7496732B2 (en) | 2009-02-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1312579C (zh) | 用于超前执行下的结果推测的方法和装置 | |
US10656948B2 (en) | Processor system and method based on instruction read buffer | |
CN1304943C (zh) | 同时多线程处理器及提高其性能的方法 | |
JP2597811B2 (ja) | データ処理システム | |
CN100342325C (zh) | 减少多线程处理器中寄存器文件端口的方法和装置 | |
US6651163B1 (en) | Exception handling with reduced overhead in a multithreaded multiprocessing system | |
JP2620495B2 (ja) | スーパスカラ処理システムおよび方法 | |
US6687810B2 (en) | Method and apparatus for staggering execution of a single packed data instruction using the same circuit | |
US6574725B1 (en) | Method and mechanism for speculatively executing threads of instructions | |
US7584346B1 (en) | Method and apparatus for supporting different modes of multi-threaded speculative execution | |
US8627047B2 (en) | Store data forwarding with no memory model restrictions | |
JPH07152559A (ja) | パイプ制御及びレジスタ変換機能を増強したスーパースカラーパイプライン式のプロセッサ | |
WO2003003196A2 (en) | A multithreaded processor capable of implicit multithreaded execution of a single-thread program | |
JP2001356903A (ja) | マルチスレッド・プロセッサ内でのパイプライン・ステージのフラッシュ方法および装置 | |
US7257700B2 (en) | Avoiding register RAW hazards when returning from speculative execution | |
CN107851017B (zh) | 用于传输多个数据结构的设备和方法 | |
US5740416A (en) | Branch processing unit with a far target cache accessed by indirection from the target cache | |
KR101077425B1 (ko) | 효율적 인터럽트 리턴 어드레스 저장 메커니즘 | |
CN1731346A (zh) | 微处理器的整数单元中五级容错流水结构的实现方法 | |
JPH06236275A (ja) | スーパースカラ・プロセッサ・システムにおける非逐次命令ディスパッチおよび実行のための方法およびシステム | |
CN1900904A (zh) | 用于改善按次序的处理器的性能的方法和系统 | |
US5713039A (en) | Register file having multiple register storages for storing data from multiple data streams | |
CN1306433C (zh) | 用于提供快速远地寄存器访问的方法和设备 | |
Uvieghara et al. | An experimental single-chip data flow CPU | |
US20120144393A1 (en) | Multi-issue unified integer scheduler |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070425 Termination date: 20141119 |
|
EXPY | Termination of patent right or utility model |