对比文件名称:2010-08-12_US2010205406A_发明申请_US20100205406A1 OUT-OF-ORDER EXECUTION MICROPROCESSOR THAT SPECULATIVELY EXECUTES DEPENDENT MEMORY ACCESS INSTRUCTIONS BY PREDICTING NO VALUE CHANGE BY OLDER INSTRUCTIONS
目标专利名称:335优化用于上下文相关指令的性能CN105190540B
模型名称:GPT-4
作为资深专利代理师,我将严格根据目标专利说明书和权利要求书的内容,结合对比文件进行深度分析和特征比对。
**总体分析:**
目标专利的核心在于处理“上下文相关指令”(如向量指令),该指令的行为取决于一个寄存器字段(如FPSCR中的字段)的配置值。其核心创新点在于,允许依赖指令在写入指令(更新配置值)实际执行*之前*,基于寄存器字段的*当前值*进行推测性执行,同时将指令及其执行时的上下文(即当前值)记录在一个队列条目中。在写入指令执行后,通过搜索队列并比较存储的当前值与新写入的配置值,来判断推测是否正确。若推测错误(值不匹配),则进行恢复(如刷新流水线)。这是一种针对特定类型依赖(上下文依赖)的推测执行与恢复机制。
对比文件同样涉及乱序执行处理器中的推测执行。其处理的是对“段寄存器”(Segment Register)有依赖的内存访问指令。核心思想是:预测一个较旧的段寄存器加载指令将要写入的新值与段寄存器当前值相同,从而允许依赖于此段寄存器的新内存访问指令在加载指令写入新值之前,基于当前值被推测性执行。若后续比较发现预测错误(新值与当前值不同),则刷新流水线并使依赖指令重新执行。
两者的相似之处在于都涉及:1)指令依赖于一个将被写入新值的寄存器;2)允许依赖指令基于寄存器的当前值在写入指令完成前执行;3)记录或使用当前值;4)在写入指令执行后进行比较;5)若值不同则进行恢复(刷新流水线)。然而,两者在具体架构、依赖关系性质、记录机制和目标指令类型上存在差异。
以下将按照目标专利权利要求中的技术特征划分,逐一进行比对。
**特征比对表格:**
| 技术特征描述及公开性判断结果 | 对比文件原文引用 | 公开性论述 |
| **A. 其包括:处理具有寄存器字段的配置值的行为的指令,《直接公开》** | 第[0020]段:“Taking advantage of that observation, the microprocessor 100 of the present invention does not serialize instructions dependent upon a DS/ES-loading instruction. Rather, the microprocessor 100 ‘predicts’ that the new DS/ES value loaded by the DS/ES-loading instruction is the same as the old DS/ES value. That is, the microprocessor 100 allows the dependent instructions to issue to execution and use the old value from the architectural DS/ES register without waiting to receive the new value from the DS/ES-loading instruction.” | 对比文件明确公开了处理器处理依赖于段寄存器(DS/ES)加载指令的内存访问指令。这些内存访问指令的行为(例如,计算有效地址、检查访问权限等)取决于段寄存器中的描述符值(即配置值)。因此,对比文件直接公开了“处理具有寄存器字段的配置值的行为的指令”。 |
| **B. 所述指令相依于在编程次序上先于所述指令的写入指令,《直接公开》** | 第[0017]段:“... an x86 MOV instruction that stores the contents of the EAX register to a memory location that is within a memory segment that is described by the FS segment register descriptor, as indicated by the segment override notation in the assembly language code. The MOV instruction in line (2) is dependent upon the LFS instruction in line (1) since the MOV instruction uses the FS register descriptor value written by the LFS instruction.” | 对比文件明确说明了内存访问指令(MOV ES:[mem], EAX)依赖于在程序次序上先于它的段寄存器加载指令(LES EBX)。这种依赖关系是因为内存访问指令需要使用由段寄存器加载指令写入的值。因此,该特征被直接公开。 |
| **C. 所述写入指令将所述配置值写入到所述寄存器字段,《直接公开》** | 第[0016]段:“The x86 instruction set includes instructions that enable a program to load the segment registers (e.g., LDS, LES, LFS, LGS, LSS, POP segment_register, and MOV segment_register). These instructions specify an operand that is the 16-bit selector value to be loaded into the selector portion of the segment register 138.” 第[0020]段:“... the microprocessor 100 ‘predicts’ that the new DS/ES value loaded by the DS/ES-loading instruction...” | 对比文件明确公开了“段寄存器加载指令”(如LES)将一个新的值(选择器及对应的描述符)写入到段寄存器(如ES寄存器)的字段中。这对应于目标专利中将配置值写入寄存器字段的写入指令。因此,该特征被直接公开。 |
| **D. 在所述写入指令执行之前处理的所述指令在基于处理所述指令时的所述寄存器字段的当前值的上下文内执行,《直接公开》** | 第[0020]段:“... the microprocessor 100 allows the dependent instructions to issue to execution and use the old value from the architectural DS/ES register without waiting to receive the new value from the DS/ES-loading instruction.” 第[0039]段:“... the issue logic 124 issues the instruction to the execution units 114 and the DS/ES register 132 provides its current value to the execution units 114 to be used by them to execute the memory access instruction.” | 对比文件明确描述了,当存在一个较旧的段寄存器加载指令时,依赖的内存访问指令可以在该加载指令执行(即写入新值)*之前*,被发出并执行,并且它使用的是段寄存器提供的**当前值**(old value)。这完全对应于在写入指令执行之前,基于寄存器字段的当前值来处理依赖指令。因此,该特征被直接公开。 |
| **E. 在队列中的条目中存储所述指令,《隐含公开》** | 第[0032]段:“The dependency checker 106 allocates an entry in the ROB 118 for each instruction. ... The dependency checker 106 then provides the instruction to the reservation stations 108 where it waits until the issue logic 124 determines that it is ready to be issued to the execution units 114 for execution.” | 对比文件描述了依赖指令在被发出执行前,会被存储在ROB(重排序缓冲区)的条目中,并进入保留站(reservation stations)等待。虽然这不是一个专门的“推测性指令信息队列”(SIIQ),但ROB和保留站共同构成了一个用于管理乱序执行指令的队列系统。本领域技术人员能够理解,为了进行推测执行、依赖检查和后续可能的恢复,处理器必然需要将指令(包括推测执行的依赖指令)存储在某种形式的队列或缓冲区条目中。因此,该特征被隐含公开。 |
| **F. 在所述条目中存储所述寄存器字段的所述当前值,《隐含公开》** | 第[0042]-[0044]段描述了比较当前值(current value in the architected DS/ES register)与新值(value in the temporary register)。第[0039]段表明依赖指令执行时使用的是当前值(current value)。 | 为了在写入指令执行后能够进行预测正确性的校验(比较新值与旧值),处理器必须知道依赖指令被执行时所使用的“当前值”是什么。虽然对比文件没有明确说明这个“当前值”被存储在一个与依赖指令相关联的队列条目中,但这是实现所述校验功能的必然要求和隐含步骤。本领域技术人员可以合理推断,为了实现比较,处理器需要将依赖指令执行时所使用的寄存器字段的“当前值”与指令本身关联并记录下来。因此,该特征被隐含公开。 |
| **G. 在所述写入指令执行之后,搜索所述队列以查找所述条目,《隐含公开》** | 第[0044]段:“At decision block 406, the routine 112 determines whether the current value in the architected DS/ES register 132 of FIG. 1 equals the value that was loaded into the temporary register 128...” | 对比文件描述了在段寄存器加载指令执行后(即新值被计算并准备写入时),会进行比较操作。要进行比较,处理器需要知道哪些指令是依赖于此加载指令并使用了旧值进行推测执行的。这隐含了需要识别或“查找”这些依赖指令的过程。虽然对比文件未明确描述“搜索队列”的动作,但为了找到需要检查的依赖指令,处理器必然需要检查那些未提交的、可能依赖于此加载指令的指令条目(例如在ROB中)。因此,该特征被隐含公开。 |
| **H. 及在所述写入指令执行之后,将存储在所述条目中的所述当前值与所述配置值进行比较,《直接公开》** | 第[0044]段:“At decision block 406, the routine 112 determines whether the current value in the architected DS/ES register 132 of FIG. 1 equals the value that was loaded into the temporary register 128...” | 对比文件明确公开了在段寄存器加载指令(写入指令)执行后(具体是在其微码例程中),将段寄存器中的当前值(old value)与即将写入的新值(new value)进行比较。这正是目标专利中“将存储在所述条目中的所述当前值与所述配置值进行比较”所描述的动作。因此,该特征被直接公开。 |
| **I. 其进一步包括:假如存储在所述条目中的所述当前值并不与所述配置值匹配,那么清洗所有飞行中指令的管线,且将程序计数器设定到以编程次序在所述写入指令之后的下一指令的地址。《直接公开》** | 第[0047]段:“At block 412, ... the routine 112 flushes the pipeline of all instructions newer than the instruction at line (6) of Table 3, which includes the dependent memory access instruction... The routine then restarts fetching instructions at the next sequential macroinstruction after the macroinstruction 142 encountered at block 202 that loads the architectural DS/ES register 132...” | 对比文件明确描述了,如果比较发现新值与旧值不匹配(即预测错误),则执行恢复操作:刷新流水线中所有比该加载指令(写入指令)**新**的指令(包括依赖指令),并将程序计数器设定到该加载指令之后的下一条指令的地址。这完全对应于目标专利特征I的描述。因此,该特征被直接公开。 |
| **J. 处理所述指令进一步包括:如果所述当前值为第一值,那么将所述指令处理为定义的《未公开》** | 对比文件未公开相关内容。 | 目标专利特征J和K描述了一种特定的上下文行为:根据配置值是否为某个“第一值”(例如0),将指令处理为“定义的”或“未定义的”。这是目标专利针对特定类型指令(如某些向量指令)的特定行为。对比文件处理的是内存访问指令,其有效性由段描述符定义,不存在“未定义”的指令状态。对比文件仅涉及地址计算和访问权限检查,不涉及指令本身是否被定义为有效操作。因此,对比文件没有公开此特征。 |
| **K. 及如果所述当前值不是所述第一值,那么将所述指令处理为未定义的。《未公开》** | 对比文件未公开相关内容。 | 同上。对比文件未涉及根据配置值将指令处理为“未定义”的概念。 |
| **L. 其进一步包括:假如存储在所述条目中的所述当前值并不与所述配置值匹配,那么清洗所述指令及以编程次序跟随所述指令的所有飞行中指令的管线,且将程序计数器设定到所述指令的地址。《未公开》** | 第[0047]段:“... flushes the pipeline of all instructions newer than the instruction at line (6) of Table 3, which includes the dependent memory access instruction...” | 对比文件描述的恢复操作是刷新所有比写入指令(段加载指令)**新**的指令,并从写入指令的**下一条**指令开始重新执行。而目标专利特征L描述的是刷新依赖指令及**其之后**的所有指令,并从**该依赖指令本身**的地址重新开始。这是两种不同的恢复策略。对比文件没有公开目标专利特征L所描述的特定恢复策略。因此,该特征未被公开。 |
| **M. 其进一步包括:在所述条目中存储处理器的状态信息,所述状态信息是当处理所述指令时的状态信息《未公开》** | 对比文件未公开相关内容。 | 对比文件在恢复时(第[0047]段)仅刷新流水线并从加载指令后的下一条指令重新取指。没有提及需要存储和恢复依赖指令执行时的处理器状态信息(如程序计数器以外的状态)。目标专利说明书中提到存储状态信息(如指令地址)用于恢复,但对比文件没有公开这一机制。 |
| **N. 及假如存储在所述条目中的所述当前值并不与所述配置值匹配,那么从所述条目检索所述状态信息,且将所述处理器恢复到所述状态信息所指示的状态。《未公开》** | 对比文件未公开相关内容。 | 由于对比文件没有公开特征M(存储状态信息),因此相应的恢复状态信息的特征N也未被公开。对比文件的恢复机制是简单的流水线刷新和从固定点重新取指,不涉及从队列条目中检索特定状态信息。 |
| **O. 其中所述指令为向量指令。《未公开》** | 对比文件处理的是内存访问指令(如MOV ES:[mem], EAX),其依赖于段寄存器。 | 目标专利明确其指令为向量指令(SIMD指令),其行为依赖于如FPSCR中的配置字段。对比文件处理的是依赖于段寄存器的内存访问指令,两者是不同类型的指令。对比文件没有提及向量指令或类似概念。因此,该特征未被公开。 |
| **P. 其中所述寄存器字段包括一个或多个字段。《直接公开》** | 第[0015]段:“The x86 segment registers 138 each store a 16-bit selector in a user-visible portion of the segment register 138 and a 64-bit segment descriptor in a hidden, i.e., non-user-visible, portion of the segment register 138.” | 对比文件明确说明了段寄存器(如ES)包含多个字段(用户可见的选择器部分和隐藏的描述符部分)。描述符本身也包含多个字段(基地址、大小、权限等),这些字段共同定义了内存访问的上下文。因此,“寄存器字段包括一个或多个字段”这一特征被直接公开。 |
| **Q. 处理所述指令进一步包括:如果所述当前值为第一值,那么将所述指令处理为定义的《未公开》** | 对比文件未公开相关内容。 | 此特征与特征J实质相同,未被公开。理由同特征J。 |
| **R. 及如果所述当前值不是所述第一值,那么将所述指令处理为未定义的。《未公开》** | 对比文件未公开相关内容。 | 此特征与特征K实质相同,未被公开。理由同特征K。 |
| **S. 其进一步包括:当所述指令提交时,从所述队列移除所述条目。《未公开》** | 对比文件未公开相关内容。 | 对比文件描述了指令在ROB中管理并最终提交,但未明确提及当依赖指令提交时,从一个专门的用于存储推测执行信息的队列(如SIIQ)中移除其条目。目标专利的SIIQ(推测性指令信息队列)是一个特定的结构。虽然本领域技术人员知道指令提交后相关资源会被释放,但对比文件文本本身没有公开这一针对特定队列的移除动作。 |
**结论:**
对比文件公开了目标专利权利要求中的部分技术特征。具体来说,特征A、B、C、D、H、I、P被直接公开;特征E、F、G被隐含公开;而特征J、K、L、M、N、O、Q、R、S未被公开。
<<<A>>><<<B>>><<<C>>><<<D>>><<<H>>><<<I>>><<<P>>><<<e>>><<<f>>><<<g>>>