指令排序

文档序号:157292 发布日期:2021-10-26 浏览:32次 >En<

阅读说明:本技术 指令排序 (Instruction ordering ) 是由 V·高特 王伟 S·迪斯特尔霍斯特 P·M·陈 S·纳拉亚纳萨米 T·F·威尼施 于 2019-11-26 设计创作,主要内容包括:本发明公开了一种数据处理装置,该数据处理装置包括获得指令流的获得电路。该指令流包括屏障创建指令和屏障抑制指令。跟踪电路基于一个或多个依赖性将指令流中的每个指令发送到处理电路。该跟踪电路对屏障创建指令作出响应,以使一个或多个依赖性包括一个或多个屏障依赖性,在该一个或多个屏障依赖性中,前屏障指令在后屏障指令的发送之前被发送,该前屏障指令在流中的屏障创建指令之前发生,该后屏障指令在流中的屏障创建指令之后发生;该跟踪电路还对屏障抑制指令作出响应,以放松屏障依赖性,从而允许后抑制指令在前屏障指令之前被发送,该后抑制指令在该流中的该屏障抑制指令之后发生。(A data processing apparatus includes an obtaining circuit that obtains an instruction stream. The instruction stream includes a barrier creation instruction and a barrier suppression instruction. The trace circuitry sends each instruction in the instruction stream to the processing circuitry based on the one or more dependencies. The trace circuitry is responsive to a barrier creation instruction such that the one or more dependencies include one or more barrier dependencies in which a preceding barrier instruction is issued before the issuance of a succeeding barrier instruction, the preceding barrier instruction occurring before the barrier creation instruction in the stream, the succeeding barrier instruction occurring after the barrier creation instruction in the stream; the trace circuitry is also responsive to a barrier inhibit instruction to relax barrier dependencies, allowing a post-inhibit instruction to be issued before a pre-barrier instruction, the post-inhibit instruction occurring after the barrier inhibit instruction in the stream.)

指令排序

技术领域

本公开涉及数据处理。例如,本技术涉及指令排序和依赖性领域。

具体实施方式

在数据处理装置中,可能期望强制实施排序,使得一些指令只能在其他指令已执行之后执行。这可通过某种“屏障”来实现,该屏障在较早的指令已被执行之前禁止执行较晚的指令。然而,在实践中,这对指令排序存在很大的限制。

发明内容

从第一示例性配置来看,提供了一种数据处理装置,该数据处理装置包括:获得电路,该获得电路用以获得指令流,该指令流包括屏障创建指令和屏障抑制指令;和跟踪电路,该跟踪电路用以基于一个或多个依赖性来对向处理电路发送指令流中的每个指令进行排序,其中该跟踪电路对屏障创建指令作出响应,以使一个或多个依赖性包括一个或多个屏障依赖性,在该一个或多个屏障依赖性中,前屏障指令在后屏障指令的发送之前被发送,该前屏障指令在流中的屏障创建指令之前发生,后屏障指令在流中的屏障创建指令之后发生;并且跟踪电路对屏障抑制指令作出响应,以放松屏障依赖性,从而允许后抑制指令在前屏障指令之前被发送,该后抑制指令在流中的屏障抑制指令之后发生。

从第二示例性配置来看,提供了一种数据处理方法,该方法包括:获得指令流,该指令流包括屏障创建指令和屏障抑制指令;以及基于一个或多个依赖性来按顺序地将指令流中的每个指令发送到处理电路,其中响应于屏障创建指令,修改该一个或多个依赖性以包括一个或多个屏障依赖性,在该一个或多个屏障依赖性中,前屏障指令在后屏障指令的发送之前被发送,该前屏障指令在流中的屏障创建指令之前发生,后屏障指令在流中的屏障创建指令之后发生;以及响应于屏障抑制指令,以放松屏障依赖性,从而允许后抑制指令在前屏障指令之前被发送,该后抑制指令在流中的屏障抑制指令之后发生。

从第三示例性配置来看,提供了一种计算机程序,该计算机程序用于控制主机数据处理装置来提供用于执行指令的指令执行环境;该计算机程序包括:获得逻辑,该获得逻辑用以获得指令流,该指令流包括屏障创建指令和屏障抑制指令;以及发送逻辑,该发送逻辑用以基于一个或多个依赖性来按顺序地将指令流中的每个指令发送到处理电路,其中响应于屏障创建指令,修改该一个或多个依赖性以包括一个或多个屏障依赖性,在该一个或多个屏障依赖性中,前屏障指令在后屏障指令的发送之前被发送,该前屏障指令在流中的屏障创建指令之前发生,后屏障指令在流中的屏障创建指令之后发生;以及响应于屏障抑制指令,以放松屏障依赖性,从而允许后抑制指令在前屏障指令之前被发送,该后抑制指令在流中的屏障抑制指令之后发生。

从第四示例性配置来看,提供了一种数据处理装置,该数据处理装置包括:输入电路,该输入电路用以接收包括原子区的多个输入指令;输出电路,该输出电路用以提供与输入指令相对应的输出指令;和转换电路,该转换电路用以将输入指令转换成输出指令,其中原子区限定输入指令的子集,在该子集中,在执行期间,如果该子集中的指令中的一个指令未能执行,则输入指令的子集被退绕(rewind);并且该转换电路针对原子区中的原子指令生成:记录指令、屏障创建指令、对应指令、以及屏障抑制指令,其中该记录指令用以记录由原子指令引起的状态变化,该对应指令对应于原子指令。

从第五示例性配置来看,提供了一种数据处理方法,该数据处理方法包括:接收包括原子区的多个输入指令;提供与输入指令相对应的输出指令;以及将输入指令转换成输出指令,其中原子区限定输入指令的子集,在该子集中,在执行期间,如果该子集中的指令中的一个指令未能执行,则输入指令的子集被退绕;并且针对原子区中的原子指令,该转换步骤生成:记录指令、屏障创建指令、对应指令、以及屏障抑制指令,其中该记录指令对应于原子指令,该对应指令对应于原子指令。

附图说明

将参考如附图所示的本发明的实施方案,仅以举例的方式进一步描述本发明,其中:

图1示意性地示出了根据一些实施方案的数据处理装置;

图2示意性地示出了根据一些实施方案的另外的数据处理装置;

图3示出了根据一些实施方案的表示依赖性的示例,该图3包括图3a和图3b;

图4示出了屏障创建指令和屏障抑制指令的使用如何允许指令执行的更为灵活的排序,该图4包括图4a、图4b和图4c;

图5示意性地示出了用于使用屏障创建和抑制指令来将具有原子区段的输入代码转换成输出代码的转换数据处理装置;

图6示意性地示出了用于执行图5所示的输出代码的数据处理装置。

图7示出了根据一些实施方案示出一起处置屏障指令连同其他指令的过程的流程图;

图8示出了用于处置在涉及推测的地方发出的指令的过程的流程图;

图9示出了根据一些实施方案的除了屏障之外还使用边界来执行四条指令,该图9包括图9a、图9b和图9c;

图10示出了如何根据指令间依赖性来调度图9的四个指令;

图11示意性地示出了用于执行屏障指令和边界指令的装置;

图12示出了具有原子区段的输入代码可如何转换成具有屏障指令和边界指令的输出代码;

图13示出了处置屏障创建指令、屏障抑制指令、边界创建指令、以及诸如存储器访问指令的其他指令的过程的流程图;

图14示出了根据一些实施方案的边界指令的效果受到限制的变体;并且

图15示出了根据一些实施方案的数据处理方法。

示例性实施方案的

具体实施方式

在数据处理装置中,可能期望强制实施排序,使得一些指令只能在其他指令已执行之后执行。这可通过某种“屏障”来实现,该屏障在较早的指令已被执行之前禁止执行较晚的指令。然而,在实践中,这对指令排序存在很大的限制。

发明内容

从第一示例性配置来看,提供了一种数据处理装置,该数据处理装置包括:获得电路,该获得电路用以获得指令流,该指令流包括屏障创建指令和屏障抑制指令;和跟踪电路,该跟踪电路用以基于一个或多个依赖性来对向处理电路发送指令流中的每个指令进行排序,其中该跟踪电路对屏障创建指令作出响应,以使一个或多个依赖性包括一个或多个屏障依赖性,在该一个或多个屏障依赖性中,前屏障指令在后屏障指令的发送之前被发送,该前屏障指令在流中的屏障创建指令之前发生,后屏障指令在流中的屏障创建指令之后发生;并且跟踪电路对屏障抑制指令作出响应,以放松屏障依赖性,从而允许后抑制指令在前屏障指令之前被发送,该后抑制指令在流中的屏障抑制指令之后发生。

从第二示例性配置来看,提供了一种数据处理方法,该方法包括:获得指令流,该指令流包括屏障创建指令和屏障抑制指令;以及基于一个或多个依赖性来按顺序地将指令流中的每个指令发送到处理电路,其中响应于屏障创建指令,修改该一个或多个依赖性以包括一个或多个屏障依赖性,在该一个或多个屏障依赖性中,前屏障指令在后屏障指令的发送之前被发送,该前屏障指令在流中的屏障创建指令之前发生,后屏障指令在流中的屏障创建指令之后发生;以及响应于屏障抑制指令,以放松屏障依赖性,从而允许后抑制指令在前屏障指令之前被发送,该后抑制指令在流中的屏障抑制指令之后发生。

从第三示例性配置来看,提供了一种计算机程序,该计算机程序用于控制主机数据处理装置来提供用于执行指令的指令执行环境;该计算机程序包括:获得逻辑,该获得逻辑用以获得指令流,该指令流包括屏障创建指令和屏障抑制指令;以及发送逻辑,该发送逻辑用以基于一个或多个依赖性来按顺序地将指令流中的每个指令发送到处理电路,其中响应于屏障创建指令,修改该一个或多个依赖性以包括一个或多个屏障依赖性,在该一个或多个屏障依赖性中,前屏障指令在后屏障指令的发送之前被发送,该前屏障指令在流中的屏障创建指令之前发生,后屏障指令在流中的屏障创建指令之后发生;以及响应于屏障抑制指令,以放松屏障依赖性,从而允许后抑制指令在前屏障指令之前被发送,该后抑制指令在流中的屏障抑制指令之后发生。

从第四示例性配置来看,提供了一种数据处理装置,该数据处理装置包括:输入电路,该输入电路用以接收包括原子区的多个输入指令;输出电路,该输出电路用以提供与输入指令相对应的输出指令;和转换电路,该转换电路用以将输入指令转换成输出指令,其中原子区限定输入指令的子集,在该子集中,在执行期间,如果该子集中的指令中的一个指令未能执行,则输入指令的子集被退绕(rewind);并且该转换电路针对原子区中的原子指令生成:记录指令、屏障创建指令、对应指令、以及屏障抑制指令,其中该记录指令用以记录由原子指令引起的状态变化,该对应指令对应于原子指令。

从第五示例性配置来看,提供了一种数据处理方法,该数据处理方法包括:接收包括原子区的多个输入指令;提供与输入指令相对应的输出指令;以及将输入指令转换成输出指令,其中原子区限定输入指令的子集,在该子集中,在执行期间,如果该子集中的指令中的一个指令未能执行,则输入指令的子集被退绕;并且针对原子区中的原子指令,该转换步骤生成:记录指令、屏障创建指令、对应指令、以及屏障抑制指令,其中该记录指令对应于原子指令,该对应指令对应于原子指令。

附图说明

将参考如附图所示的本发明的实施方案,仅以举例的方式进一步描述本发明,其中:

图1示意性地示出了根据一些实施方案的数据处理装置;

图2示意性地示出了根据一些实施方案的另外的数据处理装置;

图3示出了根据一些实施方案的表示依赖性的示例,该图3包括图3a和图3b;

图4示出了屏障创建指令和屏障抑制指令的使用如何允许指令执行的更为灵活的排序,该图4包括图4a、图4b和图4c;

图5示意性地示出了用于使用屏障创建和抑制指令来将具有原子区段的输入代码转换成输出代码的转换数据处理装置;

图6示意性地示出了用于执行图5所示的输出代码的数据处理装置。

图7示出了根据一些实施方案示出一起处置屏障指令连同其他指令的过程的流程图;

图8示出了用于处置在涉及推测的地方发出的指令的过程的流程图;

图9示出了根据一些实施方案的除了屏障之外还使用边界来执行四条指令,该图9包括图9a、图9b和图9c;

图10示出了如何根据指令间依赖性来调度图9的四个指令;

图11示意性地示出了用于执行屏障指令和边界指令的装置;

图12示出了具有原子区段的输入代码可如何转换成具有屏障指令和边界指令的输出代码;

图13示出了处置屏障创建指令、屏障抑制指令、边界创建指令、以及诸如存储器访问指令的其他指令的过程的流程图;

图14示出了根据一些实施方案的边界指令的效果受到限制的变体;并且

图15示出了根据一些实施方案的数据处理方法。

示例性实施方案的具体实施方式

在参考附图讨论实施方案之前,提供了对实施方案的以下描述。

根据一些实施方案,提供了一种数据处理装置,该数据处理装置包括:获得电路,该获得电路用以获得指令流,该指令流包括屏障创建指令和屏障抑制指令;和跟踪电路,该跟踪电路用以基于一个或多个依赖性来对向处理电路发送指令流中的每个指令进行排序,其中该跟踪电路对屏障创建指令作出响应,以使一个或多个依赖性包括一个或多个屏障依赖性,在该一个或多个屏障依赖性中,前屏障指令在后屏障指令的发送之前被发送,该前屏障指令在流中的屏障创建指令之前发生,后屏障指令在流中的屏障创建指令之后发生;并且跟踪电路对屏障抑制指令作出响应,以放松屏障依赖性,从而允许后抑制指令在前屏障指令之前被发送,该后抑制指令在流中的屏障抑制指令之后发生。

在上述实施方案中,指令流中的屏障创建指令用于在指令中创建屏障。在屏障之前发生的指令必须在该屏障之后发生的指令中的任意一个可被发送以用于执行(或完全执行)之前被发送以用于执行(或在一些实施方案中,完全执行)。这可用于强制对指令执行特定排序。除此之外,指令流中的屏障抑制指令可用于限制屏障的效果。具体地,在屏障抑制指令之后发生的指令流中的任何指令不受屏障的限制。也就是说,即使在屏障创建指令之前发生的指令已被发送以用于执行(或完全执行)之前,也允许在屏障抑制指令之后发生的指令被发送以用于执行(或完全执行)。因此,可使指令排序的灵活性更为灵活。在屏障抑制指令之后发生的指令可在屏障之后发生的指令之前、之后或甚至与之并行地执行。这允许调度过程更加灵活,并且还增加了并行处理可发生的程度。

在一些实施方案中,前屏障指令、后屏障指令和后抑制指令包括存储器访问指令。存储器访问指令可包括加载指令并将指令存储到存储数据的存储器系统。

在一些实施方案中,对持久性存储器做出存储器访问指令。持久性存储器将DRAM的字节可寻址性与诸如硬盘和SSD的存储设备的耐久性相结合。具体地,可使用字节可寻址的加载/存储接口来访问持久性存储器,从而避免了访问存储设备中的存储装置所需的软件层(其通常是块可寻址的)。然而,与DRAM不同,即使在不存在电力的情况下,数据也可持续存在。

在一些实施方案中,一个或多个依赖性包括指令之间的一个或多个数据依赖性。指令可在指令之间具有依赖性。具体地,如果一个指令修改数据并且另一个指令随后读取该数据,则第二指令依赖于第一指令。也就是说,在已实行第一指令之前,不能执行第二指令。在实践中,这禁止在第一指令之前执行第二指令。

在一些实施方案中,跟踪电路包括队列电路,该队列电路包括一个或多个条目,条目中的每个条目对应于指令中的一个指令;并且跟踪电路包括存储电路,该存储电路用以存储依赖矩阵以表示一个或多个依赖性。依赖矩阵是可表示指令或数据之间的关系的一种方式。例如,矩阵中的每一行可表示指令队列中的指令中的一个指令,其中矩阵中的每一列也表示那些指令中的一个指令。行i列j中的“1”指示队列中的指令编号i依赖于队列中的指令编号j。同时,“0”指示不存在此类依赖性。每当执行指令时,可更新矩阵。这样,可以识别没有剩余依赖性并因此可立即执行的指令。在此类实施方案中,屏障创建指令可成为队列的一部分。屏障创建指令可根据其保护的在前指令来做出,并且经受屏障的以下指令可根据屏障指令来做出。

在一些实施方案中,跟踪电路被适配为响应于接收新指令,在队列电路中搜索较早的屏障创建指令和较早的屏障抑制指令;当找到较早屏障创建指令并且未找到较早的屏障抑制指令时,添加屏障依赖性以在发送前屏障指令之前抑制发送新指令;并且当找到较早的屏障创建指令并且找到较早的屏障抑制指令时,跟踪电路抑制添加屏障依赖性。保存屏障和抑制指令的纪录。因此,当遇到新指令时,可确定是应用屏障指令(如果找到屏障指令,并且没有找到抑制指令)还是不应用屏障指令(如果找到屏障指令和抑制指令两者)。显然,如果未找到指令,则不存在待应用的屏障。同时,在未找到屏障指令时找到的抑制指令通常也将不具有效果。

在一些实施方案中,跟踪电路是负载存储队列。负载存储队列可为用于访问存储器分级结构的存储器获取单元的一部分。在其他实施方案中,跟踪电路可为处置不同类型的指令的发出电路(issue circuitry)。

在一些实施方案中,数据处理装置包括事务电路,该事务电路用以存储指令中的至少一些指令的事务;和回滚电路,该回滚电路用以基于事务来恢复与在执行指令之前相对应的处理电路的先前状态。在此类实施方案中,可组合指令组以形成事务。在事务中,所有指令成功完成或没有指令成功完成。此类过程可通过尝试执行各指令来实行,其中单个指令失败使得数据处理装置“回滚”到事务开始之前。这可由维护记录(例如,撤销记录)的事务电路实现,该记录跟踪数据处理装置的状态如何由形成事务的指令改变。如果认为事务已失败,则回滚电路使用记录以便恢复数据处理装置的状态。如果认为事务成功,则可删除记录。

在一些实施方案中,跟踪电路被适配为将屏障创建指令和屏障抑制指令之间的指令中的至少一些指令无顺序地发送到处理电路。此处,“顺序”是指指令在指令流中列出的顺序。因此,即使指令流可以顺序A、B、C、D列出指令,但数据处理装置可以顺序A、C、D、B来执行指令。可执行指令的顺序依赖于这些指令之间的依赖性。屏障创建和抑制指令的使用使得可以强制实施特定依赖性而不会使这些依赖性扩展的太广。因此,与仅存在屏障创建指令的情况相比,可以在指令的重新排序可发生的程度上具有更大的灵活性。

在一些实施方案中,处理电路包括多个处理电路;并且跟踪电路被适配为将屏障创建指令和屏障抑制指令之间的指令中的至少一些指令发送到处理电路中的不同处理电路。因此,屏障抑制指令所创建的依赖性的限制可使得指令组能够并行执行。相比之下,当仅存在屏障创建指令时,可实现依赖性,但并行化可受到更大限制。例如,如果屏障抑制指令使得后抑制指令可从前屏障指令“解链”,则后抑制指令可例如与前屏障指令并行执行。

在一些实施方案中,一个或多个屏障依赖性是预定类型的指令的依赖性。这样,由屏障创建指令创建的屏障可仅适用于预定类型的指令,而不管其他指令相对于屏障创建指令或屏障抑制指令的位置如何,都可允许执行(或发送以供执行)。

在一些实施方案中,该预定类型包括对持久性存储器做出的存储器访问指令。因此,其他类型的指令(例如,存储器访问指令)可自由地忽略屏障。在一些实施方案中,其他类型的指令仍可能受到诸如数据依赖性的其他依赖性的限制。

在一些实施方案中,数据处理装置被适配为对指令流中的指令中的至少一些指令实行推测性执行;并且跟踪电路被适配为向处理电路发送待推测性地执行的指令,而不管待推测性地执行的指令的一个或多个屏障依赖性如何。推测性执行是在知道是否应执行一些指令之前执行这些指令的技术。例如,分支预测是一种机制,在该机制中,在分支指令处,对执行分支时将进行的方向进行预测。此时,分支的预测路径处的指令将继续执行,直到该分支被解决。如果预测正确,则不需要进行数据处理装置的停转(stalling)以便解决分支。同时,如果预测错误,则可经由“回滚”取消推测性指令的执行,在这种情况下,数据处理装置处于与该数据处理装置在继续之前必须等待分支被执行的情况相同的位置。在此类实施方案中,当推测性地执行指令时,可允许指令忽略屏障。

在一些实施方案中,指令流还包括边界创建指令;并且跟踪电路对边界创建指令作出响应,以使一个或多个依赖性包括一个或多个边界依赖性,在该一个或多个边界依赖性中,前边界指令在后边界指令的发送之前被发送,该前边界指令在流中的边界创建指令之前发生,后边界指令在流中的边界创建指令之后发生;与可被屏障抑制指令抑制的屏障相比,边界不具有此类对应的抑制指令。因此,在边界之前的指令中的至少一些指令(在一些实施方案中,所有指令)在边界之后的任何指令之前被发出或执行。

在一些实施方案中,前边界指令和后边界指令包括存储器访问指令。存储器访问指令可包括加载指令并将指令存储到存储数据的存储器系统。

在一些实施方案中,对持久性存储器做出存储器访问指令。持久性存储器将DRAM的字节可寻址性与诸如硬盘和SSD的存储设备的耐久性相结合。具体地,可使用字节可寻址的加载/存储接口来访问持久性存储器,从而避免了访问存储设备中的存储装置所需的软件层(其通常是块可寻址的)。然而,与DRAM不同,即使在不存在电力的情况下,数据也可持续存在。

在一些实施方案中,一个或多个边界依赖性需要待在后边界指令之前发送的前边界指令的子集。因此,边界指令不一定要求在边界之前的所有指令都在边界之后的任何指令可被执行(或发出)之前被执行(或发出)。

在一些实施方案中,指令流包括多个屏障抑制指令,多个屏障抑制指令中的每个屏障抑制指令限定包括指令的子集的链线(strand);链线中的每个链线具有相关联的标识符;边界创建指令具有相关联的标识符;并且与边界依赖性相关的前边界指令处于其相关联的标识符与边界创建指令的相关联的标识符相匹配的链线中。因此,屏障抑制指令可限定链线-可具有所施加的特定顺序但可相对于一些其他链线独立执行的一系列指令。每条链线可具有相关联的标识符(例如,在屏障抑制指令中识别)。该标识符可例如是颜色。另外,边界创建指令还可具有标识符。在发出/执行边界后的指令之前,发出/执行标识符匹配的那些链线。在其他实施方案中,标识符可为排他性的,使得缺少特定标识符的线程需要在边界后的指令之前发出/执行。

根据一些实施方案,提供了一种数据处理装置,该数据处理装置包括:输入电路,该输入电路用以接收包括原子区的多个输入指令;输出电路,该输出电路用以提供与输入指令相对应的输出指令;和转换电路,该转换电路用以将输入指令转换成输出指令,其中原子区限定输入指令的子集,在该子集中,在执行期间,如果该子集中的指令中的一个指令未能执行,则输入指令的子集被退绕;并且该转换电路针对原子区中的原子指令生成:记录指令、屏障创建指令、对应指令、以及屏障抑制指令,其中该记录指令用以记录由原子指令引起的状态变化,该对应指令对应于原子指令。

在程序内,原子区段可被视为所有指令成功完成或它们都未成功完成的代码的区段。在实施过程中,此类指令通常以使得它们可被“回滚”的方式来执行。因此,如果指令中的一个指令失败,则所有指令反向。在上述实施方案中,代码的原子区段通过使用上述屏障创建指令和屏障抑制指令来实现。具体地,对于原子区段中的每个指令,输出记录指令。该记录指令针对该指令提供必要的信息以进行“退绕”。然后是屏障创建指令,并且之后是与原子指令相对应的指令。因此,一旦记录指令已执行,就允许执行指令。换句话讲,一旦存储了反转指令的必要数据,就执行指令。然后是屏障抑制指令,使得后续指令不受类似限制。当针对原子区中的多个指令重复该序列时,一旦存储了用于撤销指令的必要数据,就执行每个指令。然而,原子块内的指令的排序不由屏障实施。

在一些实施方案中,针对原子指令,转换电路还生成:边界创建指令和一个或多个清理指令。即,对于每个原子区段指令,创建边界创建指令和一个或多个清理指令。这样,作为处置在前指令的结果,例如在原子操作已被处置之后,发出或执行清理指令。可例如擦除数据或重置信息的清理指令在执行之前需要先前的指令被处置。

在一些实施方案中,一个或多个清理指令包括另外的记录指令用以记录原子指令的完成。存在清理指令的多个示例。然而,在这些实施方案中,清理指令包括用以指示已完成原子操作的消息。

在一些实施方案中,原子指令将数据处理装置的一部分的先前状态改变为新状态;并且记录指令是存储数据处理装置的该部分的先前状态的撤销记录指令。撤销记录存储在状态改变之前的状态。例如,在撤销记录中保存寄存器的值被改变之前的该寄存器的值。因此,记录指令记录(或保存)状态的旧版本,因此允许在必要时恢复该旧状态。在其他实施方案中,可使用诸如二次记录的其他技术。

在一些实施方案中,原子指令是存储器访问指令。

在一些实施方案中,对持久性存储器做出存储器访问指令。如前所述,可认为持久性存储器是字节可寻址存储器(类似于DRAM),其中即使在不存在电力的情况下也可保持内容。

现在将参考附图描述具体实施方案。

图1示出了根据一些实施方案的数据处理装置100。获取器110负责获得包含多个指令的指令流。流中的指令中的一个或多个指令可为从存储器加载或进行存储的存储器访问指令。由获取器110获取的指令被传递到解码器120,以便生成与那些指令相对应的一个或多个控制信号。从那里,解码后的指令被传递到负责调度的发出器130。在该示例中,发出器130被示出为向加载/存储单元140发出(解码后的)指令,该加载/存储单元负责处置待向外发送到存储器分级结构的存储器访问指令。然而,发出器130可向诸如算术逻辑单元(ALU)和浮点单元(FPU)等其他执行单元发出(解码后的)指令中的一些指令。

在该示例中,加载/存储单元140包含队列160,该队列跟踪已由发出器130发送的解码后的指令。在该示例中,队列160被示出为包含加载指令(LD)、之后是存储指令(ST)、之后是屏障创建指令(PB)、之后是存储指令(ST)、之后是屏障抑制指令(SB)、之后是最终存储指令(ST)。在队列160的条目之间示出箭头以便指示依赖性。在该示例中,将第四指令示出为依赖于屏障创建指令。类似地,将最终指令示出为依赖于屏障创建指令。屏障创建指令(PB)使队列160中的未来指令依赖于该屏障创建指令。这适用于在遇到屏障抑制指令(SB)之前的较晚的指令。在屏障抑制指令之后(以及在任何另外的屏障创建指令之前)遇到的指令不具有此类依赖性。如果那些指令已具有对屏障创建指令的依赖性,则该依赖性被移除(如图1所示)。最终,一旦屏障创建指令不再对其具有任何依赖性,并且如果屏障抑制指令已就位,则从队列中移除屏障创建指令(再次如图1所示)。

指令之间的依赖性可能较为复杂,并且提供存储电路150以存储依赖性。在该示例中,已针对指令示出了依赖性。然而,依赖性可存在于指令所使用的数据项以及指令本身上。

使用屏障创建指令和屏障抑制指令两者的技术使得可强制执行指令的特定排序,而无需在不需要的地方扩展强制排序。此外,强制排序使得可灵活地执行其他指令。这相对于图4更详细地示出。

图2示出了数据处理装置100的变型200。在该装置中,提供关于向持久性存储器发出的存储器访问指令的第二加载/存储单元210。持久性存储器是字节可寻址存储器(类似于DRAM),但其操作方式使得当从存储器移除电力时内容不会丢失(类似于硬盘或SSD形式的存储装置)。加载/存储单元210设置有自己的存储电路220,该存储电路用于存储对自己的队列230内存储的指令的依赖性。作为使用双加载/存储单元140、210的结果,加载/存储单元140、210中的一个加载/存储单元中的屏障指令或屏障抑制指令对加载/存储单元140、210中的另一个加载/存储单元中的存储器访问指令没有影响。例如,用于存储器的加载/存储单元140中的屏障创建指令不需要被发送到持久性存储器的由第二加载/存储单元210处置的存储器访问指令对该屏障创建指令具有依赖性。

应当理解,也可使用单个加载/存储单元140来实现类似的技术,其中使用单独的字段来指示每个存储器访问指令的目的地(例如,到持久性存储器或其他存储器)。这样,同样,屏障创建指令和屏障抑制指令可限于被发送到特定类型的存储器的存储器访问指令。

图3示出了可表示依赖性的方式。图3a示出了各自具有对应依赖性的八个指令的序列。具体地,借助于数据依赖性来生成依赖性。也就是说,例如,第三指令在值与寄存器R1和R2之间执行添加,并且将值存储在R3中。然而,在来自存储器位置x的值在指令一中被加载到寄存器R1中并且存储器位置y中的值在指令二中被存储在寄存器R2中之前,无法完成该指令。因此,指令三依赖于正被实行的指令一和指令二的执行。

图3b示出了如何能够以依赖矩阵的形式表示这些依赖关系。依赖矩阵是大小等于正被执行的指令的数量的正方形矩阵。任何的特定行表示指令的依赖性,并且列表示依赖性可能落在其上的指令。例如,列i、行j中的值表示指令i对指令j存在依赖性。“1”表示存在此类依赖性,而“0”表示缺乏依赖性。例如,如前所述,指令三依赖于指令一和指令二。因此,“1”存在于第三行的第一列和第二列中。类似地,指令编号七依赖于指令编号六。因此,在第七行第六列中找到“1”。

需注意的是,为了跟踪由屏障创建和屏障抑制指令生成的依赖性,屏障抑制指令(SB)打破向后跟踪的那些依赖性。因此,只有当跟踪与屏障相关的依赖性时,才需要针对矩阵的左下半部完成依赖矩阵。

在已经描述了架构的情况下,图4示出了如何使用屏障创建指令和屏障抑制指令以便增加调度的灵活性,同时保持指令中的一些指令之间的排序。

图4a示出了按顺序排序的四个指令A、B、C、D。

图4b示出了相同的四个指令A、B、C、D,其中插入了屏障创建指令(PB)和屏障抑制指令(SB)。在指令A和指令B之间插入屏障需要在可发出(或执行)指令B之前,指令B等待,直到发出(或执行)指令A。然而,下面的屏障抑制指令意味着屏障不扩展到屏障抑制指令之后的指令。因此,在继续指令C和指令D之前,不需要等待完成指令A或指令B。类似地,在指令C和指令D之间插入屏障意味着指令D必须等待指令C。同样,屏障抑制指令的存在意味着该相同的要求不扩展到后面的指令。因此,这提供了时间顺序:指令A必须在指令B之前发生,并且指令C必须在指令D之前发生。

这导致图4c所示的调度。具体地,尽管在A与B之间以及在C与D之间存在强制排序,但在C与A和B中的一者或者D与A和B中的一者不存在此类强制排序。因此,指令C和D可在相对于指令A和B的任何时间发生。

与不提供屏障抑制指令的情况相比,这样提供了更大的灵活性。例如,如果不存在屏障抑制指令,则在指令A已完成之前,指令B、C和D中的每一者必须等待。因此,指令的调度可能的程度由于屏障创建指令和屏障抑制指令而得以扩展。需注意的是,指令D和C之间的屏障创建指令意味着在指令C已完成之前,指令D必须等待。然而,由于屏障抑制紧接在指令C之前发生,因此屏障不会比指令C更早地进行扩展。即,在指令A、B和C已完成之前,指令D不需要等待。

图5示出了该技术可如何应用于将具有原子区段的输入代码510转换成输出代码550。例如,输入代码可为源代码,并且输出代码550可为编译的。输入代码510由输入电路520接收,该输入电路将该代码传递到转换电路530。转换电路530将输入代码510转换为输出代码550,然后将输出代码550传递到输出该输出代码550的输出电路540。输入代码510包括原子区段。代码的原子区段是代码中的其中所包含的指令中的每个指令要么被整体执行要么根本不被执行的区段。即,不可能仅执行原子区段的一部分,退出原子区段。这可通过跟踪原子区段内的每个指令来实现,使得如果指令中的一个指令失败,则这些指令可被反向。

在当前示例中,原子区段将值五存储在位置A中并且将值七存储在位置(例如,存储器地址)B中,这可存储在高速缓存中。转换电路530将此转换如下:首先,将位置A的当前值记录在位置G中。然后,通过指令dc.cvap刷新位置G(例如,到持久性存储器)。然后,经由指令PB将屏障放置在适当的位置。这意味着所遇到的另外的指令只能在记录和刷新指令已被执行之后(直到遇到屏障抑制指令之后)才被执行。下一指令是将值五存储在位置A中从而覆盖位置A中的前一值的存储指令。需注意的是,这是原子指令中的第一个指令。凭借屏障,该指令仅在A的旧值已存储在位置G中然后被刷新到持久性存储器之后发生。换句话讲,仅在位置A的旧值被存储从而使该旧值能够在必要时恢复时,才可将值五存储在位置A中。然后,设置屏障抑制指令。这意味着不需要在继续进行另外的指令之前执行初始记录指令和刷新指令。然后,提供另外的记录指令以便将位置B的当前值存储在位置H中。另外的刷新指令刷新位置H的值(例如,再次到持久性存储器),并且提供另外的屏障创建指令。这之后是将值七存储在位置B中的存储指令,并且这之后是屏障抑制指令。因此,仅当位置B的先前值已被存储到位置H并被刷新到持久性存储器时,才能将值七存储在位置B中。换句话讲,仅在位置B的先前值被存储之后从而使该先前值能够在必要时被恢复时,才进行将值七存储在位置B中的存储。存在屏障创建指令意味着,在这两种情况下,存储足够的信息,使得如果必要的话可取消两个原子指令。然而,屏障抑制指令意味着实施排序的程度是有限的。换句话讲,虽然使值七存储在位置B中的指令依赖于位置B中的旧值被存储和刷新,这并不强制使该指令必须在将值五存储在位置A中之前发生。因此,提供原子区段的功能,同时能够改变那些指令的顺序。因此,将值七存储到位置B的第二存储指令可在将值五存储在位置A中的第一指令之前发生。实际上,两个指令也可在例如多个处理电路上同时发生。

图6示出了数据处理装置600,在该数据处理装置上,可执行图5所示的输出代码550。装置600包括中央处理单元(CPU)610。CPU 610利用存储器分级结构,该存储器分级结构包括1级高速缓存630、2级高速缓存640、主存储器(例如,由DRAM支持)和持久性存储器660。由输出代码550中的dc.cvap指令执行的数据刷新使得数据被写入到例如持久性存储器660。在确定代码的原子区段必须中止和回滚时,作为CPU 610的一部分提供回滚电路620。回滚电路620获得被刷新到持久性存储器660的数据,并且将该数据应用回1级高速缓存630。这样,存储在一级高速缓存630中的数据的旧值得到恢复。

图7示出了流程图700,该流程图示出了处置屏障创建指令、屏障抑制指令、诸如存储器访问指令的其他指令以及它们之间的各个依赖性的过程。

在步骤710处,接收到新指令。在步骤720处,确定所接收的指令的类型。如果在步骤720处认为指令是屏障创建指令,则在步骤730处,将屏障存储在队列160中。该过程随后返回到710,在710处接收下一指令。如果在720处确定指令为屏障抑制指令,则在步骤740处,将抑制者存储在队列160中。在步骤750处,关于已被添加的对较早屏障具有依赖性的较晚指令(即,在指令流中的屏障抑制者指令之后出现)的任何依赖性被删除。然后,该过程返回到步骤710,在该步骤中接收下一指令。如果在步骤720处,认为指令是另一种类型(例如,存储器访问指令),则在步骤760处,将指令存储在队列160中。在步骤770处,向后扫描队列160。在步骤780处,考虑所遇到的指令的类型。如果指令在队列160的顶部,或者如果遇到的指令是抑制者,则该过程返回到710,在710处接收新指令。如果指令的类型是屏障指令,则在步骤790处,添加新添加指令对屏障的依赖关系。然后,该过程又返回到步骤710。否则,如果指令属于另一类型,则在步骤770处,重复扫描过程,并且在步骤780处,考虑下一最先前的指令。

因此,屏障和屏障抑制者两者均存储在队列中。当待添加其他指令时,确定所遇到的指令的最近类型是屏障(在这种情况下,添加对屏障的依赖性)还是抑制者(在这种情况下,不添加依赖性)。类似地,如果到达队列的顶部而未找到屏障或抑制者,则不添加依赖性。存在可从队列中移除屏障和抑制者两者的多种方式。具体地,在遇到抑制者之前,无法移除屏障。这是因为任何未来的指令都可能依赖于所添加的屏障。一旦已添加抑制者,就可在没有另外的指令依赖于屏障的情况下移除该屏障。此时,也可移除抑制屏障的抑制者。

需注意的是,该过程假设以指令存储在队列(例如,图1的队列160)中的顺序发出每个指令。如果不是这样,则有必要将对屏障指令的依赖性添加到所有先前的指令,直到遇到队列的顶部,或者遇到先前的屏障抑制指令。这样,屏障使得先前的指令(直到遇到屏障抑制者或队列的顶部)在可发出(或执行)另外的指令之前发出(或执行)。

图8以流程图的形式示出了用于处置可能涉及推测的发出指令的过程。在步骤810处,确定接下来发出哪个指令。步骤820确定是否存在未决屏障,具体地,是否存在阻止执行该指令的未被抑制的屏障。如果不存在,则在步骤830处,发出指令,并且过程返回到步骤810。否则,在步骤840处,确定指令是否为存储器访问指令。如果不是,则在步骤860处,该过程进行等待直到解决对屏障的依赖关系,即直到依赖关系被移除或直到屏障被移除。然后,该过程进行至步骤830,在该步骤发出指令。如果指令是存储器访问指令,则在步骤850处,确定是否正在使用推测。推测是一种可在已知是否应当执行指令之前执行该指令的技术。在不清楚(直到评估分支)分支将以何种方式前进(或到达何处)的分支指令的情况下,可能发生这种情况。作出预测,而不是等待分支解决,并且在该位置处开始执行指令。如果发现预测不正确,则可退绕不正确执行的指令,并且不发生或几乎不发生性能影响。因此,在这种情况下,为了推测的目的,可允许忽略对屏障的依赖性。因此,如果发生推测,则在步骤870处,跟踪指令,使得该指令可在必要时被退绕和/或重放。然后,该过程进行至步骤830,在该步骤中发出指令以供执行。这样,仅需在架构级保持指令的排序。

图9a示出了按顺序排序的四个指令A、B、C、D。

图9b示出了相同的四个指令A、B、C、D,其中插入了屏障创建指令(PB)、屏障抑制指令(SB)和边界创建指令(QB)。如前所述,在指令A和指令B之间插入屏障需要在可发出(或执行)指令B之前,指令B等待,直到发出(或执行)指令A。然而,指令C不受相同的限制,并且可相对于指令A和指令B中的任一者在任何时间执行。在该示例中,存在边界意味着指令D在可被发出或执行之前必须进行等待,直到所有这些指令(A、B和C)已被发出(或执行)。换句话讲,与允许在如何相对于彼此调度“链线”(示出为框)上灵活的一般屏障创建指令相比,边界创建指令禁止在边界之后的链线在先前的链线已被发出(或执行)之前被发出(或执行)。

这导致图9c所示的调度。具体地,在A和B之间存在强制排序,而指令C可相对于这些指令自由执行。然而,指令A、B和C中的每一者被排序以便在指令D被发出(或执行)之前被发出(或执行)。因此,边界创建指令通过要求在程序进一步进行之前发出(或执行)多个“链线”中的先前指令而在调度方面提供另外的灵活性。

虽然上述示例仅示出了单个边界,但是当然可使用多个边界。在每种情况下,一个边界之前的指令在该边界之后的指令之前执行。

图10示出了如何调度图9a、图9b和图9c的四个指令A、B、C、D。图10的架构使用持久队列,该持久队列存储对持久性存储器(例如,持久性存储库和屏障)具有影响的指令队列。例如,该持久队列可位于加载/存储单元旁,或者可形成加载/存储单元的一部分。此外,还提供了多种链线缓冲器。每个链线缓冲器管理特定链线的指令。在该实施方案中,可同时执行的链线的数量受到可用链线缓冲器的数量的限制。在步骤1,将dc.cvap(A)附加到持久队列中的条目上,并且因为不存在先前的持久依赖性,所以将该dc.cvap(A)直接发出到链线缓冲器单元。因为当前缓冲器索引(例如,当前有源链线0的数量)为0,因此将dc.cvap(A)添加至链线缓冲器0。在步骤2中,发出dc.cvap(A)。在步骤3中,将持久屏障(PB)和dc.cvap(B)附加到链线缓冲器0;dc.cvap(B)停止并等待前一持久屏障(和dc.cvap(A))完成。在步骤4处,屏障抑制指令SB通过将当前缓冲器索引更新为1来创建新链线。因此,后续指令dc.cvap(C)被附加到链线缓冲器1。在步骤5处,由于dc.cvap(C)在链线缓冲器1中不依赖于持久屏障,因此该dc.cvap(C)与dc.cvap(A)同时发出。在步骤6处,链线缓冲器单元接收dc.cvap(A)的完成;该操作完成。在步骤7处,当dc.cvap(A)和持久屏障完成时,dc.cvap(B)的排序依赖性得以解决,并且dc.cvap(B)发出。在步骤8处,边界创建指令QB停止发出dc.cvap(D),直到先前的dc.cvaps完成。在步骤9处,当持久队列接收针对dc.cvap(A)、dc.cvap(B)和dc.cvap(C)的完成确认时,边界创建指令完成并且dc.cvap(D)被发出到链线缓冲器单元。

与屏障创建指令和屏障抑制指令一样,存在多种可针对边界创建指令创建依赖性的方式,以便强制实施上述排序约束。

图11示出了装置1100,该装置适用于执行包括屏障创建指令(PB)、屏障抑制指令(SB)和边界创建指令(QB)的指令。装置1100包括获取器1110、解码器1120、发出器1130、加载/存储单元1140和存储电路1150,它们类似于图1的装置100、获取器110、解码器120、发出器130、加载/存储单元140和存储电路150。队列1160包括屏障创建指令(PB)、屏障抑制指令(SB)和边界创建指令(QB),但应当理解的是,相同的装置1100可用于执行这三个指令的子集。在队列1160中,这三个指令的实例散布有诸如加载(LD)指令和存储(ST)指令的存储器访问指令。在该示例中,在边界创建指令(QB)之后发生的存储指令(ST)依赖于边界创建指令(QB)。边界创建指令(QB)本身可依赖于先前的指令中的每个指令,并因此在已经发送那些指令时从队列中移除。另选地,加载/存储单元1140管理过程可使得一旦队列1160中没有先前元素就移除边界创建指令(QB)(前提条件是较早的指令不能在队列中重新排序)。在任一种情况下,后果是在边界创建指令(QB)被移除后之前,不能执行该边界创建指令(QB)之后的指令,继而,在先前的指令被移除之前,不会发生边界创建指令(QB)的移除。这具有以下效果:在边界创建指令(QB)之前的指令已被发送(例如,发出或执行)之前,边界创建指令(QB)之后的指令被延迟。

图12示出了该技术可如何应用于将具有原子区段的输入代码1210转换成输出代码1250。该图类似于相对于图5所示的示例,并且使用相同的输入代码1210和输入电路1220。具体地,图12所示的示例示出了对边界创建指令的使用。由转换电路1230产生并由输出电路1240输出的输出代码1250的最终部分包含边界创建指令,然后是将文本“已完成”存储在位置I中的指令。存在边界创建指令意味着在先前的指令已被发出/执行之前,该存储指令不会发出/执行。因此,在原子操作已被发出/执行之前,不实施对文本“已完成”的存储。

图1 3示出了流程图1300,该流程图示出了处置屏障创建指令、屏障抑制指令、边界创建指令和诸如存储器访问指令的其他指令以及它们之间的各个依赖性的过程。

在步骤1310,接收新指令,并且将抑制者标记(在扫描队列1160时是否已遇到屏障抑制者的指示器)设置为假。在步骤1320处,确定所接收的指令的类型。如果在步骤1320处认为指令是屏障创建指令或边界创建指令,则在步骤1330处,将屏障或边界(视情况而定)存储在队列1160中。该过程随后返回到1310,在1310处接收下一指令。如果在1320处确定指令为屏障抑制指令,则在步骤1340处,将抑制者存储在队列1160中。在步骤1350处,关于已被添加的对较早屏障具有依赖性的较晚指令(即,在指令流中的屏障抑制者指令之后出现)的任何依赖性被删除。然后,该过程返回到步骤1310,在该步骤中接收下一指令。如果在步骤1320处,认为指令是另一种类型(例如,存储器访问指令),则在步骤1360处,将指令存储在队列1160中。在步骤1370处,向后扫描队列1160。在步骤1380处,考虑所遇到的指令的类型。如果指令在队列1160的顶部,则该过程返回到1310,在1310处接收新指令。如果指令的类型为屏障或边界指令,则在步骤1386处,确定抑制者标记为真。如果不是,则在步骤1390处添加对边界/屏障的依赖性,并且该过程返回到步骤1310以处理新指令。如果在步骤1386处将抑制者标记设置为真,则在步骤1388处确定指令的类型是否为屏障指令。如果不是(例如,指令是边界指令),则过程进行至步骤1390,如前所述。否则,该过程简单地返回到步骤1310。步骤1386、1388和1390的效果是,如果尚未找到抑制者或如果遇到边界(其不受屏障抑制指令的影响),则创建依赖性。如果在步骤1380处遇到另一类型的指令,则在步骤1382处,确定该指令是否为抑制者指令。如果是,则在步骤1384处,将抑制者标记设置为真。在任一种情况下,然后,该过程返回到步骤1370以继续向后对队列1160进行扫描。

因此,屏障、屏障抑制者和边界均存储在队列中。当待添加其他指令时,确定所遇到的指令的最近类型是屏障还是边界,在这种情况下,添加依赖性或抑制者。在抑制者的情况下,确定是否存在添加了依赖性的较早边界。在每种情况下,仅添加单个依赖性。在涉及边界后接屏障的情况下,依赖性仅指向较晚的屏障就足够了,因为在较早的指令(依赖于边界)被解决之前,不能移除屏障。

存在可从队列中移除屏障、抑制者和边界的多种方式。如前所述,在遇到抑制者之前,无法移除屏障。这是因为任何未来的指令都可能依赖于所添加的屏障。一旦已添加抑制者,就可在没有另外的指令依赖于屏障的情况下移除该屏障。此时,也可移除抑制屏障的抑制者。在在前指令被处置之前,无法移除边界。同样,该过程假设以指令被存储在队列1160中的顺序发出指令。如果情况并非如此,则将需要从屏障指令向所有在前指令添加依赖性。

在边界指令的情况下,已假设边界影响所有在前指令。然而,在实施过程中,可更精确地限定边界。

图14示出了链线中的每个链线具有呈颜色形式的标识符的示例。颜色可通过屏障抑制指令(SB)来指定,其有效地创建新链线。这样,指令流通过由指令A和指令B构成的第一链线(着色为蓝色)(指令B需要等待指令A)、由指令C和指令D构成的第二链线(着色为蓝色)(指令D需要等待指令C)、由指令E和指令F构成的第三链线(着色为红色)(指令F需要等待指令E)以及由指令G和指令F构成的第四链线(指令F需要等待指令G)来构成。第一链线、第二链线和第三链线可使用已经讨论的技术相对于彼此自由地执行。然而,在该示例中,边界创建指令(QB)与其自身的标识符(蓝色)相关联,并因此在任何后续指令发出/执行之前需要其他蓝色链线发出/执行。因此,第四链线在发出/执行之前必须等待第一链线和第二链线(均为蓝色)发出/执行。然而,对于着色为红色的第三链线不具有依赖性。因此,这两个链线可相对于彼此自由地执行。

注意的是,初始链线不是通过屏障抑制指令创建的。因此,可认为该链线对应于“所有颜色”,这也可在形成新链线时作为默认值提供。换句话讲,边界创建指令将等待颜色匹配的或没有具体指定颜色(诸如与恰好第一链线)的链线。

可通过使边界指令(QB)依赖于类似颜色的链线中的每个指令来实现对这种场景的依赖性处置。另一个具体实施可为具有每种颜色计数器用以对与必须发出/执行的每种颜色相关联的在前指令的数量进行计数。需注意的是,如果发生按顺序解码和填充队列,则QB指令能够看到其应依赖的先前指令,并且可等待那些链线缓冲器完成。

图15示出了可使用的模拟器具体实施。虽然先前所述的实施方案在用于操作支持所涉及的技术的特定处理硬件的装置和方法方面实现了本发明,但也可以提供根据本文所述的实施方案的指令执行环境,该指令执行环境是通过使用计算机程序来实现的。此类计算机程序通常被称为模拟器,在一定程度上是因为此类计算机程序提供硬件架构的基于软件的具体实施。模拟器计算机程序的种类包括仿真器、虚拟机、模型和二进制转换器,其包括动态二进制转换器。通常,模拟器具体实施可在支持模拟器程序1510的主机处理器1530上运行,该主机处理器任选地运行主机操作系统1520。在一些布置中,在硬件和所提供的指令执行环境和/或在同一主机处理器上提供的多个不同指令执行环境之间可存在多个模拟层。在历史上,需要强大的处理器来提供以合理速度执行的模拟器具体实施,但这种方法在某些情况下可能是合理的,诸如当出于兼容性或重复使用原因而希望运行另一个处理器本地的代码时。例如,模拟器具体实施可向指令执行环境提供主机处理器硬件不支持的附加功能,或者提供通常与不同硬件架构相关联的指令执行环境。模拟概述在以下文献中给出:“Some Efficient Architecture Simulation Techniques”,Robert Bedichek,Winter1990USENIX Conference,第53-63页。

就先前已参考特定硬件构造或特征描述了实施方案而言,在模拟的实施方案中,等效功能可由合适的软件构造或特征提供。例如,特定电路可在模拟的实施方案中被实现为计算机程序逻辑。类似地,存储器硬件诸如寄存器或高速缓存存储器可在模拟的实施方案中被实现为软件数据结构。在先前所述的实施方案中参考的硬件元件中的一个或多个硬件元件存在于主机硬件(例如,主机处理器1530)上的布置结构中,在合适的情况下,一些模拟的实施方案可利用主机硬件。

模拟器程序1510可存储在计算机可读存储介质(其可为非暂态介质)上,并且向目标代码1500(其可包括应用程序、操作系统和管理程序)提供程序接口(指令执行环境),该程序接口与模拟器程序1510正在建模的硬件架构的应用程序接口相同。因此,包括获取器110、发出器130和加载/存储单元140的功能(该功能提供了基于上述屏障创建和抑制指令创建和移除依赖性)(或例如图11所示的这些的其他变体)的目标代码的程序指令可使用模拟器程序1310从指令执行环境内执行,使得实际上不具有上述装置100或装置1100的硬件特征的主机计算机1330可仿真这些特征。

在上面的描述中,给出了加载/存储单元的示例,这些加载/存储单元存储诸如屏障创建指令的指令之间的依赖性并且响应于屏障抑制指令用以放松此类依赖性。然而,也可以在存储器分级结构中的其他地方进行此类功能,诸如在高速缓存内或在存储器控制器内的读取/写入队列内进行。在这种程度上,术语“指令”可被广义地解释为表示代表指令生成的操作。类似地,此类跟踪可被实现为处置所有指令的调度的发出器的一部分,而不是用于访问存储器分级结构的发出器的一部分。

在本申请中,字词“被配置为...”用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可具有提供所限定的操作的专用硬件,或者可对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。

虽然本文已结合附图详细描述了本发明的示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明的范围和实质的前提下,本领域的技术人员可在其中实现各种变化、增加和修改。例如,在不脱离本发明的范围的情况下,从属权利要求的特征可与独立权利要求的特征一起进行各种组合。

33页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于响应于配置请求将协调请求转发到处理电路的装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!