CN1137435C - 包括指令重放的处理器流水线 - Google Patents
包括指令重放的处理器流水线 Download PDFInfo
- Publication number
- CN1137435C CN1137435C CNB008028141A CN00802814A CN1137435C CN 1137435 C CN1137435 C CN 1137435C CN B008028141 A CNB008028141 A CN B008028141A CN 00802814 A CN00802814 A CN 00802814A CN 1137435 C CN1137435 C CN 1137435C
- Authority
- CN
- China
- Prior art keywords
- instruction
- unit
- queue
- backend
- queue unit
- 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
- 238000000034 method Methods 0.000 claims abstract description 42
- 230000004044 response Effects 0.000 claims abstract description 5
- 230000005540 biological transmission Effects 0.000 claims description 7
- 239000000872 buffer Substances 0.000 claims description 3
- 125000004122 cyclic group Chemical group 0.000 claims 1
- 230000008569 process Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000013519 translation 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 or look ahead
-
- 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/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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/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 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- 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/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
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
这是1997年12月24日提出、申请号为08/998,341的专利的后续申请。
发明背景技术
发明所属领域
本发明通常涉及流水线处理器,尤其是涉及一种用于处理器流水线的重放(replay)机制。
相关技术描述
计算机和其它许多类型的机器都是围绕着一个执行在机器存储器中保存的程序指令的“处理器”运行的。可以依据指令集的复杂性对计算机和处理器进行分类,例如精简指令集计算机(“RISC”)和复杂指令集计算机(“CISC”)。体系结构是一种定义处理器硬件和处理器指令集之间接口的归类。
处理器体系结构的第一方面是它是顺序地还是无序地执行指令。从历史上来说,处理器一次执行一个指令,或是以与指令代码出现在处理器的次序相同的顺序执行指令。这个体系结构为“顺序编程模型”。一个无序体系结构执行指令的次序与程序代码在处理器出现的次序不同,即是不连续地。
软件代码的顺序特性会引起“数据相关性”和“控制相关性”。当一个随后指令对一个操作数x进行操作,且x的数据是一个先前指令的结果时,就会出现数据相关性。随后指令在先前指令的操作数上具有数据相关性。当一个指令能够产生两个供选择的指令分支而且仅执行其中的一个指令时,就出现控制相关性。一般,分支选择取决于一个条件。各种体系结构都要考虑到这些数据和控制相关性。
处理器体系结构的第二个方面是指令处理是否是“流水线的”。在流水线处理中,处理器从存储器中读取指令,并将它们传送到流水线的后端单元。流水线有几个“级”,每个级执行某些必需的或期望的功能,从而在将指令传递到下一个级之前处理该指令。例如,一个级可以读取一个指令,下一个级可以解码该指令,再下一个级可以执行解码后的指令。通常每个级都向更接近完成的方向移动指令。
流水线可以在这个方面带来好处:即在流水线的一个部分处理第一指令的同时,流水线的第二部分在处理第二指令。这样,每次能够处理不只一个指令,从而潜在地增加了处理指令的效率。
某些流水线“推测地”处理指令。推测性执行意味着在分辨有关的控制和/或数据相关性之前读取并执行指令。推测性执行首先预测如何分辨数据和/或控制相关性,并根据预测结果执行指令,然后在退出指令和由此而来的结果之前验证该预测的正确性。
检验步骤是流水线设计的难点。在流水线的后端单元,在实际分辨出全部的数据和控制相关性之前,将执行指令所产生的结果暂时保存在一个寄存器内。然后流水线检查是否有错误预测或其它问题发生,此二者即通常所说的异常。在没有执行问题时,执行指令是“退出”的,且结果保存在体系结构的寄存器中,操作被称为“提交到体系结构状态”。如果存在执行问题的话,处理器就执行一个校正程序。
执行问题是那些能够导致下列情况的问题:
(1)执行一个不应该执行的指令;
(2)没有执行一个本应执行的指令;或
(3)用错误数据执行一个指令。
为了正确处理指令流,在后续指令执行上的执行问题结果也必须是正确的。
许多现有技术的流水线处理器在检测到异常时就“停止”流水线。在可停止的指令流水线中,多个锁存器或寄存器在流水线的各个级控制进程。流水线控制器产生一个信号以启动或停用这些锁存器或寄存器。在停止期间,锁存器或寄存器是停用的,这样就不会使那些指令传送到下一级。在对造成停止的异常和它的结果进行修复之后,流水线重新启动锁存器或寄存器,并恢复流水线各个级之间的传送。
为了对一个可停止的流水线进行操作,流水线控制器需要从流水线的各个级接收状态信号,由接收的信号确定是否停止,然后广播一个信号以停止或继续进行。由于这些级中的每一个都要花费时间,执行停止功能会限制流水线的操作频率。
某些处理器流水线除了停止之外还可“重放”。重放是指当检测到异常时,重新执行指令。如果检测到异常的话,就忽视推理性结果,例如不更新体系结构状态和不退出指令。处理器校正问题并重新执行指令。
一种采用重放的处理器是产自数字设备公司的Alpha 21164微处理器。Alpha 21164仅仅停止流水线的最初三个级。如果问题发生在第三个级之后,Alpha 21164就会在修复问题之后重放整个流水线。因此Alpha 21164结合了昂贵的停止和确定何时重放所必需的复杂决策电路。即使问题可能是局部的,Alpha 21164也会重放整个流水线。如果存在几个并行执行单元,例如一个超级标量处理器,并且问题位于一个并行执行单位中,则重放整个流水线可能是低效的。
对更快处理器的需要不断地超前于现有技术。这个需要迫使处理器体系结构的所有方面在高指令吞吐量上变得更快。当前用于在流水线处理中处理异常的技术能够在实质上减少指令吞吐量。
本发明的目的是要克服或至少是减少上面提出的一个或多个问题的影响。
发明概述
本发明在一个实施例中提供了一种执行指令的方法。这种方法包含在流水线的一部分调度和执行第一和第二批指令而不用首先确定流水线该部分的级是否就绪。该方法进一步包含:确定是否遇到执行问题,并根据第一批指令遇到执行问题的判定重放第一批指令。
本发明在另一实施例中提供了一种处理器流水线。该处理器流水线包含一个前端单元,以读取一批用于执行的指令;以及一个后端单元,以执行由前端单元读取的这批指令。后端单元包含一个退出级,以确定一个指令是否有执行问题。后端单元是不能停止的。该处理器流水线还包含一个通道单元,从该退出级向该流水线的一个重放点发送一个指令遇到执行问题的指示,可以从该重放点开始重新执行指令。
按照本发明的一个方面,提供一种方法,该方法包含以下步骤:在一个流水线的一部分调度并执行第一和第二批指令,而不用首先确定这个流水线的该部分的级是否准备就绪;确定是否遇到一个执行问题;以及根据第一批指令遇到一个执行问题的判定重放第一批指令。
按照本发明的另一个方面,提供一种方法,该方法包含以下步骤:在流水线后端单元调度并执行一个发布组指令,而不必确定流水线后端单元的级是否准备好执行这些指令;确定该发布组指令是否遇到了执行问题;向流水线的一个重放点指示该发布组的哪个指令遇到了一个执行问题;以及从该重放点重新调度该发布组的指示的指令用于重新执行。
按照本发明的又一个方面,提供一种方法,该方法包含以下步骤:通过一个流水线处理器的一系列级发送要执行的多个指令,而不必确定这些级是否准备好接收这些指令;确定这多个指令中哪些执行时没有问题;向流水线处理器的一个重放点指示多个指令中的那些遇到了一个执行问题;以及从该重放点重放指示遇到一个执行问题的指令。
按照本发明的另一个方面,提供一个处理器流水线,包含:一个前端单元,以读取大量用于执行的指令;一个后端单元,以执行这大量由前端单元读取的指令,后端单元包含一个退出级以确定一个指令是否遇到了一个执行问题,后端单元是不会停止的;以及一个通道单元,用以从退出级向一个可以重新执行该指令的重放点发送一个指示,说明该指令遇到了一个执行问题。
按照本发明的又一个方面,提供一个处理器流水线,包含:一个前端单元,该前端单元适合接收指令;一个后端单元,该后端单元适合执行由前端单元接收的指令,该后端单元是不会停止的;一个队列单元,该队列单元用于接收来自于前端单元的指令,以存储处理器流水线的一个中间状态用于后端单元重放;以及一个通道单元,通过它后端单元能够从队列单元中请求一个重放。
按照本发明的再一个方面,提供一个处理器流水线包含:一个前端单元,以准备用于执行的指令;一个具有多个并行执行单元的后端单元;一个队列单元,该队列单元用于接收来自于前端单元的指令,并存储处理器流水线的一个中间状态用于后端单元重放;以及一个通道单元,通过它后端单元可以请求一个来自队列单元的部分重放。
附图简要说明
通过阅读下列详细说明并参考附图,本发明的其它目的和优点将会变得显而易见,其中:
图1从概念上说明了一种依据本发明构造和操作的流水线的一个
实施例;
图2A描绘了在图1中说明的流水线的前端单元和后端单元之间的一个队列单元的第一实施例;
图2B描绘了在图1中说明的流水线的前端单元和后端单元之间的一个队列单元的第二实施例;以及
图3A从概念上说明了图1流水线的一个特定实施例;
图3B说明了图3A中流水线的退出级的一个实施例;
图4A说明了一种依据本发明推测地执行和退出指令的方法的一个实施例;以及
图4B说明了一种依据本发明执行和退出指令的方法的另一实施例。
虽然已经通过附图示例显示了特定实施例,并在此对其进行了详细描述,然而本发明可以有各种修改和可供选择的形式。无论如何应该明白,在此说明书中的特定实施例并不是将本发明限制在公开的特定形式中,相反地,是要使全部的修改、等同和替换落在由附加权利要求书定义的本发明的精神和范围之内。
特定实施例的详细描述
本发明的实施例说明描述如下。 为了清楚起见,在本说明书中没有对实际实现的所有特征进行描述。当然在任何这种实际实施例的发展过程中,必须执行许多特定的决定以实现开发人员的特定目的,例如符合有关系统和有关商业的限制条件,这在各个实现之间是有差异的。此外,还应明白,即使这种发展工作是复杂并且费时的,它对于本发明所属领域的普通技术人员来说,为了获取本发明的优点,这也是常规任务。
图1从概念上说明了依据本发明构造和操作的一个不停止的处理器流水线10的一个实施例。流水线10通常包含一个前端单元12、一个后端单元14、和一个位于前端单元12和后端单元14之间的队列单元15。队列单元15能够储存处理器流水线的一个中间状态,后端单元14可以根据经由一个通道单元17传送的一个重放请求从该状态开始重放。
参见图1,某些实施例的队列单元15可以是后端单元14的一部分,而不是独立于后端单元14的。为了清晰起见,并进一步公开以下要求的这个发明,将把队列单元15和后端单元14作为流水线10的独立部分进行论述。虽然如此,并没有对本发明进行如此限制,并且在某些可选实施例中后端单元14可以和队列单元15合为一体。
仍然参见图1,在这个特定实施例中,前端单元12读取宏指令,并由此产生“微操作码”。一个微操作码通常是一个可以由处理器的单个执行单元(未显示)在一个或几个时钟周期内执行的指令。某些宏指令可以包含几个微操作码。因此,在宏指令和微操作码之间可以不是一一对应的。
仍然参见图1,前端单元12将宏指令解码成为微操作码,并将它们储存在队列单元15中。后端单元14执行这些由前端单元12准备好并保存在队列单元15中的指令。在下文中,指令将指的是微操作码或者是位于后端单元14的一个执行单元上的可执行指令。
仍然参见图1,一个发布组是从队列单元15中发送用于并行执行的一组指令或微操作码。发布组可以有一个或多个微操作码。在某些实施例中,在一个时钟周期内将一个发布组的微操作码写入队列单元15。保存在队列单元15中的微操作码定义流水线10的一个能进行重放的中间状态,以下将对此进行更充分地论述。
图2A说明了图1的队列单元15的一个特定实施例35。队列单元35有足够多的列33,用以输入到后端单元14的几个并行执行接口或单元(两者都未显示)中。图1的处理器10向一个独立的执行单元发送队列单元35每一列33的微操作码。在某些实施例中,列33的数目等于处理器流水线10中并行执行单元的数目。在其它实施例中,队列单元35仅仅输入到一部分执行单元中。例如,一个实施例包含N个并行运算逻辑单元(“ALU”),队列单元35有N个列33,每一列输入到ALU的一个独立部分中。
参见图2A,队列单元35的每一并行执行单元包含一列,但是也可以采用其它适宜的结构。某些实施例采用N个队列单元35,每一个队列单元向一个执行单元发送微操作码。图2A的队列单元35是一个主要队列单元,它为后端单元14的每个执行单元储存微操作码。
仍然参见图2A,队列单元35有足够多的行,用以存储在后端单元14的每一个未退出指令的微操作码。队列单元35的每一行储存一个发布组的微操作码。在队列单元35中,直到退出了由它们确定的宏指令以后,才覆盖微操作码。因此,队列单元35储存流水线10后端单元14的一个中间状态。该中间状态表示在发送级和最后或退出级之间的微操作码。后端单元14能够从保存在队列单元35中的该中间状态开始重放,而不必重放整个流水线10。
仍然参见图2A,队列单元35是环形的,包含一个头指针34、一个尾指针36、和一个重放指针38。头指针34指向队列单元35的“头”,或是新微操作码将要写入队列单元35的那一行。尾指针36指向下一行,或是要发送到后端单元14用于执行的发布组微操作码。重放指针38指向包含根据重放请求第一个发送的发布组微操作码的那一行,在这个特定实施例中,该发布组是队列单元35中最早的未退出的发布组。为了开始后端单元重放,流水线10将重放指针38复制到尾指针36中。这会重新定位尾指针,从而使最早的未退出发布组的微操作码变成下一个从队列单元35发送的发布组。
在图2A中,当新的微操作码写入到队列单元35时,头指针34加1。类似地,当微操作码从队列单元35中读出时,尾指针36加1。最后,当退出每个微操作码时,重放指针38加1。当指针34加1时就覆盖来自退出指令的微操作码,从而使队列单元35的行可以重新使用。当指针34、36或38中的一个指向队列单元35的最后一项记录时,将该指针加1就会绕回到队列单元35的第一项,从而使队列单元35变成一个环形缓冲区。在图2A的实施例中,通常尾指针36落后于头指针34,而且重放指针38落后于尾指针36。
仍然参见图2A,当头指针34等于尾指针36时,队列单元35为空。在某些实施例中,头指针34和重放指针38都有一个附加位。如果头指针34和重放指针38相等,且附加位不同的话,队列单元35为满。如果头指针34和重放指针38相等,且附加位相等的话,队列单元35为空。在一个替换实施例中,保留的一个空行是为检测一个满队列单元条件的且当队列单元35为满时头指针34比重放指针38小1。在某些实施例中,当队列单元35变满时就重放整个流水线10。
图2B说明了图1的队列单元15的第二个实施例35’。队列单元35’的每一列33’都是一个移位寄存器。队列单元35’仅仅使用头指针34’和尾指针36’,并对每一行微操作码进行物理移动,即:根据正退出的一行微操作码将每一发布组向下移。因此最早未退出发布组的微操作码是队列单元35’的底端行39。因此,图2A的实施例中重放指针38实际上就是队列单元35’的底端行39。在其它方面,图2B中队列单元35’的功能类似于图2A的队列单元35。
参见图3A,图1中不停止流水线10的前端单元12至少包含读取级16和解码级18。只要前端单元12从存储器读取宏指令并将微操作码写入队列单元15中,前端单元12可以是任何为本领域所公知的适当设计。在各种实施例中,前端单元12可以包含其它级和/或特征。
仍然参见图3A,后端单元14还包含几个处理级30、32。后端单元14包含一个执行级30和一个退出级32。后端单元14接收从队列单元15发送的微操作码,执行这些发送的微操作码,然后退出执行的指令。退出级32检查并检测执行问题即异常。取决于特定的实现,可选实施例可以包含另外的级和特征。
仍然参见图3A,上述流水线10的这些级16、18、30和32仅仅是有代表性的,既不排除又没有穷举在各种可选实施例中可以存在其它级。此外,本领域的那些技术人员将会理解:在处理器流水线10中级16、18、30和32的划分和功能没有必要象图3A所示的那样明确。为了清楚地阐明本发明,图1中的流水线10是概念化的。因此,前端单元12和后端单元14在级方面的精确结构没有与本发明的实践相对应。
仍然参见图3A,流水线的后端单元14是不会停止的。通过后端单元14的进程由触发器和/或自激的分级多米诺电路(两者都未显示)控制。使后端单元14不会停止,会消除与操作一个停止控制网络有关的时间延迟。通过不停止控制网络,某些实施例能够从实质上提高流水线10的操作频率。象在此处使用的那样,术语“不会停止的”是指一个流水线或它的一部分根据一个执行问题进行刷新和重放,而不是停止。在某些实施例中,整个流水线10是不会停止的。
仍然参见图3A,后端单元14做出预测,推测地分辨执行微操作码所需要的数据和控制相关性。在执行之后,微操作码和由此而来的结果临时地存储起来以等待提交到一个体系结构状态。提交到体系结构状态包含检查确定是否发生问题以及这些预测是否正确。问题检查可以以任何本领域所公知的合适方式执行,并且可以是特殊实现的。问题检查的确切方式不是本发明的内容。如果发现了问题或是错误预测,就忽略或删除推测性执行结果。然后,就刷新或忽略流水线10的后端单元14,也就是说,要么重新设置流水线10,要么允许完成执行后端单元14的全部指令并复位寄存器。
在一个特定实施例中的示例问题包含:
(1)高速缓存故障;
(2)一个分支或判定的错误预测;
(3)一个异常,例如一个页错误或一个非法指令;
(4)一个翻译后备缓冲器(“TLB”)故障;以及
(5)一定的数据相关性,例如载入/储存冲突。
此外,在某些实施例中某些问题可以不用后端单元重放来处理。这些变化都是特定实现的,而且对本发明来说不是必需的。
一旦检测到有问题,就对该问题和它的结果进行修复。同样,修复可以是特定实现的。例如问题和修复动作包括:
(a)一个判定错误预测,必须插入正确的判定用于重放;或者
(b)一个载入存储冲突,则必须完成存储,更新高速缓存然后载入正确的值。
问题修复可以很快地执行,因为图1的队列单元15存储了图1的流水线10的中间状态。因此,可以在队列单元15中对问题进行鉴别和纠正,并重放执行流。该问题的结果在重放中将会被纠正。
参见图3A,后端单元14从队列单元15的微操作码开始重放。由退出级32进行的一个执行问题检测产生重放请求。退出级32经由通道单元17向队列单元15做出一个重放请求。在图2A的实施例中,流水线10将重放指针复制为尾指针36来开始重放。然后,如上所述重新开始执行来自队列单元15的微操作码。执行问题的检测还会引起后端单元14和保存在那里的推测性执行结果的刷新。位于有执行问题指令和重放指令之间的指令所引起的结果不提交到体系结构状态。
参见图3A,推测性地存储重新执行的结果进行并检查执行问题。尽管引起重放的问题不应该再次发生,但是可能会出现其他的执行问题。如果检测到一个新问题,就象上面阐述的那样请求另一个重放。流水线10最后产生能够提交到一个体系结构状态的没有问题的结果。每次重复重放后端单元14会使在考虑中的发布组向其中指令的退出方向前进。
图3B说明了用于图3A退出级32的退出硬件31的一个实施例。退出硬件31包含退出逻辑20、一个推测性寄存器文件22、一个体系结构寄存器文件24,而且还可以包含一个掩码25。执行指令的结果临时保存在推测性寄存器文件22中。退出逻辑20确定在指令执行期间是否存在对应于保存在推测性寄存器文件22中的执行结果的任何执行问题。如果退出逻辑20确定没有发生执行问题,退出逻辑20就将来自于推测性寄存器文件22的执行结果写入到体系结构寄存器文件24中,并退出该指令。如果退出逻辑20确定发生问题,则退出逻辑20开始一个后端单元重放,而不是将结果写入体系结构寄存器文件22中。
仍然参见图3B,某些实施例使用一个掩码25,以便可以根据执行问题来执行“局部”的流水线重放。一个局部重放会重新执行图2A的队列单元35或图2B的队列单元35’的一部分列的微操作码。局部重放是根据在属于要重新执行的一部分列的微操作码上的一个执行问题来执行的。掩码25的行27表示遇到执行问题的微操作码列,或是潜在地取决于遇到执行问题的微操作码的列。例如,掩码25允许重放,或是重新执行某些微操作码列,这些微操作码列是发送给记录了问题的个别执行单元的。不依赖于遇到执行问题的那些列的指令列,可以正常地退出,而且可以不必在一个“局部”重放中重新执行。
仍然参见图3B,退出逻辑20保持一个掩码25以指示哪个指令遇到了一个执行问题。掩码25包含一系列的1和0,用以指示那些遇到执行问题的特定指令。在读取掩码25之后,退出逻辑20就命令重放来自图2A或2B的列33的一个子集的指令。将要重新执行的该列子集可以是一个真子集,即小于全部的列33。在一个实施例中,队列单元15有N个列33,对应于N个并行执行端口或单元(未显示)。在这个实施例中,掩码25包含N个二进制数,即每个并行执行单元有一个二进制数。掩码数据是一个索引,用来指示队列单元15的列和这些执行端口中何处存在问题。
参见图3B和2A,一个实施例中的退出逻辑20对检测到的一个执行问题做出响应,向队列单元35传送掩码数据和一个重放请求。对接收重放请求做出响应,正如以上讨论的那样将队列单元35的尾指针36重新定位。然后,有选择地进行队列单元35中掩码数据指示的存在执行问题的那些列33的重放。来自其它列的指令不会重新执行。
图4A说明了一种在流水线的后端单元部分,例如包含图3A和/或3B的后端单元14的执行级部分,执行指令的方法40。在一个实施例中,流水线的后端单元部分是不会停止的。在块41中,流水线10发送并执行在后端单元流水线的多个指令,而不用确定流水线的各个级是否准备好接收这些指令。以块41举例来说,图3A的流水线10从队列单元15向后端单元14连续地发出多个发布组。队列单元15发送指令,并且在执行级30中执行这些指令而不必检查其中各个级是否就绪。在块42,退出级32确定这些执行了的指令是否遇到一个执行问题。例如,这个步骤可以要求确定在一个发布组的指令是否发生一个执行问题。在块44中,队列单元15根据一部分指令遇到执行问题的判定重放这部分已执行了的指令。在某些实施例中,该部分是一个完整的发布组。在其它实施例中,该部分是整个发布组的真子集。在后面的实施例中,退出级32保持由没有遇到问题指令的运行结果,由此将执行结果提交到一个体系结构状态中。在一个实施例中,提交要求向图3B的体系结构寄存器文件24写入这些结果。
参见图3B和4A,方法40可以进行变化。在各种替换实施例中,通过使结果提交到一个体系结构寄存器文件24中或者通过将该结果保留在推测性寄存器文件22中,可以保留没有问题的指令的执行结果。在后一种情况中,作为对几个执行没有问题的指令的反应,将推测性寄存器文件22的内容提交到体系结构寄存器文件24中。
图4B说明了用于在一个不会停止的流水线例如图3A的流水线10中执行指令的另一种方法45。在块46中,流水线10推测地执行一个发布组的指令。在块47中,退出级32确定这个发布组的任何指令是否遇到一个执行问题。在块48中,退出逻辑20,例如通过发送来自掩码25的数据,向流水线10的一个预定重放点传送一个指示,表示推测性执行的指令遇到了执行问题。这个重放点可以是图1和3A的队列单元15。在块49中,流水线10,例如可以通过从队列单元15向执行单元(未显示)发送相关的指令,重放那些遇到执行问题的指令,。在块50中,图3B的退出逻辑20将那些没有遇到执行问题的指令的执行结果提交到图3B的体系结构寄存器文件24中,并退出这些指令。
图4B的这种方法还可以包含对流水线10中各个点的指令进行排列。例如,这些指令可以是在解码之后进行排列。同样,对那些遇到一个执行问题的指令的重放,可以要求重放一个处理器流水线的一部分,例如后端单元。
再次参见图3A,可以是通过重放后端单元而不是整个流水线10来提高处理器流水线10的指令吞吐量。在某些实施例中,由于处理器流水线10的前端单元12有很多级,因此重放整个处理器流水线10所需的时钟周期数可能是重放后端单元所需时钟周期的两倍。在这种境况下,本发明可以通过利用后端单元重放纠正执行问题将所花费的时间减半。
上述公开的这些特定实施例仅仅是用作例证说明的,对于本发明所属技术领域的技术人员来说,很显然本发明可以进行修改,并以不同但等效的方式实现。此外,在这里显示的详细的结构或设计不是用来作为限制。因此很显然的,以上公开的这些特定实施例可以进行修改和改动,而且所有的这种变化是属于本发明的范围和精神之内的。
Claims (29)
1.一种方法包含:
在一个流水线的一部分调度并执行第一和第二批指令,而不用首先确定这个流水线的该部分的级是否准备就绪;
确定是否遇到一个执行问题;以及
根据第一批指令遇到一个执行问题的判定重放第一批指令。
2.如权利要求1所述的方法包含:根据第二批指令没有遇到一个执行问题的判定,保持由第二批指令产生的结果,并刷新由第一批指令产生的结果。
3.如权利要求2所述的方法,其中确定包括检查单个发布组指令中执行的问题。
4.如权利要求2所述的方法,包含:根据第二批指令没有遇到一个执行问题的判定,将由执行第二批指令产生的结果从推测性寄存器写入体系结构寄存器中。
5.一种方法包含:
在流水线后端单元调度并执行一个发布组指令,而不必确定流水线后端单元的级是否准备好执行这些指令;
确定该发布组指令是否遇到了执行问题;
向流水线的一个重放点指示该发布组的哪个指令遇到了一个执行问题;以及
从该重放点重新调度该发布组的指示的指令用于重新执行。
6.如权利要求5的方法,其中指示包括传送掩码数据到重放点。
7.如权利要求6的方法,其中该掩码数据指示遇到执行问题的旧的未退出的发布组的哪些指令。
8.如权利要求6的方法,其中重新调度包括传送指示指令到后端单元流水线的执行端口的合适的子集,该掩码数据表示该执行部分的合适的子组。
9.如权利要求5的方法,其中调度包括从一个队列单元到并行执行端口传送指令发布组。
10.如权利要求9的方法,其中重新调度包括从已被调度的队列单元未退出指令到相同执行端口作为指示的指令的重新传送。
11.如权利要求9的方法,其中指示包括从退出级到队列单元传送掩码数据,掩码数据指示用于已遇到执行问题的指令的执行端口;和
其中重新调度包括重新执行已调度到已指示执行端口的未退出的指令。
12.一种方法包含:
通过一个流水线处理器的一系列级发送要执行的多个指令,而不必确定这些级是否准备好接收这些指令;
确定这多个指令中哪些执行时没有问题;
向流水线处理器的一个重放点指示多个指令中的那些遇到了一个执行问题;以及
从该重放点重放指示遇到一个执行问题的指令。
13.如权利要求12所述的方法包含:在一个队列单元的行中存储连续的发布组指令;
其中发送包含从该队列单元连续地向并行执行端口发送这些发布组。
14.如权利要求12所述的方法,其特征在于:指示包含从一个退出级向一个队列单元发送掩码数据,其中该发布组指令发送到各个序列级,而掩码数据用以指示遇到一个执行问题的指令。
15.如权利要求14的方法,其中掩码数据指示遇到执行问题的旧的未退出的发布组的指令。
16.一个处理器流水线,包含:
一个前端单元,以读取大量用于执行的指令;
一个后端单元,以执行这大量由前端单元读取的指令,后端单元包含一个退出级以确定一个指令是否遇到了一个执行问题,后端单元是不会停止的;以及
一个通道单元,用以从退出级向一个可以重新执行该指令的重放点发送一个指示,说明该指令遇到了一个执行问题。
17.如权利要求16所述的处理器流水线,其特征在于:该指示包含一个掩码,用以指示那些遇到一个执行问题的指令。
18.如权利要求16所述的处理器流水线,其特征在于:该重放点包含一个队列单元,该队列单元用于存储来自前端单元的指令以调度到后端单元执行。
19.如权利要求18所述的处理器流水线,其特征在于:该队列单元存储后端单元的一个中间状态,该中间状态包含用于执行但是未退出的被调度的指令。
20.如权利要求19所述的处理器流水线,其特征在于:该队列单元包含:
多个行,每一行用于存储来自于前端单元的一个发布组指令;
一个第一指针,指向用于存储下一个发布组指令的下一行;以及
一个第二指针,指向要从该队列单元调度的下一行指令。
21.一个处理器流水线,包含:
一个前端单元,该前端单元适合接收指令;
一个后端单元,该后端单元适合执行由前端单元接收的指令,该后端单元是不会停止的;
一个队列单元,该队列单元用于接收来自于前端单元的指令,以存储处理器流水线的一个中间状态用于后端单元重放;以及
一个通道单元,通过它后端单元能够从队列单元中请求一个重放。
22.如权利要求21的处理器流水线,其中前端单元包括读取级和解码级的至少一个。
23.如权利要求21所述的处理器流水线,其中的队列单元包含:
多个行,每一行用于存储从前端单元接收的一个未退出微操作码的发布组;
一个第一指针,指向用于将微操作码存储到该队列单元里的下一行;以及
一个第二指针,指向要调度到后端单元的下一行微操作码。
24.如权利要求21的处理器流水线,其中该队列单元包括一个循环缓冲器或多个移位寄存器。
25.如权利要求21的处理器流水线,其中该后端单元包括一个具有多个并行执行端口的执行级,以及
其中该队列单元具有一列用于每个执行端口,每个执行端口接收来自一列的指令。
26.如权利要求25的处理器流水线包括一个退出级,响应于确定一个指令已经遇到一个执行问题向队列单元发送一个掩码,以指示这些队列单元中的哪一个要重放。
27.一个处理器流水线包含:
一个前端单元,以准备用于执行的指令;
一个具有多个并行执行单元的后端单元;
一个队列单元,该队列单元用于接收来自于前端单元的指令,并存储处理器流水线的一个中间状态用于后端单元重放;以及
一个通道单元,通过它后端单元可以请求一个来自队列单元的部分重放。
28.如权利要求27的处理器流水线,其中该队列单元包括:
多个行,每一行用于存储从前端单元接收的一个未退出微操作码的发布组;
一个第一指针,指向用于将微操作码存储到该队列单元里的下一行;以及
一个第二指针,指向要调度到后端单元的下一行微操作码;以及
其中该队列单元具有用于每一执行单元的一列,每一执行单元用于从这些队列单元中的一列接收微操作码。
29.如权利要求28的处理器流水线,包括一个退出级,响应于确定已遇到一个执行问题向队列单元发送一个掩码,以指示这些队列单元中的哪一个要重放。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/231,426 | 1999-01-14 | ||
US09/231,426 US6205542B1 (en) | 1997-12-24 | 1999-01-14 | Processor pipeline including replay |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1337021A CN1337021A (zh) | 2002-02-20 |
CN1137435C true CN1137435C (zh) | 2004-02-04 |
Family
ID=22869201
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB008028141A Expired - Fee Related CN1137435C (zh) | 1999-01-14 | 2000-01-05 | 包括指令重放的处理器流水线 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6205542B1 (zh) |
KR (1) | KR100472346B1 (zh) |
CN (1) | CN1137435C (zh) |
AU (1) | AU2406300A (zh) |
DE (1) | DE10083848B4 (zh) |
GB (1) | GB2361564B (zh) |
WO (1) | WO2000042503A1 (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6047370A (en) * | 1997-12-19 | 2000-04-04 | Intel Corporation | Control of processor pipeline movement through replay queue and pointer backup |
US6625756B1 (en) * | 1997-12-19 | 2003-09-23 | Intel Corporation | Replay mechanism for soft error recovery |
IL125273A (en) * | 1998-07-08 | 2006-08-20 | Marvell Israel Misl Ltd | Communication architecture |
US6412067B1 (en) | 1998-08-11 | 2002-06-25 | Intel Corporation | Backing out of a processor architectural state |
US6282636B1 (en) * | 1998-12-23 | 2001-08-28 | Intel Corporation | Decentralized exception processing system |
JP2001209535A (ja) * | 2000-01-27 | 2001-08-03 | Toshiba Corp | プロセッサの命令スケジューリング装置 |
US6877086B1 (en) * | 2000-11-02 | 2005-04-05 | Intel Corporation | Method and apparatus for rescheduling multiple micro-operations in a processor using a replay queue and a counter |
SE0004913D0 (sv) * | 2000-12-29 | 2000-12-29 | Ericsson Telefon Ab L M | Processor |
US6938126B2 (en) * | 2002-04-12 | 2005-08-30 | Intel Corporation | Cache-line reuse-buffer |
US6950925B1 (en) | 2002-08-28 | 2005-09-27 | Advanced Micro Devices, Inc. | Scheduler for use in a microprocessor that supports data-speculative execution |
US20040123078A1 (en) * | 2002-12-24 | 2004-06-24 | Hum Herbert H | Method and apparatus for processing a load-lock instruction using a scoreboard mechanism |
US7080209B2 (en) * | 2002-12-24 | 2006-07-18 | Intel Corporation | Method and apparatus for processing a load-lock instruction using a relaxed lock protocol |
DE102004051991A1 (de) * | 2004-10-25 | 2006-04-27 | Robert Bosch Gmbh | Verfahren, Betriebssystem und Rechengerät zum Abarbeiten eines Computerprogramms |
DE102004051967A1 (de) * | 2004-10-25 | 2006-04-27 | Robert Bosch Gmbh | Verfahren, Betriebssystem und Rechengerät zum Abarbeiten eines Computerprogramms |
US7152155B2 (en) * | 2005-02-18 | 2006-12-19 | Qualcomm Incorporated | System and method of correcting a branch misprediction |
US20070028078A1 (en) * | 2005-07-26 | 2007-02-01 | Arm Limited | Instruction queues in pipelined processors |
US7721067B2 (en) * | 2006-01-20 | 2010-05-18 | Qualcomm Incorporated | Translation lookaside buffer manipulation |
US8977837B2 (en) * | 2009-05-27 | 2015-03-10 | Arm Limited | Apparatus and method for early issue and recovery for a conditional load instruction having multiple outcomes |
US10678542B2 (en) * | 2015-07-24 | 2020-06-09 | Apple Inc. | Non-shifting reservation station |
US10452434B1 (en) | 2017-09-11 | 2019-10-22 | Apple Inc. | Hierarchical reservation station |
US20210119812A1 (en) * | 2020-12-23 | 2021-04-22 | Intel Corporation | Time-based multi-dimensional key recreation mechanism using puf technologies |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4920477A (en) * | 1987-04-20 | 1990-04-24 | Multiflow Computer, Inc. | Virtual address table look aside buffer miss recovery method and apparatus |
US5297263A (en) * | 1987-07-17 | 1994-03-22 | Mitsubishi Denki Kabushiki Kaisha | Microprocessor with pipeline system having exception processing features |
US5012403A (en) | 1988-04-01 | 1991-04-30 | Digital Equipment Corporation | Apparatus and method for replaying decoded instructions |
US5307477A (en) * | 1989-12-01 | 1994-04-26 | Mips Computer Systems, Inc. | Two-level cache memory system |
US5428807A (en) | 1993-06-17 | 1995-06-27 | Digital Equipment Corporation | Method and apparatus for propagating exception conditions of a computer system |
US5421022A (en) | 1993-06-17 | 1995-05-30 | Digital Equipment Corporation | Apparatus and method for speculatively executing instructions in a computer system |
JPH07141176A (ja) * | 1993-11-19 | 1995-06-02 | Fujitsu Ltd | コマンドリトライ制御方式 |
US5584037A (en) | 1994-03-01 | 1996-12-10 | Intel Corporation | Entry allocation in a circular buffer |
US5673426A (en) | 1995-02-14 | 1997-09-30 | Hal Computer Systems, Inc. | Processor structure and method for tracking floating-point exceptions |
US5822574A (en) | 1995-04-12 | 1998-10-13 | Advanced Micro Devices, Inc. | Functional unit with a pointer for mispredicted resolution, and a superscalar microprocessor employing the same |
US5822558A (en) | 1995-04-12 | 1998-10-13 | Advanced Micro Devices, Inc. | Method and apparatus for predecoding variable byte-length instructions within a superscalar microprocessor |
US5765208A (en) | 1995-09-29 | 1998-06-09 | Motorola, Inc. | Method of speculatively executing store instructions prior to performing snoop operations |
US5933618A (en) | 1995-10-30 | 1999-08-03 | Advanced Micro Devices, Inc. | Speculative register storage for storing speculative results corresponding to register updated by a plurality of concurrently recorded instruction |
US5787474A (en) | 1995-11-20 | 1998-07-28 | Advanced Micro Devices, Inc. | Dependency checking structure for a pair of caches which are accessed from different pipeline stages of an instruction processing pipeline |
US5901308A (en) | 1996-03-18 | 1999-05-04 | Digital Equipment Corporation | Software mechanism for reducing exceptions generated by speculatively scheduled instructions |
US5784587A (en) | 1996-06-13 | 1998-07-21 | Hewlett-Packard Company | Method and system for recovering from cache misses |
US5966544A (en) * | 1996-11-13 | 1999-10-12 | Intel Corporation | Data speculatable processor having reply architecture |
US5870579A (en) | 1996-11-18 | 1999-02-09 | Advanced Micro Devices, Inc. | Reorder buffer including a circuit for selecting a designated mask corresponding to an instruction that results in an exception |
US5764971A (en) | 1996-12-11 | 1998-06-09 | Industrial Technology Research Institute | Method and apparatus for implementing precise interrupts in a pipelined data processing system |
EP1012708B1 (en) | 1997-01-29 | 2003-05-07 | Advanced Micro Devices, Inc. | A line-oriented reorder buffer for a superscalar microprocessor |
US5983321A (en) | 1997-03-12 | 1999-11-09 | Advanced Micro Devices, Inc. | Cache holding register for receiving instruction packets and for providing the instruction packets to a predecode unit and instruction cache |
US5987594A (en) * | 1997-06-25 | 1999-11-16 | Sun Microsystems, Inc. | Apparatus for executing coded dependent instructions having variable latencies |
US6079002A (en) * | 1997-09-23 | 2000-06-20 | International Business Machines Corporation | Dynamic expansion of execution pipeline stages |
US6047370A (en) * | 1997-12-19 | 2000-04-04 | Intel Corporation | Control of processor pipeline movement through replay queue and pointer backup |
US6076153A (en) | 1997-12-24 | 2000-06-13 | Intel Corporation | Processor pipeline including partial replay |
US6081887A (en) * | 1998-05-13 | 2000-06-27 | Compaq Computer Corporation | System for passing an index value with each prediction in forward direction to enable truth predictor to associate truth value with particular branch instruction |
-
1999
- 1999-01-14 US US09/231,426 patent/US6205542B1/en not_active Expired - Lifetime
-
2000
- 2000-01-05 DE DE10083848T patent/DE10083848B4/de not_active Expired - Fee Related
- 2000-01-05 KR KR10-2001-7008915A patent/KR100472346B1/ko not_active IP Right Cessation
- 2000-01-05 AU AU24063/00A patent/AU2406300A/en not_active Abandoned
- 2000-01-05 WO PCT/US2000/000222 patent/WO2000042503A1/en active IP Right Grant
- 2000-01-05 GB GB0116269A patent/GB2361564B/en not_active Expired - Fee Related
- 2000-01-05 CN CNB008028141A patent/CN1137435C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1337021A (zh) | 2002-02-20 |
GB0116269D0 (en) | 2001-08-29 |
KR20010089588A (ko) | 2001-10-06 |
GB2361564B (en) | 2003-11-26 |
DE10083848T1 (de) | 2002-03-07 |
KR100472346B1 (ko) | 2005-03-08 |
AU2406300A (en) | 2000-08-01 |
WO2000042503A1 (en) | 2000-07-20 |
US6205542B1 (en) | 2001-03-20 |
GB2361564A (en) | 2001-10-24 |
DE10083848B4 (de) | 2007-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1137435C (zh) | 包括指令重放的处理器流水线 | |
CN1320452C (zh) | 用于支持数据推测式执行的微处理器与方法 | |
CN1310155C (zh) | 用于先行执行期间的存储器通信的装置 | |
CN100461094C (zh) | 一种针对流处理器的指令控制方法 | |
EP2140347B1 (en) | Processing long-latency instructions in a pipelined processor | |
CN1294484C (zh) | 利用重新调度的重放队列中断处理器中的重放依赖关系循环 | |
CN1267819C (zh) | 计算机系统内部处理指令的装置 | |
CN101681259B (zh) | 用于使用局部条件码寄存器以加速管线处理器中的条件指令执行的系统和方法 | |
CN1138205C (zh) | 以不同等待时间调度指令 | |
CN100357884C (zh) | 用于处理指令的方法、处理器以及系统 | |
CN1165840C (zh) | 计算机处理器检验指令的方法和系统及相应计算机系统 | |
CN105426160A (zh) | 基于sprac v8指令集的指令分类多发射方法 | |
CN101034470A (zh) | 指令解析器以及图形处理单元及其方法 | |
CN1790256A (zh) | 用于微处理器的分支前瞻预取 | |
CN101281460B (zh) | 处理多个线程的方法和设备 | |
CN1047245C (zh) | 采用独立存取中间存储器的超标量处理器系统中加强指令调度的方法和系统 | |
CN1945525A (zh) | 从队列处理指令刷新的生存期计数器设计的系统和方法 | |
CN1282024A (zh) | 具有静态转移预测支持的去耦取指令-执行引擎 | |
CN101501636A (zh) | 用于基于动态可改变延迟来执行处理器指令的方法和设备 | |
CN109101276B (zh) | 在cpu中执行指令的方法 | |
CN1885269A (zh) | 在微处理器恢复单元中进行写队列读数据的方法和装置 | |
CN105164637B (zh) | 用于执行循环的方法、系统、装置和处理器以及机器可读介质 | |
CN1226700A (zh) | 高性能推测性未对齐加载操作 | |
CN1255724C (zh) | 终止处理器中非必要处理的条件指令的方法与系统 | |
US6061367A (en) | Processor with pipelining structure and method for high-speed calculation with pipelining processors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
C10 | Entry into substantive examination | ||
PB01 | Publication | ||
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: 20040204 Termination date: 20130105 |
|
CF01 | Termination of patent right due to non-payment of annual fee |