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

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

阅读说明:本技术 一种原子指令的执行方法和装置 (Atomic instruction execution method and device ) 是由 郑重 黄立波 隋兵才 王永文 倪晓强 孙彩霞 王俊辉 雷国庆 郭维 郭辉 于 2019-08-28 设计创作,主要内容包括:本发明公开了一种原子指令的执行方法和装置,本发明方法包括将原子指令发送到Store流水线执行;非Cache一致性区域操作的原子指令发送到下一级存储中,并等待返回结果;Cache一致性区域的原子指令在Store流水线中获取数据,并进行原子操作,并获得原子指令的执行结果,将原子指令的执行的结果,借用Load流水线写结果的通路,写出到结果总线上。原子指令的执行装置包括前述原子指令的执行方法对应的单元和模块。本发明能够基于现有普通存储流水线上实现,利用为普通Load指令和Store指令实现的分离的Load、Store流水线来实现原子指令,减少实现的复杂度和相关实现开销、提高整个系统的效率,具有实现复杂度低、运行开销小、执行效率高的优点。(The invention discloses an atomic instruction execution method and a device, wherein the atomic instruction execution method comprises the steps of sending the atomic instruction to a Store pipeline for execution; sending the atomic instruction of the non-Cache consistency region operation to the next-stage storage, and waiting for returning a result; and the atomic instruction in the Cache consistency area acquires data in the Store pipeline, performs atomic operation, acquires the execution result of the atomic instruction, and writes the execution result of the atomic instruction out on a result bus by means of a path of a Load pipeline write result. The execution device of the atomic instruction comprises a unit and a module corresponding to the execution method of the atomic instruction. The invention can be realized on the basis of the existing common storage pipeline, realizes the atomic instruction by utilizing the separated Load and Store pipelines realized by the common Load instruction and the Store instruction, reduces the complexity of realization and the related realization cost, improves the efficiency of the whole system, and has the advantages of low realization complexity, small operation cost and high execution efficiency.)

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

技术领域

本发明涉及微处理器的核心流水线设计领域,具体涉及一种原子指令的执行方法和装置。

背景技术

在并行程序的实现中,总涉及到共享资源的读写。为了避免多个共享资源写的冲突,保证程序执行的正取性。读写实现共享资源读写的基本方法是对共享资源进行锁操作,只有在获得锁后,才能够对共享资源进行写。而锁的实现通常采取“读-修改-写”的序列,而且该序列必须是原子的,也就是该序列执行过程中不能被其它操作打断。这类原子指令的实现就要求处理器能够提供对应的指令就行实现。对此,Intel提供了CMPXCHG原子指令,IBM提供了CAS原子指令,ARM提供了SWP、LDADD等原子指令。以ARM的LDADD 原子指令为例,该指令首先从存储器中取出数据,然后和该原子指令带的操作数相加,然后将相加的结果写回到存储中,并将存储器中取的数据写入到LDADD的目的寄存器中。

在精简指令集的处理器中存储操作一般有数据装载指令(Load指令)和数据存储指令(Store指令)两种。其中Load指令负责从存储器中读取数据,Store指令负责将数据存入存储器中。原子指令和普通存储操作指令(Load、Store指令)的最大不同是,原子指令同时要做Load和Store指令的操作,并且Load和Store操作不能被其他操作打断。

对于普通指令的流水线的设计也根据普通Load、Store指令的特性进行设计,分为数据获取流水线(Load流水线)和数据存储流水线(Store流水线)。这样每条流水线就可以实现最简的功能,以减小设计和验证的复杂度,同时降低不必要的额外开销。为了在一条流水线中实现原子指令,那么需要在流水线中增加一种新的通路,既可以读取数据也可以存储数据,这样的实现在一条流水线中融合了Load和Store流水线的特征,实现代价高,容易造成资源的浪费。因为原子指令在普通程序中的比例很小。为了实现少数指令而浪费资源的设计是不合理的。

目前已知的处理器没有公开的原子指令实现的细节。如果能够利用普通Load指令和Store指令实现的分离的Load、Store流水线来实现原子指令,那么就可以减少实现的复杂度和相关实现开销、提高整个系统的效率。但是,具体如何利用普通Load指令和Store指令实现的分离的Load、Store流水线,则仍然是一项亟待解决的关键技术问题。

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种原子指令的执行方法和装置,本发明能够基于现有普通存储流水线上实现,利用普通Load指令和Store指令实现的分离的Load、Store流水线来实现原子指令,减少实现的复杂度和相关实现开销、提高整个系统的效率,具有实现复杂度低、运行开销小、执行效率高的优点。

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

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

1)按照普通指令的执行路径进行原子指令的取指、译码、重命名;

2)在指令分派时,将原子指令按照普通Store指令进行处理发送到Store流水线并带上目的寄存器的信息;

3)在指令发射时,将原子指令按照普通Store指令的发射逻辑发射至存储指令队列;

4)按照普通Store指令的执行路径执行发射至存储指令队列中的原子指令;

5)根据所访问目标存储区域的存储特性决定下一步的操作,如果Store操作的存储区域是没有维护Cache一致性的,则跳转执行步骤6)由下一级存储执行原子指令,否则跳转执行步骤9)由处理器核心完成原子指令的操作;

6)分配填充缓存;

7)将数据、原子指令操作码、填充缓存号写入下一级存储;

8)等待下一级存储到返回原子操作的结果,且在返回结果后将获取的数据写到处理器核结果总线上,结束并退出;

9)获取目标存储区域的数据的写权限;

10)读取目标存储区域的数据,获取的数据写到处理器核结果总线上;

11)根据原子指令的操作码要求,将读取得到的目标存储区域的数据进行运算,得到真正需要写入存储的数据;

12)按照普通Store的数据通路,将真正需要写入存储的数据写入到一级数据Cache中,结束并退出。

可选地,步骤1)的详细步骤包括:

1.1)从指令高速缓存中将原子指令取到整个处理器的流水线中;

1.2)根据原子指令的编码信息进行指令控制和数据信息的获取,且针对原子指令增加原子指令的标识;

1.3)根据普通指令的重命名逻辑,将原子指令的目的寄存器进行重命名,并将源寄存器修改为响应的重命名后的寄存器号。

可选地,步骤2)的详细步骤包括:

2.1)根据原子指令的标识识别出原子指令;

2.2)将原子指令按照普通Store指令进行处理,然后发送到Store流水线且带上目的寄存器的信息,所述目的寄存器的信息包括目的寄存器的寄存器号、寄存器类型。

可选地,步骤3)的详细步骤包括:指令发射时,原子指令被发送到Store处理单元之后进入相应的等待队列,在等待队列中按照普通Store指令的发射条件和策略进行发射。

可选地,步骤4)的详细步骤包括:

4.1)针对发射至存储指令队列中的原子指令,按地址的生成规则读取源操作数的值并生成相应的虚拟地址,该虚拟地址对应了原子指令要操作的数据区域的起始地址;

4.2)将前面生成的虚拟地址转换为物理地址;

4.3)将被存储数据按物理地址和大小端配置进行转换,使其在进行数据存储时和目标格式一致。

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

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

取指译码重命名模块,用于按照普通指令的执行路径对原子指令取指、译码、重命名;

分派单元,用于在指令分派时,将原子指令按照普通Store指令进行处理发送到Store流水线并带上目的寄存器的信息;

发射单元,用于在指令发射时,将原子指令按照普通Store指令的发射逻辑发射至存储指令队列;

存储指令队列,用于存储发射的原子指令和普通指令;

原子指令执行模块,用于按照普通Store指令的执行路径执行原子指令;

Store管理逻辑单元,用于根据所访问目标存储区域的存储特性决定下一步的操作,如果Store操作的存储区域是没有维护Cache一致性的,则跳转执行填充缓存单元由下一级存储执行原子指令,否则跳转执行写权限获取单元由处理器核心完成原子指令的操作;

填充缓存单元,用于分配填充缓存;

第一原子指令数据回写逻辑单元,用于将数据、原子指令操作码、填充缓存号写入下一级存储;等待下一级存储到返回原子操作的结果,且在返回结果后将获取的数据写到处理器核结果总线上,结束并退出;

写权限获取单元,用于获取目标存储区域的数据的写权限;

旧数据读取单元,用于读取目标存储区域的数据,获取的数据写到处理器核结果总线上;

原子指令计算单元,用于根据原子指令的操作码要求,将读取得到的目标存储区域的数据进行运算,得到真正需要写入存储的数据;

第二原子指令数据回写逻辑单元,用于按照普通Store的数据通路,将真正需要写入存储的数据写入到一级数据Cache中,结束并退出。

可选地,所述取指译码重命名模块包括:

取指单元,用于从指令高速缓存中将原子指令取到整个处理器的流水线中;

译码单元,用于根据原子指令的编码信息进行指令控制和数据信息的获取,且针对原子指令增加原子指令的标识;

重命名单元,用于根据普通指令的重命名逻辑,将原子指令的目的寄存器进行重命名,并将源寄存器修改为响应的重命名后的寄存器号。

可选地,所述分派单元包括:

原子指令识别逻辑,用于根据原子指令的标识识别出原子指令;

原子指令分派逻辑,用于将原子指令按照普通Store指令进行处理,然后发送到Store流水线且带上目的寄存器的信息,所述目的寄存器的信息包括目的寄存器的寄存器号、寄存器类型。

可选地,所述原子指令执行模块包括:

地址计算单元,用于针对发射至存储指令队列中的原子指令,按地址的生成规则读取源操作数的值并生成相应的虚拟地址,该虚拟地址对应了原子指令要操作的数据区域的起始地址;

虚实地址转换单元,用于将前面生成的虚拟地址转换为物理地址;

数据转换单元,用于将被存储数据按物理地址和大小端配置进行转换,使其在进行数据存储时和目标格式一致。

和现有技术相比,本发明具有下述优点:

1、本实施例原子指令的执行方法基于现有的普通存储指令的实现通路实现原子指令的执行,基于普通存储流水线进行改造,实现简单。 在处理器核心设计时,可以将更多精力用于优化普通存储指令的Load、Store流水线的优化。在此基础上可以以较小的代价实现原子指令。

2. 本实施例原子指令的执行方法实现代价小。在普通Load、Store流水线的基础上,可以以增加少量逻辑的代价实现复杂的原子指令操作。

3. 本实施例原子指令的执行方法不影响现有流水线,集成方便,使用灵活。对于尚不支持原子指令的处理器核来说,可在不影响现有功能的基础上添加原子指令的实现。

附图说明

图1为本发明实施例原子指令的执行方法的基本流程示意图。

图2为本发明实施例原子指令的执行装置的基本结构示意图。

具体实施方式

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

1)按照普通指令的执行路径进行原子指令的取指、译码、重命名;

2)在指令分派时,将原子指令按照普通Store指令进行处理发送到Store流水线并带上目的寄存器的信息;

3)在指令发射时,将原子指令按照普通Store指令的发射逻辑发射至存储指令队列;

4)按照普通Store指令的执行路径执行发射至存储指令队列中的原子指令;

5)根据所访问目标存储区域的存储特性决定下一步的操作,如果Store操作的存储区域是没有维护Cache一致性的,则跳转执行步骤6)由下一级存储执行原子指令,否则跳转执行步骤9)由处理器核心完成原子指令的操作;

6)分配填充缓存;

7)将数据、原子指令操作码、填充缓存号写入下一级存储;

8)等待下一级存储到返回原子操作的结果,且在返回结果后将获取的数据写到处理器核结果总线上,结束并退出;

9)获取目标存储区域的数据的写权限;

10)读取目标存储区域的数据,获取的数据写到处理器核结果总线上;

11)根据原子指令的操作码要求,将读取得到的目标存储区域的数据进行运算,得到真正需要写入存储的数据;

12)按照普通Store的数据通路,将真正需要写入存储的数据写入到一级数据Cache中,结束并退出。

本实施例中,步骤1)的详细步骤包括:

1.1)从指令高速缓存(指令Cache)中将原子指令取到整个处理器的流水线中;

1.2)根据原子指令的编码信息进行指令控制和数据信息的获取,且针对原子指令增加原子指令的标识;

1.3)根据普通指令的重命名逻辑,将原子指令的目的寄存器进行重命名,并将源寄存器修改为响应的重命名后的寄存器号。

本实施例中,步骤2)的详细步骤包括:

2.1)根据原子指令的标识识别出原子指令;

2.2)将原子指令按照普通Store指令进行处理,然后发送到Store流水线且带上目的寄存器的信息,目的寄存器的信息包括目的寄存器的寄存器号、寄存器类型。

指令分派时,将原子指令分派到Store指令处理单元。指令分派时,识别原子指令的标识,将原子指令按照普通Store指令进行处理,然后发送到Store流水线。由于普通Store指令无需写目的寄存器,而原子指令在存储数据的同时需要将原有的数据写回到寄存器中。所以需要带上目的寄存器的信息,包括寄存器号、寄存器类型等信息。所以在Store流水线的通路上需要增加相关逻辑来保存这些信息。

本实施例中,步骤3)的详细步骤包括:指令发射时,原子指令被发送到Store处理单元之后进入相应的等待队列,在等待队列中按照普通Store指令的发射条件和策略进行发射,这样可以避免增加额外的控制逻辑。

本实施例中,步骤4)的详细步骤包括:

4.1)地址计算:针对发射至存储指令队列中的原子指令,按地址的生成规则读取源操作数的值并生成相应的虚拟地址(通常处理器中,这样生成的地址是虚拟地址,并不是真正存储的物理地址),该虚拟地址对应了原子指令要操作的数据区域的起始地址;

4.2)虚实地址转换:将前面生成的虚拟地址转换为物理地址(实地址);

4.3)被存储数据转换:将被存储数据按物理地址和大小端配置进行转换,使其在进行数据存储时和目标格式一致。

以上阶段的执行和普通Store指令的执行一致,无需增加任何操作。原子指令发射后,按照普通Store指令的执行路径执行,包括但不限于地址计算、虚实地址转换、被存储数据转换三个阶段,此外还可能增加一些其他的预处理。

本实施例中,步骤6)为分配填充缓存的过程。与普通Store不同,这里Store在写到下一级存储之前,必须要分配填充缓存。因为普通Store是不用接收来自下一级存储的数据的。而原子指令必须返回数据,所以这里先要分配填充缓存,用于存储原子指令执行之后返回的数据。需要注意的是这里只需要增加分配填充缓存的相关控制路径就行。返回数据的回填,可以利用已有的数据读取从下一级存储返回数据的通路,不用额外增加逻辑。

本实施例中,步骤7)为将数据、原子指令操作码、填充缓存号写入下一级存储进行处理。这里的控制逻辑沿用普通Store的逻辑就行,主要在写通道上增加原子指令操作码和填充缓存号就行。

本实施例中,步骤9)获取目标存储区域的数据的写权限完全是按照普通Store的通路进行设计,不用修改任何逻辑。获取目标存储区域数据写权限的方法一般通过Cache一致性协议将该数据块置为一致性协议中可以写的状态。

本实施例中,步骤10)读取目标存储区域的数据(根据原子指令操作的地址和访问的大小,将获取了写权限的数据块读取),获取的数据写到处理器核结果总线上;

本实施例中,步骤11)根据原子指令的操作码要求,将读取得到的目标存储区域的数据进行运算(运算的结果作为需要真正写入存储的数据),得到真正需要写入存储的数据;

本实施例中,步骤12)按照普通Store的数据通路,将真正需要写入存储的数据写入到一级数据Cache中,结束并退出。此处不用为原子指令增加逻辑。

对于维护了一致性协议的存储区域来说,步骤11)、12)和步骤10)中获取的数据通过Load流水线写到处理器核结果总线上可以并行,从而加快指令执行 。

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

如图2所示,作为处理器中的硬件,本实施例还提供一种原子指令的执行装置,包括:

取指译码重命名模块,用于按照普通指令的执行路径对原子指令取指、译码、重命名;

分派单元,用于在指令分派时,将原子指令按照普通Store指令进行处理发送到Store流水线并带上目的寄存器的信息;

发射单元,用于在指令发射时,将原子指令按照普通Store指令的发射逻辑发射至存储指令队列;

存储指令队列,用于存储发射的原子指令和普通指令;

原子指令执行模块,用于按照普通Store指令的执行路径执行原子指令;

Store管理逻辑单元,用于根据所访问目标存储区域的存储特性决定下一步的操作,如果Store操作的存储区域是没有维护Cache一致性的,则跳转执行填充缓存单元由下一级存储执行原子指令,否则跳转执行写权限获取单元由处理器核心完成原子指令的操作;

填充缓存单元,用于分配填充缓存;

第一原子指令数据回写逻辑单元(原子指令数据回写逻辑单元的一部分),用于将数据、原子指令操作码、填充缓存号写入下一级存储;等待下一级存储到返回原子操作的结果,且在返回结果后将获取的数据写到处理器核结果总线上,结束并退出;

写权限获取单元(图中未绘出),用于获取目标存储区域的数据的写权限;

旧数据读取单元(图中未绘出),用于读取目标存储区域的数据,获取的数据写到处理器核结果总线上;

原子指令计算单元,用于根据原子指令的操作码要求,将读取得到的目标存储区域的数据进行运算,得到真正需要写入存储的数据;

第二原子指令数据回写逻辑单元(原子指令数据回写逻辑单元的另一部分),用于按照普通Store的数据通路,将真正需要写入存储的数据写入到一级数据Cache中,结束并退出。

如图2所示,取指译码重命名模块包括:

取指单元,用于从指令高速缓存中将原子指令取到整个处理器的流水线中;

译码单元,用于根据原子指令的编码信息进行指令控制和数据信息的获取,且针对原子指令增加原子指令的标识;

重命名单元,用于根据普通指令的重命名逻辑,将原子指令的目的寄存器进行重命名,并将源寄存器修改为响应的重命名后的寄存器号。

本实施例中,分派单元包括:

原子指令识别逻辑(图中未绘出),用于根据原子指令的标识识别出原子指令;

原子指令分派逻辑(图中未绘出),用于将原子指令按照普通Store指令进行处理,然后发送到Store流水线且带上目的寄存器的信息,目的寄存器的信息包括目的寄存器的寄存器号、寄存器类型。

如图2所示,原子指令执行模块包括:

地址计算单元,用于针对发射至存储指令队列中的原子指令,按地址的生成规则读取源操作数的值并生成相应的虚拟地址,该虚拟地址对应了原子指令要操作的数据区域的起始地址;

虚实地址转换单元,用于将前面生成的虚拟地址转换为物理地址;

数据转换单元,用于将被存储数据按物理地址和大小端配置进行转换,使其在进行数据存储时和目标格式一致。

其中取指单元、译码单元、重命名单元、分派单元、存储指令队列、地址生成单元、虚实地址转换单元转换单元、数据转换单元、数据Cache、填充缓存,Store管理逻辑、load流水线、下一级存储等单元是实现普通指令时也必须实现的。原子指令只需在普通指令执行的处理器核中,增加原子指令计算单元和原子指令数据回写逻辑,并对译码单元,分派单元和Store管理逻辑进行功能增加,就能在一个只有分离的load、store流水线的处理器核中,实现原子指令。

取指单元负责从存储中读取处理器核需要执行的指令,读取的指令交给译码单元进行指令信息的译码,译码后的指令交接重命名单元进行寄存器号的重命名。分派单元接收重命名后的指令,并根据指令信息,将原子指令分派到Store流水线中。进行Store流水线的指令首先会在存储指令(Store 指令)队列中,等待需要的操作数生成。待操作数和其他条件满足后发射到地址生成单元中开始指令功能的执行。地址生成单元根据地址生成规则产生原子指令操作的虚拟地址,经过虚实地址转换单元后得到原子指令操作目标存储区域的物理地址。在数据转换单元中将指令要存储的数据进行转换。数据转换后的指令进入Store管理逻辑中,根据原子指令目标存储区域的存储属性进行下一步的操作。对于没有维护Cache一致性的存储区域的原子指令,将在填充缓存中首先分配存储空间,然后将写操作发往下一级存储中,等待下一级存储将原子指令执行完毕后,原子指令数据回写逻辑将下一级存储返回的数据,通过load流水线写到结果总线上。对于维护Cache一致性的存储区域的原子指令,Store管理逻辑获取目标存储区域的写权限,然后通过原子指令计算单元完成原子指令对存储区域数据的操作,然后计算后的数据写入数据Cache中,并使用原子指令数据回写逻辑,通过Load流水线将结果写回到总线上。

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

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种加速原子指令执行的方法和装置

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!