CN103383642A - 用于从超前运行重新进入的设检查点的缓冲区 - Google Patents

用于从超前运行重新进入的设检查点的缓冲区 Download PDF

Info

Publication number
CN103383642A
CN103383642A CN2013101494057A CN201310149405A CN103383642A CN 103383642 A CN103383642 A CN 103383642A CN 2013101494057 A CN2013101494057 A CN 2013101494057A CN 201310149405 A CN201310149405 A CN 201310149405A CN 103383642 A CN103383642 A CN 103383642A
Authority
CN
China
Prior art keywords
instruction
buffer zone
pointer
logic
checkpoint
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.)
Pending
Application number
CN2013101494057A
Other languages
English (en)
Inventor
吉列尔莫·J·罗扎斯
保罗·塞维斯
布拉德·霍伊特
斯里达兰·罗摩克里希纳
亨斯·凡德斯库特
罗斯·泽格尔肯
达雷尔·博格斯
马格努斯·埃克曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN103383642A publication Critical patent/CN103383642A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, 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)
  • Retry When Errors Occur (AREA)

Abstract

提供与一旦微处理器在超前运行之后重新进入特定执行位置则从缓冲区重新分派经选择用于重新执行的指令有关的实施例。在一个示例中,提供微处理器。示范性的微处理器包括获取逻辑、用于执行由获取逻辑所提供的经检索指令的一个或多个执行机制、以及用于调度经检索指令以执行的调度器逻辑。示范性的调度器逻辑包括用于存储经检索指令和一个或多个附加指令的缓冲区,一旦微处理器在超前运行之后在特定执行位置重新进入则调度器逻辑配置为从缓冲区重新分派先前已经被分派到执行机制之一的指令。

Description

用于从超前运行重新进入的设检查点的缓冲区
背景技术
微处理器中的指令常常由于管线错误或数据冲突而被重新分派一次或多次用于执行。例如,在指令涉及尚未计算出或检索到的结果的情况下可能需要重新分派指令。因为不知道在指令的执行期间是否将出现始料未及的管线停顿(stall),所以指令的执行可引起配置为在正在解决初始未命中的同时检测其他未命中的超前运行(runahead)操作。
附图说明
图1示意性地显示了根据本公开实施例的计算设备的微处理器。
图2显示了根据本公开实施例的、从缓冲区重新分派指令的方法。
图3显示了根据本公开实施例的、示出了在超前运行之后从缓冲区重新分派指令用于重新执行的方法的流程图。
图4显示了根据本公开实施例的、设置检查点并从缓冲区重新分派指令的方法。
图5示意性地显示了根据本公开实施例的用于缓冲区的多个存储单元。
具体实施方式
在现代微处理器中,架构级指令常常分为微操作用于在管线中执行。可以将这类微操作单独地或作为微操作束(bundle)分派到微处理器中的各执行机制。当分派一个或多个微操作时,并不知道微操作的执行是否将完成。换句话说,不知道在微操作的执行期间是否将出现未命中或异常。在一些示例中,如果微操作没有完成,则在解决意外的停顿之后可重新执行微操作。因为可能出现其他未命中,所以在微操作完成之前可重新执行数次微操作是可能的。
在束的执行期间可能出现的常见的管线执行停顿是导致高速缓存未命中的加载操作。这类高速缓存未命中可触发进入操作的超前运行模式(此后称为“超前运行”),该超前运行配置为在解决初始加载未命中的同时检测其他高速缓存未命中、指令转译后备缓冲区未命中、分支误预测等等。如本文所使用的,超前运行实际上描述源自长延迟事件的任何合适的推测性(speculative)执行方案,诸如在产生的加载事件从较慢的访问存储器位置拉取未命中的指令或数据的情况下的高速缓存未命中。一旦解决初始加载未命中,微处理器就退出超前运行并且指令被重新执行。然而,从指令或统一高速缓存重新获取指令可能减慢处理器操作。因此,本文公开了与一旦微处理器在超前运行之后重新进入特定执行位置就从缓冲区重新分派经选择用于执行的指令有关的各实施例。在一个示例中,提供微处理器。示范性的微处理器包括获取逻辑、用于执行由获取逻辑所提供的经检索指令的一个或多个执行机制、以及用于调度指令用于执行的调度器逻辑。示范性的调度器逻辑包括用于存储经检索指令和一个或多个附加指令的缓冲区,一旦微处理器在超前运行之后在特定执行位置重新进入则该调度器逻辑配置为从缓冲区重新分派先前已经被分派到执行机制之一的指令。
图1示意性地描绘了可以结合本文所描述的系统和方法而采用的微处理器100的实施例。微处理器100不同程度地包括处理器寄存器109并且还可以包括存储器层级110,其可以包括L1处理器高速缓存110A、L2处理器高速缓存110B、L3处理器高速缓存110C、主存储器110D(例如一个或多个DRAM芯片)、二级存储110E(例如磁性和/或光学存储单元)和/或三级存储110F(例如磁带群)。应该理解示范性的存储器/存储部件以访问时间和容量增大的顺序列出,尽管有可能的例外。
存储器控制器110G可用来处理协议并提供主存储器110D所需的信号接口以及可用来调度存储器访问。存储器控制器可实现在处理器裸片(die)上或分开的裸片上。应该理解以上所提供的存储器层级是非限制性的并且可以使用其他存储器层级而不脱离本公开的范围。
微处理器100还包括管线,其以简化的形式在图1中示出为管线102。管线化可允许多于一个指令并发地处于检索和执行的不同级。换句话说,一系列指令可传递通过管线102中所包括的各执行机制,与此同时从存储器检索另一指令和/或数据。因此,在上游检索机制正在等待存储器返回指令和/或数据的同时可以利用执行机制,其衔接各种结构诸如高速缓存和分支预测器以使得可以潜在地发现其他高速缓存未命中和/或分支误预测。相对于以单独的、串行的方式检索和执行指令和/或数据的方法,该方法可以潜在地加速由微处理进行的指令和数据处理。
如图1所示,管线102包括获取逻辑120、解码逻辑122、调度器逻辑124、执行逻辑130、mem(存储器)逻辑132以及回写逻辑134。获取逻辑120从存储器层级110检索指令,典型地是从主存储器和L2-L3高速缓存所支持的统一或专用L1高速缓存检索指令。解码逻辑122例如通过解析操作码、操作数和寻址模式来解码指令。一旦被解析,指令就随后由调度器逻辑124所调度用于由执行逻辑130执行。
调度器逻辑124包括用于存储一个或多个指令的缓冲区126。随着指令进入调度器逻辑124,在缓冲区126中对其进行排队。即使在将指令分派到执行逻辑130之后仍然在缓冲区126中保持指令。因此,有可能响应于造成指令在分派后未能完成的管线间断而从缓冲区重新分派先前所分派的指令诸如在数据高速缓存中未命中的加载。从而这类重新分派可在不从缓冲区之外重新获取指令的情况下得以实施。因此指令可以被重新分派或“重演”一次或多次直到确定指令达到完成状态为止,此时指令可以从缓冲区逻辑地和/或物理地移除。
如图1所示,在一些实例中,诸如在以下所更详细描述的超前运行条件期间,可以为缓冲区126设置检查点以在超前运行期间保存缓冲区126的状态,同时缓冲区126的未设检查点的(non-checkpointed)工作状态版本对指令进行排队用于分派。图1还示出了可选旁路,其配置为与在缓冲区126中的指令的存储并发地将指令转发到执行逻辑130。
在一些实施例中,缓冲区126可以配置为以指令集架构(ISA)指令的形式来存储指令。附加地或可替代地,在一些实施例中,缓冲区126可以配置为存储微操作束,每个微操作与一个或多个ISA指令或ISA指令的部分相对应。应该理解实际上可以采用任何合适的安排用于在微操作束中存储指令,而不脱离本公开的范围。例如,在一些实施例中,单个指令可存储在多个微操作束中,而在一些实施例中单个指令可存储为微操作束。而在其他实施例中,多个指令可存储为微操作束。还有在其他实施例中,缓冲区126可以存储单独的指令或微操作,例如根本不包括束的指令或微操作。
为了一旦进入超前运行就使边界指针指向有效位置,缓冲区126配置为至少与从造成进入超前运行的特定束到与该特定束在相同指令中的最后束所包括的束的数目一样大,其可称为指令的尾大小(tail size)。因此,在微操作束存储在缓冲区126中的实施例中,可以根据与架构指令相关联的微操作的预定尾大小来调节缓冲区126的大小。可以以任何合适次数将这类ISA指令和/或束重新分派到执行逻辑130。
管线102还包括用于实施加载和/或存储操作的mem逻辑132以及用于将操作结果写到适当位置诸如寄存器109的回写逻辑134。应该理解上述在管线102中所示的级是典型RISC实现方案的示例而非意在限制。例如,在一些实施例中,可以在管线的上游提供获取逻辑和调度器逻辑功能,诸如编译VLIW指令或代码变形。在一些其他实施例中,调度器逻辑可以包括在微处理器的获取逻辑和/或解码逻辑中。更一般地,微处理器可以包括获取、解码和执行逻辑,其中的每一个可以包括一个或多个级,而由执行逻辑实行mem和回写功能。本公开同样适用于这些和其他微处理器实现方案,包括可使用VLIW指令和/或其他逻辑指令的混合实现方案。
在所描述的示例中,可以每次一个地获取和执行指令,这可能需要多个时钟周期。在此期间,大部分数据路径可能未被使用。补充或取代单个指令获取,可使用预获取方法来改善性能并避免与读和存储操作(即读取指令以及将这类指令加载到处理器寄存器和/或执行队列中)相关联的延迟瓶颈。因此,应该理解实际上可以使用任何合适的获取、调度和分派指令的方式而不脱离本公开的范围。
图2示意性地显示了用于使用多个指针重新分派存储在缓冲区中的指令的方法200的实施例,该多个指针用于在四个顺序时间处针对缓冲区的工作状态版本(例如未设检查点的版本)追踪存储在缓冲区中的指令的地址,该四个顺序时间为时间202、时间204、时间206和时间208。提供图2所描绘的方法用于示例性的目的而非意在限制,实际上在一些实施例中可以包括以下所描述方法的任何合适的变化而不脱离本公开的范围。
在图2所示的示例中,在时间202处五个束A1、A2、B1、C1和C2被存储在缓冲区中。束A1和A2与架构指令A相对应,束B1与架构指令B相对应以及束C1和C2与架构指令C相对应。在时间202处与指令C相关联的所有束并未完全插入缓冲区,因为在时间202处最后一个束(C3)尚未插入缓冲区。
如图2所示,指针“A”涉及分配指针,其指示下一个束将在何处插入缓冲区。实际上可以采用任何合适的方案来调度指令来出入缓冲区;图2所示的缓冲区被描绘为逻辑先入、逻辑先出的循环缓冲区。当指令(或其部分)被插入缓冲区时更新分配指针。在图2所示的示例中,随着与指令C相对应的束C3插入缓冲区而在时间202和时间204之间更新分配指针以及随着在时间208处与指令D相对应的束D1和D2插入缓冲区而再次在时间204和时间206之间更新分配指针。注意任何架构指令可以是ISA指令而不脱离本公开的范围。
指针“R”涉及读指针,其指示为分派到执行机制做准备而经选择被读取的指令条目的缓冲区地址或缓冲区位置。例如,读指针可以指向用于经选择指令的地址以使得可以在分派指令之前读取经选择指令的各从属关系。当经选择指令(或其部分)被发出到执行机制时更新读指针。在图2所示的示例中,随着读取与指令B相对应的束B1用于分派而在时间202和时间204之间更新读指针以及随着读取与指令C相对应的束C1用于分派而再次更新读指针。
指针“D”涉及释放(de-allocation)指针,其指示已经完成并准备好从缓冲区逻辑地以及在一些实施例中物理地移除的指令条目的缓冲区地址或缓冲区位置。因此,释放指针指向作为例如通过被覆写和/或删除而从缓冲区移除的下一个指令的指令。因此,由分配指针插入缓冲区并由读指针所读取的指令将保留在缓冲区中直到由释放指针指示移除为止。当经选择指令(或其部分)完成时更新释放指针。在图2所示的示例中,随着与指令A相对应的束A1准备好释放而在时间202和时间204之间更新释放指针以及随着束A2准备好释放而在时间204和时间206之间更新释放指针。
在一些实施例中,因为可以在逐束的基础上从缓冲区分派和释放束,所以可以通过从束移动到束(例如从A1到A2)来推进释放指针。然而,在一些实施例中,即使缓冲区存储束,也可以通过从指令移动到指令来推进释放指针。例如,甚至在单独分派束(例如A1、A2、B1等)时,也可以将释放指针从A1推进到B1,跳过A2。因此,在一些实施例中在缓冲区的工作状态期间,释放指针以及一个或多个诸如读指针的其他指针的增量推进可以不同。
应该理解尽管A、R和D指针的顺序被约束在指令所遇到的次序(例如以次序A、R和D),但是任何合适数目的缓冲区位置可以分开A、R和D指针,并且进一步地,其他合适的缓冲区指针可以介入,如下所描述的。
指针“RY”涉及重演指针,其指示将被重新分派用于重新执行的指令的缓冲区地址或缓冲区位置。因为一旦指令(或其部分)已经完成,则该指令的重演就不再是一个问题,所以随着释放指针一起来更新重演指针。在图2所示的实施例中,重演指针跟踪读指针以使得如果合适的管线执行停顿发生则可以重演先前所读取并分派的指令。一旦重演,则将重演指针拷贝到读指针中以使得读指针将读取所选择重演的指令。在图2所示的示例中,在时间206处将重演指针拷贝到读指针中以使得在时间208处读指针和重演指针二者都指向束C1。因此,读指针将指向束C1,为重新分派该束用于重新执行做准备。
在图2所示的示例中,在时间208处,读指针被描绘为准备好读取束C1,为重新分派和重新执行做准备。如果束C1由于某一管线执行停顿而没有完成,则可以将重演指针拷贝到读指针中以使束再次被重新分派直到束成功完成为止。一旦束完成,则重演指针将被推进并且释放指针将指示束C1准备好从缓冲区逻辑地移除。
在一些实施例中,从缓冲区重新分派或重演指令可源自微处理器从超前运行状态的退出。继续参考图1所示的示例,例如,L3高速缓存110C处的高速缓存未命中可触发对来自主存储器110D的指令的请求,其相对于在L2高速缓存110B处的未命中以及在L3高速缓存110C处的命中可具有相对更慢的履行时间(fulfillment time)。一旦识别出未命中,就为微处理器设置检查点以使得微处理器可以在超前运行结束之后(例如一旦加载未命中被履行)返回到设检查点(checkpointed)的状态。因此,如果特定指令开始超前运行,则指令将作为超前运行指令完成并随后在超前运行结束之后再次被重新分派。
因为何时将进入超前运行以及为缓冲区设置检查点是未知的,所以图2还描绘了重启指令指针(restart instruction pointer),其配置为追踪跟随在最后完成指令之后的地址或位置,例如指令的地址,该指令跟随在具有所有其加载到缓冲区中的组成部分的指令之后。因为当重启时缓冲区将被重置到不包括任何未完成指令的状态,所以如果重启是按次序的话,那么重启指令指针导向用于未完成指令的地址将造成从存储器中的适当位置加载用于未完成指令的束。如上所述,可以在重新分派保持在缓冲区中的指令的同时,从缓冲区之外获取将在缓冲区中所保持的最后完成指令之后被执行的指令。在一些实施例中,可以在重新分派缓冲区内的指令用于重新执行的同时,将重启指令指针导向用于获取逻辑的指令指针以从缓冲区之外获取另一个指令。每次将完成指令插入缓冲区时更新重启指令指针。在图2中,重启指令指针在时间202处指向指令C1的指令指针。在时间204处,随着指令C经由束C3的插入而完成,更新重启指令指针以指向超过C的指令。如图2中在时间204处所示的,一旦插入束C3,则重启指令指针就被描绘为指向D1。因此,在指令包括多个微操作束的实施例中,更新重启指令指针以使得其指向整体(integral)指令边界而非单独指令内的位置。
在一些缓冲区存储ISA指令的实施例中,因为每个ISA指令可以具有与其相关联的指令指针,所以追踪缓冲区中的最后完成指令的地址或位置可以相对简单。在一些其他的实施例中,诸如在微操作束存储在缓冲区中的实施例中,可以是与指令相关联的指令指针仅包括在形成指令的一系列束的最后一个束中。在这类实施例中,当用于指令的最后一个束插入缓冲区时可以更新重启指令指针。进一步地,因为从存储在缓冲区中的微操作束识别指令的结束可能是困难的,所以在这类实施例中可以使用边界指令指针来追踪在与重启指令指针相对应的束和后续束之间的边界,例如,用于追踪在保持在缓冲区中的最后完成指令和属于保持在缓冲区中的未完成指令的后续束之间的边界。在这类实施例中,重启指令指针可以随后追踪如边界指令指针所追踪的保持在缓冲区中的最后完成指令的地址或位置。在这类实施例中,可以与重启指令指针并发地更新边界指令指针。在图2中,随着指令C通过插入束C3而完成,在时间202和时间204之间更新边界指令指针“B”以指向D1。
在本文所描述的实施例中,缓冲区存在于设检查点的和未设检查点的版本中。因此,返回到图1所示的示例,造成超前运行入口的指令和一个或多个后续指令存储在缓冲区的设检查点的版本(示出为设检查点的缓冲区126A)中,以使得当从超前运行退出时可以从缓冲区分派造成超前运行的指令和那些后续指令而不需要从缓冲区之外获取。例如在一些实施例中,可以直接从设检查点的缓冲区126A分派指令而在一些其他实施例中,指令可以初始拷贝到缓冲区的未设检查点的版本(在图1中示出为未设检查点的缓冲区126B)中并随后从该处被分派。进一步地,在一些实施例中,可以在重新分派保持在缓冲区中的指令的同时,从缓冲区之外获取将在保持在缓冲区中的最后完成指令之后执行的指令。因此,本文所描述的实施例可以提供以下潜在优势:通过消除对存储在缓冲区中的指令的获取过程以及通过与对存储在缓冲区之内的指令的重新分派操作并发地触发对存储在缓冲区之外的指令的后续指令获取过程来减少在超前运行之后的指令处理时间。
图3显示了示出用于在超前运行之后从缓冲区重新分派经选择指令用于重新执行的方法300的实施例。以下所提供的方法300的描述交织引用图4所提供的缓冲区的示例。为了简洁起见,图3所示的示例仅描绘了一个级别的高速缓存。然而,应该理解可以采用任何合适数目的高速缓存级别而不脱离本公开的范围,也可以采用任何合适的用于减少未命中代价的方案。进一步地,图3和4中所描绘的方法为示例性的目的而提供而非意在限制,同时在一些实施例中可以包括以下所描述方法的几乎任何合适的变化,包括省略、添加和重新布置,而不脱离本公开的范围。
在302,方法300包括由执行中的指令请求数据。在一些实施例中,可以由指向数据的地址或位置的存储器逻辑中的数据指针发出获取请求302。例如,当存储器逻辑的指令指针指向数据的地址时,存储器逻辑被导向到该地址以检索该特定数据。在图3所示的示例中,获取请求导致未命中,以致在304处高速缓存从主存储器请求所请求的数据。
在正在从主存储器检索所请求的数据的同时,方法300前进到306,在此处管线进入超前运行,并且在308处为包括造成进入超前运行的指令的缓冲区设置检查点。在超前运行期间为缓冲区设置检查点保存了缓冲区的状态(以设检查点的形式),与此同时缓冲区的未设检查点的版本运行在工作状态。一旦进入超前运行则由调度器逻辑生成设检查点的版本。
图4示意性地示出了方法400的实施例,方法400用于使用多个指针在进入示范性超前运行模式时、在示范性超前运行模式期间和在退出示范性超前运行模式时操纵缓冲区,用于在四个顺序的时间402、404、406和408处追踪存储在缓冲区中的指针的地址或位置。
在图4所示的示例中,当在时间402处进入超前运行时,与三个架构指令A、B和C相对应的五个束A1、A2、B1、C1和C2存储在缓冲区中。因为在时间402处最后一个束(C3)尚未插入缓冲区,所以在时间402处与指令C相关联的所有束并未完全插入缓冲区。在图4所示的示例中,释放指针“D”指向造成进入超前运行的束A1,与此同时读指针“R”指向下一个将被分派的束B1。
在时间402处,方法400显示了缓冲区的设检查点的版本的生成,该设检查点的版本包括释放指针的设检查点的版本。在缓冲区的设检查点的版本中,释放指针和缓冲区的内容保留在设检查点的状态中等待超前运行结束。
图4所示的缓冲区的设检查点的版本的实施例包括多个空位(vacancy)。这类空位可以源自一旦进入超前运行则(在可接受的公差内)立即为缓冲区设置检查点。可替代地,在一些其他实施例中,可以在超前运行开始之后为缓冲区设置检查点而非直到缓冲区到达预定占用率。例如,在一些这类实施例中,可以直到缓冲区变满才为缓冲区设置检查点。只要在从超前运行退出之前生成检查点,这类方法就可存储比立即设置检查点方法相对更多的指令,这潜在地减少在获取逻辑从超前运行退出之后再次分派指令之前管线停顿的可能性。
当从超前运行重启时,典型地将获取逻辑导向跟随在缓冲区中的最后完成指令之后的指令指针。如上所述,重启指令指针保持追踪跟随在缓冲区中的最后完成指令之后的地址或位置。在缓冲区保持微操作束的实施例中,可以使用边界指针来追踪在与重启指令指针相对应的束和后续束之间的边界,例如用于追踪在保持在缓冲区中的最后完成指令和后续束之间的边界。图4所示的实施例描绘了重启指令指针,其配置为追踪跟随在缓冲区中的最后完成指令之后的地址或位置,例如C1。图4还显示了边界指令指针“B”,其也指向束C1。如图4所示,当进入超前运行时不为边界指令指针设置检查点,但是在超前运行期间边界指令指针保留冻结在未设检查点的版本中。该方法可以潜在地节约在设检查点的缓冲区中的存储空间。
继续参考图3,在310处,方法300包括使用缓冲区的未设检查点的版本在超前运行中推测性地执行。在超前运行期间,微处理器继续推测性地执行指令,有时由于不可用的目标数据而不准确,以致可以在触发超前运行的初始未命中正在履行的同时识别附加的高速缓存未命中、转译后备缓冲区未命中和/或分支误预测事件。因此,在初始未命中请求的履行期间可开始附加未命中和其他潜在地不可预测和/或可能长期运行的停顿条件的履行,这潜在地节约时间。
在图4所示的实施例中,随着时间从时间402进展到时间404,包括在缓冲区的未设检查点的版本中的读、重演、分配和释放指针随着微处理器移动通过推测性执行而移动。例如,在缓冲区的未设检查点的版本中,在时间404处束C3插入缓冲区并且束A1从缓冲区释放,读和重演指针前进等等。
同时,在312和314处,将负责造成进入超前运行的未命中数据提供给管线,这解决加载未命中并使超前运行在316处结束。一旦初始加载未命中得到履行,则在318处刷新(flush)管线,其可能包括丢弃在超前运行期间所实施的推测性执行的一个或多个无效结果,以及在一些实施例中丢弃缓冲区的未设检查点的版本以使得微处理器处在与当超前运行发生时其所存在的状态相同的状态。
在320处,方法300包括将缓冲区重置到缓冲区的设检查点的版本以使得缓冲区设置到微处理器进入超前运行时的状态。在320处将缓冲区重置到设检查点的版本包括从缓冲区的设检查点的版本恢复释放指针。
在图4所示的实施例中,在时间406处描绘了将缓冲区重置到设检查点的版本,其包括将释放指针的设检查点的版本从设检查点的缓冲区拷贝到未设检查点的缓冲区。在图4所示的示例中,在406处,在解冻边界指针并拷贝到分配指针位置中的同时,将释放指针拷贝到释放指针的未设检查点的版本并将其拷贝到重演和读指针。进一步地,重启指令指针指向与B相关联的地址,最后完成指令存在于缓存区中。同时,释放、读和重演指针指向与束A1相关联的束,以使得A1可以被重新分派到执行单元。最后,分配指针指向指令B之后的位置。在超前运行之后的缓冲区恢复之后,束C1和C2逻辑上将不存在于缓冲区中。因此,将分配指针定位为指向跟随在最后完成指令(图4所示的示例中的指令B)之后的位置规定可以在超前运行之后的缓冲区恢复时获取与未完成指令(图4中的指令C)相关联的所有束。因此,在图4所示的示例中,在重启时,可以基于释放指针和边界指针确定缓冲区中的所有指针。
继续参考图3,在322,方法300包括重新分派先前造成超前运行的指令。重新分派指令包括一旦微处理器在超前运行之后重新进入特定执行位置就读取经选择用于重新执行的指令,并且在读取经选择指令之后,将指令重新分派到微处理器的一个或多个执行机制。一旦指令已经被重新执行并且已经完成,就按照释放指针的指示来从缓冲区逻辑地移除指令。
在图4所示的示例中,读指令被描绘为准备好读取束A1,以为重新分派和重新执行做准备。如果A1由于一些管线执行停顿而没有完成,则可以将重演指针拷贝到读指针中以使束A1再次被重新分派直到束成功完成。一旦束完成,则重演指针将推进并且分派指针将指示束A1准备好从缓冲区逻辑地移除。
继续参考图3,在324处,方法300包括在重新分派经选择指令的同时从缓冲区之外获取另一个指令。在326处,可以分派来自缓冲区之内的后续指令用于执行(例如图4所示的指令B1),同时在328处从高速缓存返回来自缓冲区之外的指令。
应该理解上面描述的设置检查点方案仅出于示例性的目的而提供,并且实际上可以采用任何合适的方法来为缓冲区设置检查点而不脱离本公开的范围。例如,在一个场景中,可以在进入超前运行处与边界、释放和分配指针一起为缓冲区设置检查点。在从超前运行退出处,缓冲区可以通过从其设检查点的版本拷贝边界、释放和分配指针的设检查点的版本来恢复,其中还将释放指针拷贝到读和重演指针中以使得读、重演和释放指针指向共同地址。
应该理解本文所描述的方法仅出于示例性的目的而提供而非意在限制。因此,应该理解在一些实施例中本文所描述的方法可以包括附加的或替代的过程,而在一些实施例中本文所描述的方法可以包括一些可以被重新排序或省略的过程,而不脱离本公开的范围。进一步地,应该理解可以使用包括本文所描述硬件的任何合适硬件来实施本文所描述的方法。
图5示意性地显示了根据本公开实施例的用于缓冲区的示范性存储单元500。在图5所示的实施例中,使用成对布置的2N个条目将缓冲区存储在存储单元500中。当给定地址X时,读解码器502和写解码器504可以解码到不同的条目或到相同条目,这取决于一个条目是否是设检查点的条目(并因此可在超前运行期间不被覆写)以及取决于条目是否已经被写在未设检查点的子集中。在一些这类实施例中,调度器逻辑可以包括地址位,其配置为识别用于存储单元500中的经选择条目的经选择地址是与缓冲区的设检查点的版本相对应还是与缓冲区的未设检查点的版本相对应。地址可用来识别信息是将在缓冲区的工作版本中还是在设检查点的版本中被存储或访问。存储单元500实际上可以是任何合适的存储单元。例如,在一些实施例中,存储单元500可以包括SRAM。
本书面描述使用示例来公开本发明,包括最佳模式,并且还使相关领域的普通技术人员能够实践本发明,包括制造和使用任何设备或系统以及实施任何所包含的方法。本发明的可专利范围由权利要求所定义,并且可以包括本领域普通技术人员所理解的其他示例。这类其他示例旨在处于权利要求的范围内。

Claims (10)

1.一种微处理器,包括:
获取逻辑;
一个或多个执行机制,其用于执行由所述获取逻辑所提供的经检索指令;以及
调度器逻辑,其用于调度所述经检索指令以执行,所述调度器逻辑包括用于存储所述经检索指令和一个或多个附加指令的缓冲区,一旦所述微处理器在超前运行之后在特定执行位置重新进入则所述调度器逻辑配置为从所述缓冲区重新分派先前已经分派到所述执行机制之一的指令。
2.根据权利要求1所述的微处理器,所述缓冲区存储在包括成对布置的2N个条目的单个阵列中。
3.根据权利要求2所述的微处理器,所述调度器逻辑包括地址位,其配置为识别用于存储单元中的经选择条目的经选择地址是与所述缓冲区的设检查点的版本相对应还是与所述缓冲区的未设检查点的版本相对应。
4.根据权利要求1所述的微处理器,所述缓冲区包括:
读指针,其用于读取保持在所述缓冲区中的经选择指令,为分派所述经选择指令以执行做准备;以及
释放指针,其用于在所述经选择指令完成之后使所述经选择指令从所述缓冲区逻辑地移除。
5.根据权利要求4所述的微处理器,所述缓冲区进一步包括:
重演指针,其用于使经选择指令在重演期间被重新分派以重新执行;以及
重启指令指针,其用于追踪跟随在保持在所述缓冲区中的最后完成指令之后的地址,所述重启指令指针引导用于所述获取逻辑的指令指针以使得在重新分派所述经选择指令用于重新执行的同时所述获取逻辑从所述缓冲区之外获取另一个指令。
6.根据权利要求5所述的微处理器,所述调度器逻辑进一步包括:
所述缓冲区的设检查点的版本,其包括造成进入超前运行的指令和多个后续指令;以及
所述缓冲区的未设检查点的版本,其在超前运行期间运转在工作状态;
其中,在超前运行之后,所述调度器逻辑配置为将所述缓冲区重置为所述设检查点的版本。
7.根据权利要求6所述的微处理器,所述缓冲区配置为存储多个微操作束,每个微操作与一个或多个指令集架构(ISA)指令或ISA指令的部分相对应,所述调度器逻辑进一步包括边界指令指针,所述边界指令指针用于追踪在保持在所述缓冲区中的完成ISA指令的最后一个束与属于保持在所述缓冲区中的未完成ISA指令的后续束之间的边界,其中所述重启指令指针配置为追踪如所述边界指令指针所追踪的跟随在保持在所述缓冲区中的最后完成指令之后的地址。
8.根据权利要求6所述的微处理器,其中一旦进入超前运行则由所述调度器逻辑生成所述设检查点的版本。
9.根据权利要求8所述的微处理器,其中所述设检查点的版本包括一个或多个空位。
10.根据权利要求1所述的微处理器,所述获取逻辑和所述调度器逻辑处于包括在所述微处理器中的管线的上游。
CN2013101494057A 2012-05-03 2013-04-26 用于从超前运行重新进入的设检查点的缓冲区 Pending CN103383642A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/463,627 US9875105B2 (en) 2012-05-03 2012-05-03 Checkpointed buffer for re-entry from runahead
US13/463,627 2012-05-03

Publications (1)

Publication Number Publication Date
CN103383642A true CN103383642A (zh) 2013-11-06

Family

ID=49384600

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2013101494057A Pending CN103383642A (zh) 2012-05-03 2013-04-26 用于从超前运行重新进入的设检查点的缓冲区

Country Status (4)

Country Link
US (1) US9875105B2 (zh)
CN (1) CN103383642A (zh)
DE (1) DE102013206501A1 (zh)
TW (1) TWI626589B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110597556A (zh) * 2019-09-09 2019-12-20 中国人民解放军国防科技大学 一种寄存器映射表检查点资源的管理方法、系统及介质

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9424138B2 (en) * 2013-06-14 2016-08-23 Nvidia Corporation Checkpointing a computer hardware architecture state using a stack or queue
GB2540190B (en) * 2015-07-08 2020-01-01 Mips Tech Llc Check pointing a shift register
GB2540221B (en) 2015-07-08 2020-01-01 Mips Tech Llc Check pointing a shift register
US10831507B2 (en) 2018-11-21 2020-11-10 SambaNova Systems, Inc. Configuration load of a reconfigurable data processor
US11188497B2 (en) 2018-11-21 2021-11-30 SambaNova Systems, Inc. Configuration unload of a reconfigurable data processor
US10698853B1 (en) 2019-01-03 2020-06-30 SambaNova Systems, Inc. Virtualization of a reconfigurable data processor
US10768899B2 (en) 2019-01-29 2020-09-08 SambaNova Systems, Inc. Matrix normal/transpose read and a reconfigurable data processor including same
US11386038B2 (en) 2019-05-09 2022-07-12 SambaNova Systems, Inc. Control flow barrier and reconfigurable data processor
US11055141B2 (en) 2019-07-08 2021-07-06 SambaNova Systems, Inc. Quiesce reconfigurable data processor
US11809908B2 (en) 2020-07-07 2023-11-07 SambaNova Systems, Inc. Runtime virtualization of reconfigurable data flow resources
US11782729B2 (en) 2020-08-18 2023-10-10 SambaNova Systems, Inc. Runtime patching of configuration files
CN112559052B (zh) * 2020-12-15 2022-11-25 类人思维(山东)智慧科技有限公司 一种指令集调用方法、装置、终端及存储介质
US11327771B1 (en) 2021-07-16 2022-05-10 SambaNova Systems, Inc. Defect repair circuits for a reconfigurable data processor
US11556494B1 (en) 2021-07-16 2023-01-17 SambaNova Systems, Inc. Defect repair for a reconfigurable data processor for homogeneous subarrays
US11409540B1 (en) 2021-07-16 2022-08-09 SambaNova Systems, Inc. Routing circuits for defect repair for a reconfigurable data processor
US11487694B1 (en) 2021-12-17 2022-11-01 SambaNova Systems, Inc. Hot-plug events in a pool of reconfigurable data flow resources

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870582A (en) * 1997-03-31 1999-02-09 International Business Machines Corporation Method and apparatus for completion of non-interruptible instructions before the instruction is dispatched
US20030018685A1 (en) * 1999-04-29 2003-01-23 Stavros Kalafatis Method and system to perform a thread switching operation within a multithreaded processor based on detection of a branch instruction
US20050138332A1 (en) * 2003-12-17 2005-06-23 Sailesh Kottapalli Method and apparatus for results speculation under run-ahead execution
US20060010309A1 (en) * 2004-07-08 2006-01-12 Shailender Chaudhry Selective execution of deferred instructions in a processor that supports speculative execution
US20060179279A1 (en) * 2005-02-04 2006-08-10 Mips Technologies, Inc. Bifurcated thread scheduler in a multithreading microprocessor
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture

Family Cites Families (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956753A (en) 1993-12-30 1999-09-21 Intel Corporation Method and apparatus for handling speculative memory access operations
GB2287111B (en) 1994-03-01 1998-08-05 Intel Corp Method for pipeline processing of instructions by controlling access to a reorder buffer using a register file outside the reorder buffer
US5487146A (en) 1994-03-08 1996-01-23 Texas Instruments Incorporated Plural memory access address generation employing guide table entries forming linked list
JPH0877347A (ja) 1994-03-08 1996-03-22 Texas Instr Inc <Ti> 画像/グラフィックス処理用のデータ処理装置およびその操作方法
JP2763499B2 (ja) 1994-11-30 1998-06-11 株式会社ナムコ 画像合成装置及び画像合成方法
US6665792B1 (en) 1996-11-13 2003-12-16 Intel Corporation Interface to a memory system for a processor having a replay system
US5864692A (en) 1996-12-16 1999-01-26 Hewlett-Packard Company Method and apparatus for protecting memory-mapped devices from side effects of speculative instructions
US6668291B1 (en) 1998-09-09 2003-12-23 Microsoft Corporation Non-blocking concurrent queues with direct node access by threads
US6862635B1 (en) 1998-11-13 2005-03-01 Cray Inc. Synchronization techniques in a multithreaded environment
US6519694B2 (en) 1999-02-04 2003-02-11 Sun Microsystems, Inc. System for handling load errors having symbolic entity generator to generate symbolic entity and ALU to propagate the symbolic entity
US6484254B1 (en) 1999-12-30 2002-11-19 Intel Corporation Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
US6950925B1 (en) 2002-08-28 2005-09-27 Advanced Micro Devices, Inc. Scheduler for use in a microprocessor that supports data-speculative execution
US6981083B2 (en) 2002-12-05 2005-12-27 International Business Machines Corporation Processor virtualization mechanism via an enhanced restoration of hard architected states
US20040128448A1 (en) 2002-12-31 2004-07-01 Intel Corporation Apparatus for memory communication during runahead execution
US7139876B2 (en) 2003-01-16 2006-11-21 Ip-First, Llc Microprocessor and apparatus for performing fast speculative pop operation from a stack memory cache
US7587584B2 (en) 2003-02-19 2009-09-08 Intel Corporation Mechanism to exploit synchronization overhead to improve multithreaded performance
US7225299B1 (en) 2003-07-16 2007-05-29 Transmeta Corporation Supporting speculative modification in a data cache
US7062631B1 (en) 2003-07-17 2006-06-13 Transmeta Corporation Method and system for enforcing consistent per-physical page cacheability attributes
US7075541B2 (en) 2003-08-18 2006-07-11 Nvidia Corporation Adaptive load balancing in a multi-processor graphics processing system
US7010648B2 (en) 2003-09-08 2006-03-07 Sun Microsystems, Inc. Method and apparatus for avoiding cache pollution due to speculative memory load operations in a microprocessor
US7293161B1 (en) 2003-10-14 2007-11-06 Sun Microsystems, Inc. Deferring loads and stores when a load buffer or store buffer fills during execute-ahead mode
US7310722B2 (en) 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US7340565B2 (en) 2004-01-13 2008-03-04 Hewlett-Packard Development Company, L.P. Source request arbitration
US8190863B2 (en) 2004-07-02 2012-05-29 Intel Corporation Apparatus and method for heterogeneous chip multiprocessors via resource allocation and restriction
US7194604B2 (en) 2004-08-26 2007-03-20 International Business Machines Corporation Address generation interlock resolution under runahead execution
US7421567B2 (en) * 2004-12-17 2008-09-02 International Business Machines Corporation Using a modified value GPR to enhance lookahead prefetch
US20060149931A1 (en) * 2004-12-28 2006-07-06 Akkary Haitham Runahead execution in a central processing unit
US20060174228A1 (en) 2005-01-28 2006-08-03 Dell Products L.P. Adaptive pre-fetch policy
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7571304B2 (en) 2005-03-18 2009-08-04 Sun Microsystems, Inc. Generation of multiple checkpoints in a processor that supports speculative execution
US20060277398A1 (en) 2005-06-03 2006-12-07 Intel Corporation Method and apparatus for instruction latency tolerant execution in an out-of-order pipeline
US7747841B2 (en) 2005-09-26 2010-06-29 Cornell Research Foundation, Inc. Method and apparatus for early load retirement in a processor system
US7730263B2 (en) 2006-01-20 2010-06-01 Cornell Research Foundation, Inc. Future execution prefetching technique and architecture
US20070186081A1 (en) 2006-02-06 2007-08-09 Shailender Chaudhry Supporting out-of-order issue in an execute-ahead processor
US8621120B2 (en) 2006-04-17 2013-12-31 International Business Machines Corporation Stalling of DMA operations in order to do memory migration using a migration in progress bit in the translation control entry mechanism
US8035648B1 (en) 2006-05-19 2011-10-11 Nvidia Corporation Runahead execution for graphics processing units
US8707011B1 (en) 2006-10-24 2014-04-22 Nvidia Corporation Memory access techniques utilizing a set-associative translation lookaside buffer
US7895421B2 (en) 2007-07-12 2011-02-22 Globalfoundries Inc. Mechanism for using performance counters to identify reasons and delay times for instructions that are stalled during retirement
US20090327661A1 (en) * 2008-06-30 2009-12-31 Zeev Sperber Mechanisms to handle free physical register identifiers for smt out-of-order processors
US9155014B2 (en) 2008-11-17 2015-10-06 Qualcomm Incorporated Conditional access terminal initiation of delayed handover
US8639886B2 (en) 2009-02-03 2014-01-28 International Business Machines Corporation Store-to-load forwarding mechanism for processor runahead mode operation
US8145890B2 (en) 2009-02-12 2012-03-27 Via Technologies, Inc. Pipelined microprocessor with fast conditional branch instructions based on static microcode-implemented instruction state
TWI428918B (zh) 2009-09-29 2014-03-01 Silicon Motion Inc 記憶裝置以及記憶裝置之資料存取方法
US9086889B2 (en) 2010-04-27 2015-07-21 Oracle International Corporation Reducing pipeline restart penalty
US8719625B2 (en) 2010-07-22 2014-05-06 International Business Machines Corporation Method, apparatus and computer program for processing invalid data
US8627044B2 (en) * 2010-10-06 2014-01-07 Oracle International Corporation Issuing instructions with unresolved data dependencies
CN102184127B (zh) 2011-05-20 2013-11-06 北京北大众志微系统科技有限责任公司 一种实现处理器预执行的方法及相应的装置
US9009449B2 (en) 2011-11-10 2015-04-14 Oracle International Corporation Reducing power consumption and resource utilization during miss lookahead
US9645929B2 (en) 2012-09-14 2017-05-09 Nvidia Corporation Speculative permission acquisition for shared memory
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
US20140164738A1 (en) 2012-12-07 2014-06-12 Nvidia Corporation Instruction categorization for runahead operation
US9632976B2 (en) 2012-12-07 2017-04-25 Nvidia Corporation Lazy runahead operation for a microprocessor
US9547602B2 (en) 2013-03-14 2017-01-17 Nvidia Corporation Translation lookaside buffer entry systems and methods
US9582280B2 (en) 2013-07-18 2017-02-28 Nvidia Corporation Branching to alternate code based on runahead determination

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870582A (en) * 1997-03-31 1999-02-09 International Business Machines Corporation Method and apparatus for completion of non-interruptible instructions before the instruction is dispatched
US20030018685A1 (en) * 1999-04-29 2003-01-23 Stavros Kalafatis Method and system to perform a thread switching operation within a multithreaded processor based on detection of a branch instruction
US20050138332A1 (en) * 2003-12-17 2005-06-23 Sailesh Kottapalli Method and apparatus for results speculation under run-ahead execution
US20060010309A1 (en) * 2004-07-08 2006-01-12 Shailender Chaudhry Selective execution of deferred instructions in a processor that supports speculative execution
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US20060179279A1 (en) * 2005-02-04 2006-08-10 Mips Technologies, Inc. Bifurcated thread scheduler in a multithreading microprocessor
CN101133391A (zh) * 2005-02-04 2008-02-27 美普思科技有限公司 多线程微处理器中的二分化线程调度器

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110597556A (zh) * 2019-09-09 2019-12-20 中国人民解放军国防科技大学 一种寄存器映射表检查点资源的管理方法、系统及介质

Also Published As

Publication number Publication date
DE102013206501A1 (de) 2013-11-07
TWI626589B (zh) 2018-06-11
US20130297911A1 (en) 2013-11-07
TW201407471A (zh) 2014-02-16
US9875105B2 (en) 2018-01-23

Similar Documents

Publication Publication Date Title
CN103383642A (zh) 用于从超前运行重新进入的设检查点的缓冲区
CN100392622C (zh) 具有存储器顺序缓冲器的处理器
US7496735B2 (en) Method and apparatus for incremental commitment to architectural state in a microprocessor
KR100531433B1 (ko) 다중스레드 프로세서내의 이벤트 어커런스를 처리하는방법 및 장치
TWI470425B (zh) 硬體及軟體系統用之將程式自動分解為多重平行緒之系統,裝置及方法
KR100388947B1 (ko) 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서
CN103842959A (zh) 在计算机系统中维持操作数活性信息
US20170344374A1 (en) Processor with efficient reorder buffer (rob) management
CN101278265A (zh) 使用用户级控制机制进行剖析
CN103809935A (zh) 在超前运行期间管理潜在无效结果
US9891972B2 (en) Lazy runahead operation for a microprocessor
US10007521B1 (en) Banked physical register data flow architecture in out-of-order processors
US20080168260A1 (en) Symbolic Execution of Instructions on In-Order Processors
US7051191B2 (en) Resource management using multiply pendent registers
US20140195790A1 (en) Processor with second jump execution unit for branch misprediction
US7203821B2 (en) Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
JP2006039815A (ja) マルチスレッドプロセッサおよびレジスタ制御方法
CN103793205A (zh) 在超前运行期间对数据的选择性毒化
US20080010440A1 (en) Means for supporting and tracking a large number of in-flight stores in an out-of-order processor
US7962732B2 (en) Instruction processing apparatus
US20100100709A1 (en) Instruction control apparatus and instruction control method
US9823931B2 (en) Queued instruction re-dispatch after runahead
US9983932B2 (en) Pipeline processor and an equal model compensator method and apparatus to store the processing result
US7055020B2 (en) Flushable free register list having selected pointers moving in unison
US9348591B2 (en) Multi-level tracking of in-use state of cache lines

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20131106