CN112433763A - 基于状态执行指令 - Google Patents
基于状态执行指令 Download PDFInfo
- Publication number
- CN112433763A CN112433763A CN202010855071.5A CN202010855071A CN112433763A CN 112433763 A CN112433763 A CN 112433763A CN 202010855071 A CN202010855071 A CN 202010855071A CN 112433763 A CN112433763 A CN 112433763A
- Authority
- CN
- China
- Prior art keywords
- instruction
- instructions
- state
- state update
- circuitry
- 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
Links
- 230000004044 response Effects 0.000 claims description 16
- 238000000034 method Methods 0.000 claims description 15
- 239000013598 vector Substances 0.000 claims description 13
- 238000011010 flushing procedure Methods 0.000 claims description 7
- 230000001419 dependent effect Effects 0.000 claims description 6
- 230000006870 function Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- VATIUZAZSWNDAM-UHFFFAOYSA-N [4-[(2-bromoacetyl)amino]phenyl]arsonic acid Chemical compound O[As](O)(=O)C1=CC=C(NC(=O)CBr)C=C1 VATIUZAZSWNDAM-UHFFFAOYSA-N 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000003672 processing method 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
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3055—Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- 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/30094—Condition code generation, e.g. Carry, Zero flag
-
- 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/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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
-
- 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
-
- 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/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Advance Control (AREA)
Abstract
本公开提供了基于状态执行指令。提供了一种数据处理装置,其包括取得电路,用于从存储电路取得包括多个指令的指令流,该多个指令包括状态更新指令。状态存储电路存储状态值。执行电路执行指令,其中所述指令中的至少一些指令被以与指令流中不同的顺序执行。对于状态更新指令,执行电路被适配为基于状态更新指令的执行来更新状态值。冲刷电路在状态存储电路被更新时,冲刷指令流中的在状态更新指令之后出现的被冲刷指令。
Description
技术领域
本公开涉及数据处理。更具体而言,本公开涉及数据处理装置中的指令的执行顺序。
背景技术
在数据处理装置中,某些指令在其执行期间可产生特定的副作用。这种副作用可例如被表示为状态寄存器中的状态值。例如,针对指令的全部或一部分可能发生故障或差错,这可由对状态值的更新来指示。等待确定特定副作用是否已发生可能是消耗时间的,并且可能导致处理时间停顿到发现了这种副作用是否发生或者发生到了什么程度为止。
发明内容
从第一示例配置来看,提供了一种数据处理装置,包括:取得电路,用于从存储电路取得包括多个指令的指令流,所述多个指令包括状态更新指令;状态存储电路,用于存储状态值;执行电路,用于执行所述指令,其中所述指令中的至少一些指令被以与所述指令流中不同的顺序执行,并且其中,对于所述状态更新指令,所述执行电路被适配为基于所述状态更新指令的执行来更新所述状态值;以及冲刷电路,用于在所述状态存储电路被更新时冲刷所述指令流中的在所述状态更新指令之后出现的被冲刷指令。
从第二示例配置来看,提供了一种数据处理方法,包括:从存储电路取得包括多个指令的指令流,所述多个指令包括状态更新指令;将状态值存储在状态存储电路中;执行所述指令,其中所述指令中的至少一些指令被以与所述指令流中不同的顺序执行,并且其中,对于所述状态更新指令,所述执行所述指令的步骤基于所述状态更新指令的执行来更新所述状态值;并且当所述状态存储电路被更新时,冲刷所述指令流中的在所述状态更新指令之后出现的被冲刷指令。
从第三示例配置来看,提供了一种数据处理装置,包括:用于从存储电路取得包括多个指令的指令流的装置,所述多个指令包括状态更新指令;用于存储状态值的装置;用于执行所述指令的装置,其中所述指令中的至少一些指令被以与所述指令流中不同的顺序执行,并且其中,对于所述状态更新指令,所述用于执行所述指令的装置基于所述状态更新指令的执行来更新所述状态值;以及用于在用于存储状态值的装置被更新时冲刷所述指令流中的在所述状态更新指令之后出现的被冲刷指令的装置。
附图说明
将参考在附图中图示的本发明的实施例来仅作为示例进一步描述本发明,附图中:
图1示意性图示了根据一些实施例的数据处理装置;
图2根据一些实施例更详细示出了提交队列和发出队列的示例;
图3示出了根据一些实施例可使用的存储电路的示例;
图4根据一些实施例示出了其中循环包括状态更新指令的示例;
图5根据一些实施例示出了图示数据处理的方法的流程图;
图6根据一些实施例图示了进一步示例;并且
图7根据一些实施例示出了图示数据处理的方法的流程图。
具体实施方式
在参考附图论述实施例之前,提供以下对实施例的描述。
根据一个方面,提供了取得电路,用于从存储电路取得包括多个指令的指令流,所述多个指令包括状态更新指令;状态存储电路,用于存储状态值;执行电路,用于执行所述指令,其中所述指令中的至少一些指令是按与所述指令流中不同的顺序执行的,并且其中,对于所述状态更新指令,所述执行电路被适配为基于所述状态更新指令的执行来更新所述状态值;以及冲刷电路,用于在所述状态存储电路被更新时冲刷所述指令流中的在所述状态更新指令之后出现的被冲刷指令。
取得电路从存储电路取得指令的流,该存储电路可例如是主存储器或者可以是指令缓存。在该流内有状态更新指令,该状态更新指令有可能更新状态存储电路中的值。指令的流被发送到执行电路以便执行。被执行的一些指令是按与这些指令在指令流中出现的顺序不同的顺序来执行的。换言之,一些指令是被乱序执行的。对于状态更新指令,执行电路被适配为更新存储在状态存储电路中的状态值。该更新是基于对状态更新指令本身的执行的。也就是说,状态存储电路中的状态值可取决于状态更新指令的执行而被更新或者不被更新,而且当状态值被改变时状态值的值可依从于指令的执行。该装置还包括冲刷电路,该冲刷电路在状态存储电路被更新时冲刷系统。具体地,流中的在状态更新指令之后出现的指令被冲刷——这实际上可实现系统的“回卷(rewind)”。注意,并不是非要监视状态值和状态存储电路的变化以使得冲刷电路执行冲刷,并且在一些实施例中,状态值是在冲刷的同时被更新的(例如,当冲刷请求被发送到提交队列时)。更新状态值的执行电路因此也可被配置为使得冲刷同时发生。数据处理装置因此能够通过乱序执行在状态更新指令之后出现的指令来继续执行这些指令。例如,这种指令可被投机地(speculatively)执行。这种投机假设状态存储电路中的状态值不会变化。在确实如此的情况下,不需要采取进一步动作并且通过在状态更新指令被解决的同时继续执行指令来维持系统的效率。在状态更新指令使得状态值被更新的情况下,提供了冲刷电路以便撤消被乱序执行的未提交指令。这样,保持了系统的效率,同时通过提供回卷机制也保持了数据完好性。
在一些实施例中,状态更新指令是引用存储器地址的存储器访问指令;并且执行电路包括存储器访问电路来响应于存储器访问指令执行对存储器地址的访问。存储器访问指令可被认为是在某些情况下访问存储器的指令。具体地,可提供一个或多个存储器地址,并且在这些情况下,可访问这些存储器地址处的存储器。在其他实施例中,状态更新指令可以是另一个长时延指令(例如,多周期执行指令),例如除法指令。在任何情况下,状态更新指令执行其功能并且使得状态存储电路中的状态值基于该执行被更新。
在一些实施例中,存储器访问指令有条件地执行对存储器地址的访问。因此,存储器访问指令不需要始终实际访问存储器。具体地,存储器访问指令可以是这样的指令:对于该指令,访问的存储器是有条件的或者只在某些情况下发生。在一些情况中,存储器访问指令可包含对指出该指令是否要发生的标志的引用,或者可包含指出实际存储器访问应当在什么情况下发生的另一配置值。
在一些实施例中,存储器访问指令是加载指令;并且访问是加载。加载指令可(有条件地)访问存储器中的位置并且取回存储在该特定位置处的数据。取回的数据随后可例如被存储在寄存器中。
在一些实施例中,存储器访问指令是向量加载指令。向量加载指令可被认为是这样的指令:该指令使得存储器中的若干个连续或不连续的位置被访问,并且这些位置中的数据被加载到向量寄存器中。这种指令通常被认为是与标量加载指令不同的。
在一些实施例中,向量加载指令执行对数据的连续加载。可以使用对数据的连续加载来将若干个数据值从存储器中的循序地址(sequential address)加载到向量寄存器中。
在一些实施例中,存储器访问指令被适配为使得存储器访问电路从多个非连续地址收集数据到寄存器中。在这种示例中,被加载到向量寄存器中的值的地址可来自彼此不相邻的若干个不同地址。这种操作经常被称为“收集”操作。
在一些实施例中,执行电路被适配为在状态更新指令的执行期间响应于故障条件而更新状态值。状态存储电路中的状态值因此可响应于在状态更新指令的执行期间(例如,在作为状态更新指令的一部分发生的存储器访问期间)发生的故障条件而被更新。注意,不一定非要实际形成故障,而是存在通常会引起故障发生的条件就足够了。例如,在一些实施例中,可响应于检测到可能发生故障的情形而更新状态值。对状态寄存器的更新可代替实际形成故障。
在一些实施例中,执行电路被适配为在状态更新指令的执行期间响应于故障条件而更新状态值;并且响应于故障条件是关于不是多个地址中的第一地址的该多个地址中的一个地址的,状态值被更新为与该多个地址中的该一个地址相对应。如上所述,故障条件并不会使故障必然实际形成,而是指存在可能引起故障发生的情况。在这种实施例中,故障条件可涉及在存储器中被访问的多个地址中不是地址中的第一地址的地址之一。当这个发生时,状态值被更新来与多个地址中故障所涉及的那个地址相对应。这样,即使没有实际生成故障,状态值也可被更新来表示或指出哪个地址本来将会引起故障发生。如果存在故障条件并且没有采取异常,则状态值被更新来指出哪个地址引起了该故障。这种技术对于向量加载指令或者在一个指令中访问若干个不同存储器位置的指令尤其有用,因为这使得可能准确地响应故障条件,从而提供了关于确切来说哪个存储器访问引起了问题发生的知识。将会明白,在其他实施例中,状态值始终被更新为与会引起故障的地址相对应。在一些实施例中,当故障条件涉及多个地址中的第一地址时,可形成实际故障。“第一”地址可限于被认为是活跃的那些地址。非活跃地址可与指出该地址不被访问的指示一起被提供到指令。
在一些实施例中,执行电路被适配为响应于对设备存储器的访问而更新状态值。设备存储器访问的行为方式可不与非设备存储器访问完全相同。例如,对设备存储器中的位置的读取可引起副作用,例如某个值可能被从缓冲器弹出,使得其不能再次被访问。状态值因此可被更新来指出这种指令访问存储器成功或失败的程度,因为简单地再次执行设备存储器访问指令可能不是合乎需要的,或者甚至是不可能的。
在一些实施例中,被以与指令流中不同的顺序执行的至少一些指令是依从于状态值的。状态值因此在这些实施例中指出指令要如何被执行。
在一些实施例中,至少一些指令在状态更新指令完成之前被执行。因此,即使特定的指令(被以与指令流中不同的顺序执行的那些指令)可依从于状态值,例如利用状态值,也可允许这些指令在状态更新指令完成之前执行。这样,保持了系统的效率,结果是在指令的执行可继续之前不必等待状态更新指令完成执行。
在一些实施例中,多个指令包括另一状态更新指令;并且响应于状态更新指令和另一状态更新指令两者都试图更新状态值,状态更新指令和另一状态更新指令以它们在指令流中出现的顺序来更新状态存储电路。一般而言,状态更新指令可被自由地发出并且可自由地完成。然而,当状态更新指令试图更新状态值时,其不能投机地做这件事,因此引申开来,试图更新状态值的两个状态更新指令以它们在指令流中出现的顺序来做这件事。在实践中,由于动态地确定状态更新指令是否将会更新状态值,因此状态更新指令可在任何时间被发出并且它们然后可在以下任一情况发生时完成:(a)该指令不试图更新状态值;或者(b)该指令确实试图更新状态值并且是最老旧的未提交指令(提交指针正在指向当前指令)。
现在将参考附图描述特定实施例。
图1示意性图示了根据一些实施例的数据处理装置100。数据处理装置100包括取得电路110,其负责从存储器(从主存储器或者经由缓存从存储器)取得指令。取回的指令被传递到解码电路120,解码电路120响应于指令生成一个或多个操作。从这里,操作被传递到提交队列180。提交队列保持跟踪指令被接收到的顺序,使得如果它们被以不同的顺序执行,则它们被以与指令被接收到的顺序相同的顺序提交(例如,执行完成),从而提供数据完好性。同时,与指令相对应的操作被传递到重命名电路130,在这里可去除虚假依从性。从这里,提供发出电路140来将操作发出到执行电路150。这种发出可使得指令被乱序提供到执行电路。执行电路可由若干个执行单元构成,例如算术逻辑电路(arithmetic logic unit,ALU)160a、第二ALU 160b、浮点单元(floating point unit,FPU)160c、加载/存储单元160d和分支单元160e,其中第二ALU 160b是提供来使得多个算术操作能够同时发生的。执行单元的其他示例将是本领域技术人员已知的。这些执行单元接收操作并且基于这些操作执行一个或多个功能。当操作完成时,它们被参照提交队列提交,从而使得即使指令被乱序执行,它们也被以它们从解码电路出现的顺序提交。在提交队列180中提供提交指针185来跟踪要提交的下一个指令。这个指针在每次提交队列中的指令被提交时被递增。
在由取得电路110获得的指令的流内可以有状态更新指令。这个指令是这样的:当被执行单元150之一执行时,依从于特定条件,执行单元同时更新状态存储电路170中存储的值并且还使得冲刷经由冲刷电路190发生。在这些实施例中,使得冲刷电路190冲刷在指令的流中出现在状态更新指令之后的指令。注意虽然冲刷电路190在这里被示为单独的组件,但其也形成提交队列180的一部分。
在这些实施例中,在状态更新指令之后发生的指令可继续被乱序执行。这可包括依赖于状态存储电路170中的状态值的指令。这是通过假设状态存储电路170中的状态值不会被改变来实现的。因此,其他指令(即使是依从于状态存储电路170中的状态值的值的那些指令)甚至在状态更新指令完成之前就可被执行。
在一些情况中,关于不会对状态存储电路170作出改变的预测将是不正确的。在这些情形中,更新状态存储电路170,并且同时,使得冲刷电路190冲刷在更新了状态存储电路的指令之后出现的那些指令。换句话说,数据处理装置100使得有可能基于状态存储电路170不会被更新的假设来投机地执行状态更新指令之后的指令。如果发现这是不正确的,则回卷发生,冲刷基于不正确信息执行的那些指令。
使得指令能够被乱序执行的过程可在重命名电路130处实现。这里,重命名电路可忽略状态更新指令和跟随其后的任何其他指令之间的任何表观数据依从性。其后果是指令将会好像状态更新指令没有对状态存储电路170作出改变那样执行。
图2根据一些实施例更详细图示了提交队列180和发出队列140的示例。
在这些示例中,给出了LDFF(id 1)指令。这是状态更新指令的示例——具体而言是将若干个数据值(可能来自存储器的非连续区域)加载到向量寄存器中的一类向量加载指令。这个指令的一个特定特征是提供了特殊的FF(first fault,第一故障)寄存器,其是状态存储电路170的示例。如果关于由LDFF指令引用的存储器位置之一满足故障条件,则依据被引用的存储器位置是否是该指令引用的第一位置来采取行动。如果该位置是第一位置,则形成故障。如果不是,则FF寄存器170被更新来与满足故障条件的地址相对应。然后软件可以对此信息作出反应。通常,这是通过以问题位置作为第一引用位置再次运行指令来发生的。这一次,如果满足故障条件,则形成故障。
此示例也利用了RDFFR指令(id 2),其读取FF寄存器170。RDFFR指令因此可用于确定潜在故障是否已发生并且可以使得软件相应地作出反应。
图2中的提交队列180示出了LDFF指令,随后是RDFFR指令,随后是ADD指令(id 3),随后是SUB指令(id 4),随后是第二LDFF指令(id 5),随后是第二RDFFR指令(id 6),随后是两个SUB指令(id7和8)。通常,每个RDFFR指令将依从于其相应的LDFF指令。也就是说,RDFFR指令将不被允许执行,直到LDFF指令已完成的时间为止,因为它们可更改状态寄存器的内容。然而,在本实施例中,这种依从性被忽略,并且在FF寄存器不会被更新的假设下,指令的执行被允许继续。因此,可以看出,在图示了已被发送来执行的指令的发出电路140中,甚至在LDFF指令(id 1)完成了执行之前,RDFFR指令(id 2)以及甚至ADD指令(id 3)就都已经被发出(被发送来执行)。
一般而言,有可能以这种方式乱序发出任何指令。出现一种特殊的情形,其中两个状态更新指令(例如,两个LDFF指令)都希望更新FF寄存器170。在此情况下,每个状态更新指令相对于其他指令可被乱序发出,但状态更新指令被非投机地执行(因为它们试图更新状态寄存器)。也就是说,每个LDFF指令是以它们在提交队列中存在的顺序被完成的。在实践中,这可借由提交指针185来实现。具体地,状态更新指令可被发出,但为了完成,这些指令中的每一者或者(a)不试图更新FF寄存器170,或者(b)确实试图更新FF寄存器170并且其执行被延迟,直到提交指针指向该指令为止。这样,都试图更新FF寄存器170的两个状态更新指令按顺序更新,而不试图更新FF寄存器的状态更新指令受到的约束更少。
图3根据一些实施例示出了可用于辅助指令之间的依从性的去除的存储电路的示例。具体地,提供了标志寄存器310。标志寄存器响应于SETFFR指令被设置(例如,设置到“1”),该SETFFR指令设置状态存储电路的值(例如,设置到默认值)。当标志寄存器310被设置时,后续的RDFFR指令可假设状态存储电路被设置到默认值,而不实际读取状态存储电路。其结果是,即使SETFFR指令尚未设法设置状态存储电路的值(这可能直到SETFFR指令是最老旧的未提交指令之时为止才是可能的),RDFFR指令仍可继续进行。如果LDFF指令使得状态存储电路被更新,则标志寄存器310被清除(并且依赖于状态存储电路是默认值的指令被冲刷)。后续指令随后读取存储电路,而不是假设其被设置到特定值。
其结果是,(例如,重命名电路)有可能去除RDFFR指令和LDFF指令之间的依从性。RDFFR指令从而可投机地执行,而不必等待先前指令。
图4根据一些实施例图示了包括状态更新指令(LDFF)的循环的示例。在此示例中,该循环包括SETFFR指令,其使得FF寄存器的值被重置(即,指出关于任何存储器地址都没有发生故障)。这后面是LDFF指令,该LDFF指令使得加载发生在由向量寄存器“Xi”定义的一组存储器地址上。另外这后面是RDFFR指令,该RDFFR指令使得FF寄存器被读取以便确定是否发生了故障。如果FF寄存器指出发生了故障,则执行特殊的子例程(未示出)。该循环针对五个不同的寄存器值被重复五次。因此,若干个存储器位置被利用LDFF指令循序地读取到寄存器中。
在此示例中,SETFFR指令(其在此示例中是状态更新指令的一个示例)使得标志寄存器310被设置。因此,不是等待LDFF指令完成(其在此示例中是状态更新指令的第二示例),RDFFR指令而是假设FF寄存器的值将会保持不变。进一步指令于是可被允许执行。具体地,这些进一步指令可以是该循环的迭代内的进一步指令,或者可以是该循环的后续迭代处的指令,例如LDFF指令或RDFFR指令的第二次执行。RDFFR指令假设对FF寄存器没有作出改变。如先前说明的,如果LDFF指令确实引起对FF寄存器的更新,则冲刷将在后续指令上发生(因为这些后续指令将会使用了FF寄存器的不正确值)并且标志寄存器310被清除。后续指令于是将读取FF寄存器,直到SETFFR指令被执行的时间为止。在多个指令未解决并且多个LDFF指令试图更新FF寄存器的情况下,这些指令被以它们在由取得电路取得的指令流中出现的顺序来完成。类似地,试图更新FF寄存器的LDFF指令和SETFFR指令相对于彼此被按序执行,因为两个指令都试图改变FF寄存器。
上述技术使得有可能不仅去除迭代之间的依从性,而且也打破了单个迭代内的依从性(例如,LDFF指令和RDFFR指令之间的依从性)。此外,这可利用少量的电路来完成,例如标志寄存器310。
图5根据一些实施例示出了图示数据处理的方法的流程图500。具体地,图5图示了发出和完成状态更新指令的过程。在步骤510,发出状态更新指令。这与该指令相对于指令流中的其他指令出现的顺序相比可乱序发生。在步骤520,状态更新指令的执行开始。在步骤530,确定状态更新指令是否将会更新状态寄存器。如果否,则该指令在步骤570完成。否则,在步骤540,确定提交指针当前是否指向当前指令(表明这是最老旧的未提交指令)。如果否,则在步骤550使其在其他指令继续执行的同时等待。该过程随后再次返回到步骤540。最终,由于其他指令的完成,状态更新指令将是最老旧的未解决指令(例如,提交指针将指向当前状态更新指令)。此时,在步骤560,状态寄存器被更新并且冲刷被命令,这将冲刷所有更年轻的指令,因为它们可能使用了状态存储电路中的陈旧值。该指令随后在步骤570完成。
这样,状态更新指令可取决于它们是否试图更新状态寄存器而按序或者乱序执行。如果它们试图更新状态寄存器,则指令不能被投机地执行,并且因此,试图更新状态寄存器的多个状态更新指令被相对于彼此按序执行。
图6图示了涉及经认证指针的相关示例。经认证的或者带签名的指针600是用于避免数据处理装置中的作为攻击向量的指针的颠覆的技术。虽然一种体系结构可在保持虚拟地址的寄存器中提供多达64比特,但这些比特中只有一些(例如,40比特)可实际用于表示虚拟地址。剩余的(例如,24比特)可以简单地是虚拟地址的最高有效比特的拷贝。指针的这个特定格式被称为“规范形式”。因此将会明白,寄存器中的指针的高位比特实际上未被使用。为此,高位比特的一些或全部可用于存储认证码或校验和。这是通过以下操作来实现的:取得实际指代虚拟地址空间中的地址的指针值610的相关40比特,并且将这个值应用到使用一个或多个另外的输入参数630的加密功能620,以产生认证码640,其中该认证码640被插入到寄存器中的指针的高位未使用比特中。
当指针要被访问时,指针610的低位40比特再次被应用到使用(一个或多个)输入参数630的加密功能620以产生认证码的另一拷贝,该另一拷贝被与寄存器中的认证码640相比较。如果两个认证码匹配,则自从认证码640被生成起,指针610没有被改变。随后可通过拷贝指针610的最高有效比特以覆盖认证码来恢复规范形式。如果认证失败,则认证码640的比特可能被损坏并且对指针的尝试使用将导致故障。
通常,加密功能620是复杂的并且可花费多个处理器周期来执行。其结果是,当指针被使用时可发生时延,例如因为分支指令。这种时延是由于加密功能620必须在分支发生之前被执行而发生的。
在本实施例中,提供了组合的加载/分支指令,其中指针的规范值被生成,并且到该位置的分支在加密功能620被执行的同时投机地发生。结果,指令被执行,而不必等待认证的结果。这可在解码电路处执行,其最初可将BRAA指令(分支到寄存器,带有指针认证)解码为操作的序列:
AUTIA Xn,Xm
STRIP tmp0,Xn
BR tmp0
AUTIA操作引起使用Xm作为认证的“密钥”的对存储在寄存器Xn中的指针的认证。认证操作使得Xn中的指针在认证正确的情况下被修改成规范形式的指针(即,去除了认证码),或者在认证无效的情况下被修改成损坏的指针。STRIP操作简单地从Xn中的指针去除认证码并且将结果存储在tmp0中(即,其产生指针的规范形式)。最终BR操作执行到tmp0中的地址的分支。可以使STRIP操作在AUTIA操作完成之前执行(即,在认证修改被执行之前使用指针的老旧版本)。结果,在知道认证是否成功之前,将在指针上执行BR操作。在实践中,使得BR指令依从于STRIP操作,而不是AUTIA操作的结果。STRIP不依从于AUTIA,因为AUTIA表面上不提供输出到Xn。AUTIA只是基于认证的结果修改Xn并且因此如果STRIP在AUTIA完成之前被发出,则STRIP简单地使用Xn的老旧(AUTIA前)版本。
在任何情况下,如果随后发现认证失败,则这一系列操作(以及任何随后的操作)被冲刷(例如,被冲刷电路190冲刷)。在第二轮,BRAA指令被非投机地执行并且被解码成以下的一系列操作:
AUTIA Xn,Xm
BR Xn
这里,由于没有STRIP操作,所以分支只能在一旦认证码已被AUTIA去除时发生。因此,BR操作依从于AUTIA操作的结果。结果,BR操作不能执行,直到AUTIA操作完成为止。这引起延迟,尤其如果AUTIA操作要花几个周期来完成的话。
可用来实现这个的另一种方式是通过解码成以下一系列操作:
AUTIA tmp0,Xn,Xm
BR Xn
在此示例中,不是使用Xn作为源并且用结果更新Xn,而是将AUTIA操作的结果指引到临时寄存器tmp0。结果,BR操作不需要等待Xn寄存器,从而打破了指令之间的依从性。BR操作因此将使用Xn的老旧版本。然而,注意由于Xn将在顶部比特内具有认证码(还没有执行STRIP操作),因此控制比特被设置成使得不作为BR操作的一部分执行规范检查。这因此不同于上面说明的非投机执行,非投机执行在认证失败时发生,其中控制比特被设置来使得BR操作执行规范检查。
图7根据一些实施例图示了示出数据处理的方法的流程图700。在步骤710,取得指令,在步骤720,合并指令。
合并可在以下情况下发生:存在执行指针认证的第一指令,其后是基于指针认证的结果执行分支的分支指令。这可发生在没有单个组合“认证和分支/加载”指令的情况中,该单个组合“认证和分支/加载”指令支持所寻求的特定类型的分支/加载。这种合并因此寻找认证指令后跟着分支/加载指令的实例并且产生如上说明的一系列操作。指令从而实际上被融合在一起以去除认证和继续的(proceeding)分支(或加载)之间的数据依从性。这是在指令被解码的同时(或者在经解码的指令被存储在缓存中的同时)执行的。指令的融合使得操作假设认证成功并且使得认证操作在其失败的情况下引起冲刷。
返回到流程图,在步骤730,确定认证指令先前是否故障了。如果是,则在步骤740,解码过程生成微操作的非投机系列,并且过程返回到步骤710。如果否,则在步骤750,生成微操作的投机系列,其使得随后的指令被执行,假设认证将成功。然后,如果在步骤760发生故障,则与投机流相对应的微操作和与任何后来指令相对应的那些微操作在步骤770被冲刷,在这里过程返回到步骤710。如果没有发生故障,则过程简单地返回到步骤710。
在本申请中,词语“被配置为”被用于意指装置的元素具有能够执行所定义的操作的配置。在这个上下文中,“配置”指的是硬件或软件的布置或者互连方式。例如,装置可具有提供所定义的操作的专用硬件,或者处理器或其他处理设备可被编程为执行该功能。“被配置为”并不意味着为了提供所定义的操作,装置元素需要被以任何方式改变。
虽然本文已参考附图详细描述了本发明的说明性实施例,但要理解本发明不限于这些确切的实施例,并且在不脱离如所附权利要求限定的本发明的范围和精神的情况下,本领域技术人员可在其中实现各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,从属权利要求的特征可与独立权利要求的特征进行各种组合。
Claims (15)
1.一种数据处理装置,包括:
取得电路,用于从存储电路取得包括多个指令的指令流,所述多个指令包括状态更新指令;
状态存储电路,用于存储状态值;
执行电路,用于执行所述指令,其中所述指令中的至少一些指令被以与所述指令流中不同的顺序执行,并且其中,对于所述状态更新指令,所述执行电路被适配为基于所述状态更新指令的执行来更新所述状态值;以及
冲刷电路,用于在所述状态存储电路被更新时冲刷所述指令流中的在所述状态更新指令之后出现的被冲刷指令。
2.根据权利要求1所述的数据处理装置,其中,
所述状态更新指令是引用存储器地址的存储器访问指令;并且
所述执行电路包括存储器访问电路,用于响应于所述存储器访问指令而执行对所述存储器地址的访问。
3.根据权利要求2所述的数据处理装置,其中,
所述存储器访问指令有条件地执行对所述存储器地址的访问。
4.根据权利要求2所述的数据处理装置,其中,
所述存储器访问指令是加载指令;并且
所述访问是加载。
5.根据权利要求2所述的数据处理装置,其中,
所述存储器访问指令是向量加载指令。
6.根据权利要求5所述的数据处理装置,其中,
所述向量加载指令执行对数据的连续加载。
7.根据权利要求5所述的数据处理装置,其中,
所述存储器访问指令被适配为使得所述存储器访问电路从非连续的多个地址收集数据到寄存器中。
8.根据权利要求1所述的数据处理装置,其中,
所述执行电路被适配为在所述状态更新指令的执行期间响应于故障条件而更新所述状态值。
9.根据权利要求7所述的数据处理装置,其中,
所述执行电路被适配为在所述状态更新指令的执行期间响应于故障条件而更新所述状态值;并且
响应于所述故障条件关于不是所述多个地址中的第一地址的所述多个地址中的一个地址,所述状态值被更新为与所述多个地址中的所述一个地址相对应。
10.根据权利要求1所述的数据处理装置,其中,
所述执行电路被适配为响应于对设备存储器的访问而更新所述状态值。
11.根据权利要求1所述的数据处理装置,其中,
被以与所述指令流中不同的顺序执行的所述指令中的所述至少一些指令是依从于所述状态值的。
12.根据权利要求11所述的数据处理装置,其中,
所述指令中的所述至少一些指令在所述状态更新指令完成之前被执行。
13.根据权利要求1所述的数据处理装置,其中,
所述多个指令包括另一状态更新指令;并且
响应于所述状态更新指令和所述另一状态更新指令两者都试图更新所述状态值,所述状态更新指令和所述另一状态更新指令以它们在所述指令流中出现的顺序来更新所述状态存储电路。
14.一种数据处理方法,包括:
从存储电路取得包括多个指令的指令流,所述多个指令包括状态更新指令;
将状态值存储在状态存储电路中;
执行所述指令,其中所述指令中的至少一些指令被以与所述指令流中不同的顺序执行,并且其中,对于所述状态更新指令,所述执行所述指令的步骤基于所述状态更新指令的执行来更新所述状态值;以及
当所述状态存储电路被更新时,冲刷所述指令流中的在所述状态更新指令之后出现的被冲刷指令。
15.一种数据处理装置,包括:
用于从存储电路取得包括多个指令的指令流的装置,所述多个指令包括状态更新指令;
用于存储状态值的装置;
用于执行所述指令的装置,其中所述指令中的至少一些指令被以与所述指令流中不同的顺序执行,并且其中,对于所述状态更新指令,所述用于执行所述指令的装置基于所述状态更新指令的执行来更新所述状态值;以及
用于在用于存储状态值的装置被更新时冲刷所述指令流中的在所述状态更新指令之后出现的被冲刷指令的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/550,612 US11663014B2 (en) | 2019-08-26 | 2019-08-26 | Speculatively executing instructions that follow a status updating instruction |
US16/550,612 | 2019-08-26 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112433763A true CN112433763A (zh) | 2021-03-02 |
Family
ID=74679519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010855071.5A Pending CN112433763A (zh) | 2019-08-26 | 2020-08-24 | 基于状态执行指令 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11663014B2 (zh) |
CN (1) | CN112433763A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024137374A1 (en) * | 2022-12-22 | 2024-06-27 | Rivos Inc. | Processor with delayed instruction pipeline flush |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030126414A1 (en) * | 2002-01-02 | 2003-07-03 | Grochowski Edward T. | Processing partial register writes in an out-of order processor |
US8271832B2 (en) * | 2008-08-15 | 2012-09-18 | Apple Inc. | Non-faulting and first-faulting instructions for processing vectors |
US8769247B2 (en) * | 2011-04-15 | 2014-07-01 | Advanced Micro Devices, Inc. | Processor with increased efficiency via early instruction completion |
US8862861B2 (en) * | 2011-05-13 | 2014-10-14 | Oracle International Corporation | Suppressing branch prediction information update by branch instructions in incorrect speculative execution path |
GB2540942B (en) * | 2015-07-31 | 2019-01-23 | Advanced Risc Mach Ltd | Contingent load suppression |
-
2019
- 2019-08-26 US US16/550,612 patent/US11663014B2/en active Active
-
2020
- 2020-08-24 CN CN202010855071.5A patent/CN112433763A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20210064377A1 (en) | 2021-03-04 |
US11663014B2 (en) | 2023-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111164578B (zh) | 核内锁步模式的错误恢复 | |
US6721874B1 (en) | Method and system for dynamically shared completion table supporting multiple threads in a processing system | |
US6185671B1 (en) | Checking data type of operands specified by an instruction using attributes in a tagged array architecture | |
US6314514B1 (en) | Method and apparatus for correcting an internal call/return stack in a microprocessor that speculatively executes call and return instructions | |
US9361242B2 (en) | Return stack buffer having multiple address slots per stack entry | |
US8543796B2 (en) | Optimizing performance of instructions based on sequence detection or information associated with the instructions | |
US10776124B2 (en) | Handling exceptional conditions for vector arithmetic instruction | |
KR100472346B1 (ko) | 명령어 리플레이를 포함하는 프로세서 파이프라인 | |
JPH11510291A (ja) | スーパースケーラープロセッサにおけるout−of−order実行のための統一化された機能オペレーションスケジューラ | |
JP2000029699A (ja) | プロセサア―キテクチャ | |
CN108780397B (zh) | 程序循环控制 | |
US20040044884A1 (en) | Evaluation of condition codes in a data processing apparatus | |
US7093111B2 (en) | Recovery of global history vector in the event of a non-branch flush | |
CN109416632B (zh) | 用于处理数据的装置和方法 | |
US6779104B2 (en) | Method and apparatus for pre-processing instructions for a processor | |
JP3800533B2 (ja) | プログラムカウンタ制御方法及びプロセッサ | |
US11663014B2 (en) | Speculatively executing instructions that follow a status updating instruction | |
US6754813B1 (en) | Apparatus and method of processing information for suppression of branch prediction | |
JP3839755B2 (ja) | 命令制御方法及びプロセッサ | |
US10255071B2 (en) | Method and apparatus for managing a speculative transaction in a processing unit | |
JP3723019B2 (ja) | サブルーチンリターン相当の命令の分岐予測を行う装置および方法 | |
US20090198959A1 (en) | Scalable link stack control method with full support for speculative operations | |
JPH05181676A (ja) | 並列処理型プロセッサシステム | |
US6718460B1 (en) | Mechanism for error handling in a computer system | |
US10996995B2 (en) | Saving and restoring a transaction memory state |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |