一种加速原子指令执行的方法和装置

文档序号:1755134 发布日期:2019-11-29 浏览:23次 >En<

阅读说明:本技术 一种加速原子指令执行的方法和装置 (Method and device for accelerating execution of atomic instruction ) 是由 郑重 王永文 隋兵才 黄立波 孙彩霞 倪晓强 郭维 王俊辉 雷国庆 郭辉 于 2019-08-28 设计创作,主要内容包括:本发明公开了一种加速原子指令执行的方法和装置,本发明方法为根据原子指令生成对应的辅助指令(Load指令或预取指令),向不同的流水线输出原子指令及辅助指令;辅助指令Load前瞻执行读取原子指令需要操作区域的数据,将结果写往结果总线和原子指令结果队列,使得其他依赖该指令结果的指令可提前执行使得原子指令结果提前送出、执行速度加快,原子指令在提交后执行,根据执行结果确认辅助指令Load的前瞻执行结果;辅助指令为预取指令则执行预取指令提前将数据获取到处理器核中并置为可写状态,原子指令直接操作预取指令已经置为可写状态的数据加速执行过程。本发明可提高处理器核性能,并且实现简单,可灵活应用到现有处理器设计中。(The invention discloses a method and a device for accelerating atomic instruction execution, wherein the method comprises the steps of generating a corresponding auxiliary instruction (Load instruction or prefetch instruction) according to an atomic instruction, and outputting the atomic instruction and the auxiliary instruction to different pipelines; the auxiliary instruction Load performs the look-ahead execution to read the data of the region, which needs to be operated, of the atomic instruction, and writes the result to a result bus and an atomic instruction result queue, so that other instructions depending on the instruction result can be performed in advance, the atomic instruction result is sent out in advance, the execution speed is accelerated, the atomic instruction is executed after being submitted, and the look-ahead execution result of the auxiliary instruction Load is confirmed according to the execution result; and if the auxiliary instruction is a prefetch instruction, executing the prefetch instruction to acquire data into the processor core in advance and set the data into a writable state, and directly operating the data acceleration execution process of which the prefetch instruction is set into the writable state by the atomic instruction. The invention can improve the performance of the processor core, is simple to realize and can be flexibly applied to the design of the existing processor.)

一种加速原子指令执行的方法和装置

技术领域

本发明涉及微处理器的微体系结构设计领域,具体涉及一种加速原子指令执行的方法和装置。

背景技术

为了提高程序性能,目前多数程序都采用并行的方式运行,并行线程之间通过共享资源进行通信。 为了支持共享资源的并发写,多数体系结构都提供了原子指令。原子指令基本操作为对存储空间的某个区域进行“读-修改-写”,并且在此期间不能被打断。原子指令一般需要返回读取的存储空间目标地址的数据,并写回到寄存器中。所以原子指令同时带有数据存储、计算和数据获取的操作。

在高性能乱序执行的处理器中,由于数据获取指令(Load指令)处于程序执行的关键路径上,所以进行了专门的优化,使其可以乱序执行。而数据存储指令(Store指令)一般不允许前瞻执行,必须等到指令提交之后才能往存储器写数据。原子指令需要读并且写存储空间,故一般按照Store指令的执行方式执行。一般来说,Load指令的执行经过指令分派、指令发射、获取数据、写回结果(数据写到结果总线)、指令提交阶段。原子指令由于有Store指令的特性,会先后经过指令分配、指令发射、指令提交、获取数据并修改、写回结果(数据写回结果总线)阶段。由于原子指令也要写回寄存器,所以原子指令写回结果的时间直接影响后续使用该数据的指令的执行时机,从而影响整个程序执行的性能。并且,由于原子指令需要对存储空间数据进行修改,所以需要获取数据的写权限才能执行。而处理器核中的数据多数处于共享(只读)状态,这就要求处理器核通过一致性协议将该数据获取并处于可写状态,而该过程涉及到和处理器核外部交互,一般需要较长时间,这就使得原子指令执行的延迟进一步增大。

如图1所示,在一般乱序执行的处理器中,Load指令能在T3就能返回数据,此时依赖于该Load目的寄存器的后续指令就可以获得数据执行了,在指令T4指令提交时,确认Load指令的执行结果,如果不正确则进行流水线清空操作即可保证整个程序执行的正确性。但是原子指令在T8才能返回读取的数据,因为对存储空间的写无法撤销,所以必须在指令提交之后才能进行写操作。因此原子指令写目的寄存器的时机严重滞后于普通Load,后续指令的执行也相应滞后。如果程序中共享资源的读写较多,那么这样原子指令的执行会严重影响整个程序的性能。

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种性能高、开销小、易于实现、使用灵活的加速原子指令执行的方法和装置,本发明可提高处理器核性能,并且实现简单,可灵活应用到现有处理器设计中。

为了解决上述技术问题,本发明采用的技术方案为:

一种加速原子指令执行的方法,实施步骤包括:

1)取原子指令;

2)根据原子指令生成对应的辅助指令,所述辅助指令为Load指令或预取指令,其中Load指令用于从原子指令操作存储区域取出原子指令操作执行前的数据,预取指令用于将原子指令操作存储区域的数据提前预取到处理器核中,并置于可写状态;分别向不同的流水线输出原子指令及其对应的辅助指令;

3)若辅助指令为Load指令,则前瞻执行Load指令读取原子指令需要操作区域的数据,并将结果写往结果总线和原子指令结果队列中,使得其他依赖该指令结果的指令可以提前执行;若辅助指令为预取指令,则执行预取指令提前将数据获取到处理器核中,并置为可写状态;原子指令在提交后执行,若辅助指令为Load指令,则跳转执行步骤4);若辅助指令为预取指令,则跳转执行步骤5);

4)将原子指令的执行结果和原子指令结果队列中的Load指令执行结果进行对比,若执行结果相等,则整个原子指令执行结束;若执行结果不相等,则将原子指令返回结果写往结果总线,并引发从该原子指令开始的流水线清空操作,指令执行结束;

5)直接对执行预取指令得到的数据结果进行原子操作,指令执行结束。

可选地,步骤2)中根据原子指令生成对应的辅助指令具体是指:在禁止前瞻缓存中查看是否有该原子指令曾有Load指令前瞻执行错误,如果有则根据原子指令生成对应的辅助指令为预取指令,否则根据原子指令生成对应的辅助指令为Load指令;步骤4)中引发从该原子指令开始的流水线清空操作时还包括通过禁止前瞻缓存记录该原子指令的前瞻执行错误的步骤。

可选地,步骤2)中分别向不同的流水线输出原子指令及其对应的辅助指令时,针对Load指令、预取指令两种辅助指令提交至相同或者不同的流水线。

可选地,步骤3)中原子指令在提交后执行的详细步骤包括:将原子指令发射到流水线中,提交原子指令,获取数据的写权限,根据原子指令的操作对数据进行操作,将操作后的数据写回存储区域,将原子指令操作前存储区域的数据作为原子指令执行的结果。

可选地,步骤3)中前瞻执行Load指令的详细步骤包括:将Load指令发射到流水线中,数据获取,写回结果到结果总线,且Load指令不含提交处理过程。

可选地,步骤3)中执行预取指令的详细步骤包括:将预取指令发射到流水线中,数据获取,预取指令提交,且预取指令并不含写结果总线的动作,只是将数据从下一级存储中读取并放到处理器核中。

本发明还提供一种加速原子指令执行的装置,该装置被编程以执行本发明前述加速原子指令执行的方法的步骤。

本发明还提供一种加速原子指令执行的装置,包括:

取指单元,用于取原子指令;

原子指令拆分单元,用于根据原子指令生成对应的辅助指令,所述辅助指令为Load指令或预取指令,其中Load指令用于从原子指令操作存储区域取出原子指令操作执行前的数据,预取指令用于将原子指令操作存储区域的数据提前预取到处理器核中,并置于可写状态;分别向不同的流水线输出原子指令及其对应的辅助指令;

原子指令结果队列,用于记录前瞻执行Load指令的执行结果;

Load/预取流水线,用于执行辅助指令,若辅助指令为Load指令,则前瞻执行Load指令读取原子指令需要操作区域的数据,并将结果写往结果总线和原子指令结果队列中,使得其他依赖该指令结果的指令可以提前执行;若辅助指令为预取指令,则执行预取指令提前将数据获取到处理器核中,并置为可写状态;

原子指令流水线,用于执行原子指令,原子指令在提交后执行,若辅助指令为Load指令,则跳转执行原子指令结果检查单元;若辅助指令为预取指令,则直接对执行预取指令得到的数据结果进行原子操作,指令执行结束;

原子指令结果检查单元,用于将原子指令的执行结果和原子指令结果队列中的Load指令执行结果进行对比,若执行结果相等,则整个原子指令执行结束;若执行结果不相等,则将原子指令返回结果写往结果总线,引发从该原子指令开始的流水线清空操作,指令执行结束。

和现有技术相比,本发明加速原子指令执行的方法具有下述优点:

1、性能高。由于原子指令执行需要在指令提交后,获取数据的写状态才能执行,导致原子指令返回数据到结果总线的时间较长。本发明通过两种方法加速原子指令的执行,从而提高了整个处理的性能。

2. 实现代价小。本发明所提的方法主要拆分的Load指令和预取指令在一般的乱序处理器中都有执行部件,所以拆分出的辅助指令并不需要增加额外的流水线支持。流水线清空操作在乱序执行处理器中也是现有的机制。只需要增加一些控制逻辑和几项原子指令结果队列就可以在现有的处理器设计中实现本发明的方法。

3.使用灵活,不影响现有指令执行通路。本发明所提的加速原子指令执行的方法不影响现有的原子指令、Load指令和预取指令的执行通路。在不需要该加速机制时,关闭原子指令拆分部件即可。

本发明的加速原子指令执行的装置具有与本发明加速原子指令执行的方法相同的技术效果,在此不再赘述。

附图说明

图1为Load指令和原子指令执行时间示意图。

图2为本发明实施例方法的基本流程示意图。

图3为本发明实施例装置的基本结构示意图。

具体实施方式

如图2所示,本实施例加速原子指令执行的方法的实施步骤包括:

1)取原子指令;

2)根据原子指令生成对应的辅助指令,辅助指令为Load指令或预取指令,其中Load指令用于从原子指令操作存储区域取出原子指令操作执行前的数据,预取指令用于将原子指令操作存储区域的数据提前预取到处理器核中,并置于可写状态;分别向不同的流水线输出原子指令及其对应的辅助指令;

3)若辅助指令为Load指令,则前瞻执行Load指令读取原子指令需要操作区域的数据,并将结果写往结果总线和原子指令结果队列中,使得其他依赖该指令结果的指令可以提前执行;若辅助指令为预取指令,则执行预取指令提前将数据获取到处理器核中,并置为可写状态;原子指令在提交后执行,若辅助指令为Load指令,则跳转执行步骤4);若辅助指令为预取指令,则跳转执行步骤5);

4)将原子指令的执行结果和原子指令结果队列中的Load指令执行结果进行对比,若执行结果相等,则整个原子指令执行结束;若执行结果不相等,则将原子指令返回结果写往结果总线,并引发从该原子指令开始的流水线清空操作(向处理器核控制单元发送Flush信息),指令执行结束;

5)直接对执行预取指令得到的数据结果进行原子操作,指令执行结束。

本实施例中,辅助指令包括写结果寄存器的Load指令和不写结果寄存器的预取指令两种,辅助指令所操作的存储地址和对应的原子指令相同,并且每次拆分时只选择两者的一个。辅助指令的选择根据辅助指令和原子指令执行历史进行,如果辅助指令为Load指令时,执行结果和原子指令执行结果不同,则下次执行该原子指令时拆分出预取指令,反之,选择预取指令。原子指令在拆分出Load指令的情况下,也可以在图1中的T3时刻返回数据了,从而大大加速了原子指令的执行。在拆分出预取指令的情况下,也可省掉获取数据写状态的时间,从而加速了原则指令的执行。

以原子指令ATOM Rd,Rt,[Rn]为例,其中Rd为该指令需要写的目标寄存器,Rt为原子指令运算的操作数之一,Rn为原子指令操作的存储地址。那么与该原子指令对应的Load指令为LOAD Rd,[Rn],预取指令为PLD [Rn]。Load指令的作用是从原子指令操作存储区域取出原子指令操作执行前的数据。预取指令的作用是将原子指令操作存储区域的数据提前预取到处理器核中,并置于可写状态。这样在原子指令提交后,对数据进行操作时,就可以直接进行,从而加速原子指令的执行。

辅助指令为Load指令或者辅助指令,根据在禁止前瞻缓存中是否有该原子指令曾经Load前瞻执行错误决定。本实施例中,步骤2)中根据原子指令生成对应的辅助指令具体是指:在禁止前瞻缓存中查看是否有该原子指令曾有Load指令前瞻执行错误,如果有则根据原子指令生成对应的辅助指令为预取指令,否则根据原子指令生成对应的辅助指令为Load指令;步骤4)中引发从该原子指令开始的流水线清空操作时还包括通过禁止前瞻缓存记录该原子指令的前瞻执行错误的步骤。

本实施例中,步骤2)中分别向不同的流水线输出原子指令及其对应的辅助指令时,针对Load指令、预取指令两种辅助指令提交至相同或者不同的流水线。

原子指令的执行在专门的流水线中执行,一般来说包含以下步骤:指令发射到流水线中,指令提交,获取数据的写权限,根据原子的操作对数据进行操作,将操作后的数据写回存储区域,将原子操作前存储区域的数据作为原子指令执行的结果。本实施例中,步骤3)中原子指令在提交后执行的详细步骤包括:将原子指令发射到流水线中,提交原子指令,获取数据的写权限,根据原子指令的操作对数据进行操作,将操作后的数据写回存储区域,将原子指令操作前存储区域的数据作为原子指令执行的结果。

针对前述原子指令ATOM Rd,Rt,[Rn],拆分得到的Load指令为LOAD Rd,[Rn]。

本实施例中,步骤3)中前瞻执行Load指令的详细步骤包括:将Load指令发射到流水线中,数据获取,写回结果到结果总线,且Load指令不含提交处理过程。原子指令的执行过程中,针对Load指令的情形,需要检查原子指令结果队列的数据是否正确,该队列由拆分的Load指令进行写。如果执行结果相等,那说明拆分出的Load指令前瞻地正确返回了原子指令需要返回的结果,则将原子指令执行的结果写入结果总线,也就是说重新将正确的原子指令执行结果写入到总线上,并引发从该原子指令开始的流水线清空操作,因为Load前瞻执行,并写出了错误的数据,现在需要将流水线中所有晚于该原子指令的指令全部清除,确保没有指令使用了错误的数据。否则说明前瞻执行的Load指令错误地往结果总线写了数据,错误数据传播将导致接下来指令执行都是错误的。将该原子指令的程序地址等信息写入禁止前瞻缓存中,以后再遇到该原子指令将不能拆分出前瞻的Load指令。

针对前述原子指令ATOM Rd,Rt,[Rn],拆分得到的预取指令为PLD [Rn]。

预取指令的执行包括指令发射,数据预取,指令提交等。本实施例中,步骤3)中执行预取指令的详细步骤包括:将预取指令发射到流水线中,数据获取,预取指令提交,且预取指令并不含写结果总线的动作,只是将数据从下一级存储中读取并放到处理器核中。预取指令并不会写结果总线,只是将数据从下一级存储中读取,放到处理器核中。这里的预取需要预取可写状态的数据块,以便原子指令在执行时,不需要额外的时间去获取该数据块的可写状态,从而加速原子指令的执行。

本实施例还提供一种加速原子指令执行的装置,该装置被编程以执行本实施例前述加速原子指令执行的方法的步骤。

如图3所示,本实施例还提供一种加速原子指令执行的装置,包括:

取指单元,用于取原子指令;

原子指令拆分单元,用于根据原子指令生成对应的辅助指令,辅助指令为Load指令或预取指令,其中Load指令用于从原子指令操作存储区域取出原子指令操作执行前的数据,预取指令用于将原子指令操作存储区域的数据提前预取到处理器核中,并置于可写状态;分别向不同的流水线输出原子指令及其对应的辅助指令;

原子指令结果队列,用于记录前瞻执行Load指令的执行结果;

Load/预取流水线,用于执行辅助指令,若辅助指令为Load指令,则前瞻执行Load指令读取原子指令需要操作区域的数据,并将结果写往结果总线和原子指令结果队列中,使得其他依赖该指令结果的指令可以提前执行;若辅助指令为预取指令,则执行预取指令提前将数据获取到处理器核中,并置为可写状态;

原子指令流水线,用于执行原子指令,原子指令在提交后执行,若辅助指令为Load指令,则跳转执行原子指令结果检查单元;若辅助指令为预取指令,则直接对执行预取指令得到的数据结果进行原子操作,指令执行结束;

原子指令结果检查单元,用于将原子指令的执行结果和原子指令结果队列中的Load指令执行结果进行对比,若执行结果相等,则整个原子指令执行结束;若执行结果不相等,则将原子指令返回结果写往结果总线,引发从该原子指令开始的流水线清空操作,指令执行结束。

参见图3,原子指令拆分单元在进行拆分前,需要检查禁止前瞻队列的内容,从而决定原子指令拆分的方式。原子指令结果检查单元检查原子指令和存储辅助指令中的Load指令执行的结果是否一致,如果不一致,需要向处理器核控制单元发送Flush信息,请求Flush操作。

如图3所示,本实施例加速原子指令执行的装置包括原子指令拆分单元、Load/预取指令执行流水线、原子指令执行流水线、原子指令结果队列、原子指令结果检查队列、禁止前瞻缓存和处理器核控制单元。原子指令拆分单元功能是将原子指令拆分为原子指令和辅助指令,并将拆分的原子指令送往原子指令流水线进行执行,将辅助指令送往Load/预取指令的流水线。原子指令拆分单元在进行拆分前,需要检查禁止前瞻队列的内容,从而决定原子指令拆分的方式。Load/预取指令执行流水线负责执行辅助指令,辅助指令包括Load指令和预取指令两种,这两种指令执行通路类似,一般在同一个流水线中实现。原子指令流水线用于指令原子指令,原子指令执行比较复杂,可以独立的流水线中,也可以实现在Load/预取指令执行流水线中增加额外的通路进行实现。原子指令结果队列用于存储辅助指令中的Load指令的结果。原子指令结果检查单元的功能是检查原子指令和存储辅助指令中的Load指令执行的结果是否一致,如果不一致,需要向处理器核控制单元发送Flush信息,请求Flush操作。处理器核控制单元是管理整个流水线的乱序执行的中心控制机构。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:信息处理装置、信息处理系统以及信息处理方法

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!