掌桥专利:专业的专利平台
掌桥专利
首页

非对齐地址访存指令的处理方法、装置及电子设备

文献发布时间:2024-04-18 19:59:31


非对齐地址访存指令的处理方法、装置及电子设备

技术领域

本申请涉及计算机技术领域,尤其涉及一种非对齐地址访存指令的处理方法、装置及电子设备。

背景技术

非对齐地址访存指令指的是访存地址不在访存大小的边界上对齐的访存指令。

目前,针对非对齐地址访存指令的处理方式是,处理器会产生非对齐异常,交由软件来处理。软件将非对齐地址访存指令拆分成多条对齐地址的访存指令,然后由处理器硬件执行。

然而,这种处理方式,往往需要数十到上百个处理器周期才能完成,非对齐地址访存指令的处理效率较低。

发明内容

本申请提供一种非对齐地址访存指令的处理方法、装置及电子设备,以解决非对齐地址访存指令的处理效率较低的问题。

第一方面,本申请提供一种非对齐地址访存指令的处理方法,包括:

确定待处理访存指令是否为非对齐地址访存指令;

在所述待处理访存指令为非对齐地址访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的至少一个访存操作,各所述访存操作均为未跨高速缓存行的访存操作;

执行所述至少一个访存操作,得到所述至少一个访存操作对应的数据;

基于所述至少一个访存操作对应的数据,写回所述待处理访存指令。

在一种可能的实施方式中,所述基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的至少一个访存操作,包括:

基于所述待处理访存指令的访存地址,确定所述待处理访存指令是否为跨高速缓存行的访存指令;

基于所述待处理访存指令是否为跨高速缓存行的访存指令,确定所述待处理访存指令对应的至少一个访存操作。

在一种可能的实施方式中,所述基于所述待处理访存指令是否为跨高速缓存行的访存指令,确定所述待处理访存指令对应的至少一个访存操作,包括:

在所述待处理访存指令为未跨高速缓存行的访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的目标访存操作;

在所述待处理访存指令为跨高速缓存行的访存指令的情况下,基于高速缓存行的边界对所述待处理访存指令的访存地址进行拆分,得到位于所述边界之前的第一访存地址和位于所述边界之后的第二访存地址;确定所述第一访存地址对应的第一访存操作和所述第二访存地址对应的第二访存操作。

在一种可能的实施方式中,所述执行所述至少一个访存操作,得到所述至少一个访存操作对应的数据,包括:

在所述至少一个访存操作包括所述目标访存操作的情况下,将所述目标访存操作确定为待处理访存操作,并执行第一过程;

在所述至少一个访存操作包括所述第一访存操作和所述第二访存操作的情况下,将所述第二访存操作确定为待处理访存操作,并执行所述第一过程;将所述第一访存操作回滚至发射队列后,确定为新的待处理访存操作,并执行所述第一过程;

其中,所述第一过程包括:

基于待处理访存操作对应的访存地址,确定所述待处理访存操作对应的物理地址;

在确定所述待处理访存操作对应的物理地址的情况下,确定所述待处理访存操作是否命中数据高速缓存;

基于所述待处理访存操作是否命中数据高速缓存,确定所述待处理访存操作对应的数据。

在一种可能的实施方式中,所述基于待处理访存操作对应的访存地址,确定所述待处理访存操作对应的物理地址,包括:

确定所述待处理访存操作对应的访存地址是否命中转译后备缓冲器;

基于所述待处理访存操作对应的访存地址是否命中所述转译后备缓冲器,确定所述待处理访存操作对应的物理地址。

在一种可能的实施方式中,所述基于所述待处理访存操作对应的访存地址是否命中所述转译后备缓冲器,确定所述待处理访存操作对应的物理地址,包括:

确定所述待处理访存操作对应的访存地址是否命中一级转译后备缓冲器;

在所述待处理访存操作对应的访存地址命中所述一级转译后备缓冲器的情况下,从所述一级转译后备缓冲器中确定所述待处理访存操作对应的物理地址;

在所述待处理访存操作对应的访存地址未命中所述一级转译后备缓冲器的情况下,从二级转译后备缓冲器中确定所述待处理访存操作对应的物理地址。

在一种可能的实施方式中,所述基于所述待处理访存操作是否命中数据高速缓存,确定所述待处理访存操作对应的数据,包括:

在所述待处理访存操作命中所述数据高速缓存的情况下,从所述数据高速缓存中确定所述待处理访存操作对应的数据;

在所述待处理访存操作未命中所述数据高速缓存的情况下,基于访存失效队列,从下层存储系统中确定所述待处理访存操作对应的数据。

在一种可能的实施方式中,所述基于所述至少一个访存操作对应的数据,写回所述待处理访存指令,包括:

在所述至少一个访存操作包括所述目标访存操作的情况下,将所述目标访存操作对应的数据,写入所述待处理访存指令对应的队列项;

在所述至少一个访存操作包括所述第一访存操作和所述第二访存操作的情况下,将所述第一访存操作对应的数据和所述第二访存操作对应的数据进行合并处理,得到合并数据;将所述合并数据写入所述待处理访存指令对应的队列项。

在一种可能的实施方式中,所述确定待处理访存指令是否为非对齐地址访存指令,包括:

确定所述待处理访存指令的指令类型,所述指令类型包括双字访存指令、字访存指令、半字访存指令或者字节访存指令;

基于所述待处理访存指令的指令类型和所述待处理访存指令的访存地址,确定所述待处理访存指令是否为非对齐地址访存指令。

第二方面,本申请提供一种非对齐地址访存指令的处理装置,包括:

确定模块,用于确定待处理访存指令是否为非对齐地址访存指令;

第一处理模块,用于在所述待处理访存指令为非对齐地址访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的至少一个访存操作,各所述访存操作均为未跨高速缓存行的访存操作;

执行模块,用于执行所述至少一个访存操作,得到所述至少一个访存操作对应的数据;

第二处理模块,用于基于所述至少一个访存操作对应的数据,写回所述待处理访存指令。

在一种可能的实施方式中,所述第一处理模块具体用于:

基于所述待处理访存指令的访存地址,确定所述待处理访存指令是否为跨高速缓存行的访存指令;

基于所述待处理访存指令是否为跨高速缓存行的访存指令,确定所述待处理访存指令对应的至少一个访存操作。

在一种可能的实施方式中,所述第一处理模块具体用于:

在所述待处理访存指令为未跨高速缓存行的访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的目标访存操作;

在所述待处理访存指令为跨高速缓存行的访存指令的情况下,基于高速缓存行的边界对所述待处理访存指令的访存地址进行拆分,得到位于所述边界之前的第一访存地址和位于所述边界之后的第二访存地址;确定所述第一访存地址对应的第一访存操作和所述第二访存地址对应的第二访存操作。

在一种可能的实施方式中,所述执行模块具体用于:

在所述至少一个访存操作包括所述目标访存操作的情况下,将所述目标访存操作确定为待处理访存操作,并执行第一过程;

在所述至少一个访存操作包括所述第一访存操作和所述第二访存操作的情况下,将所述第二访存操作确定为待处理访存操作,并执行所述第一过程;将所述第一访存操作回滚至发射队列后,确定为新的待处理访存操作,并执行所述第一过程;

其中,所述第一过程包括:

基于待处理访存操作对应的访存地址,确定所述待处理访存操作对应的物理地址;

在确定所述待处理访存操作对应的物理地址的情况下,确定所述待处理访存操作是否命中数据高速缓存;

基于所述待处理访存操作是否命中数据高速缓存,确定所述待处理访存操作对应的数据。

在一种可能的实施方式中,所述执行模块具体用于:

确定所述待处理访存操作对应的访存地址是否命中转译后备缓冲器;

基于所述待处理访存操作对应的访存地址是否命中所述转译后备缓冲器,确定所述待处理访存操作对应的物理地址。

在一种可能的实施方式中,所述执行模块具体用于:

确定所述待处理访存操作对应的访存地址是否命中一级转译后备缓冲器;

在所述待处理访存操作对应的访存地址命中所述一级转译后备缓冲器的情况下,从所述一级转译后备缓冲器中确定所述待处理访存操作对应的物理地址;

在所述待处理访存操作对应的访存地址未命中所述一级转译后备缓冲器的情况下,从二级转译后备缓冲器中确定所述待处理访存操作对应的物理地址。

在一种可能的实施方式中,所述执行模块具体用于:

在所述待处理访存操作命中所述数据高速缓存的情况下,从所述数据高速缓存中确定所述待处理访存操作对应的数据;

在所述待处理访存操作未命中所述数据高速缓存的情况下,基于访存失效队列,从下层存储系统中确定所述待处理访存操作对应的数据。

在一种可能的实施方式中,所述第二处理模块具体用于:

在所述至少一个访存操作包括所述目标访存操作的情况下,将所述目标访存操作对应的数据,写入所述待处理访存指令对应的队列项;

在所述至少一个访存操作包括所述第一访存操作和所述第二访存操作的情况下,将所述第一访存操作对应的数据和所述第二访存操作对应的数据进行合并处理,得到合并数据;将所述合并数据写入所述待处理访存指令对应的队列项。

在一种可能的实施方式中,所述确定模块具体用于:

确定所述待处理访存指令的指令类型,所述指令类型包括双字访存指令、字访存指令、半字访存指令或者字节访存指令;

基于所述待处理访存指令的指令类型和所述待处理访存指令的访存地址,确定所述待处理访存指令是否为非对齐地址访存指令。

第三方面,本申请提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面任一项所述的非对齐地址访存指令的处理方法。

第四方面,本申请提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的非对齐地址访存指令的处理方法。

本申请提供的非对齐地址访存指令的处理方法、装置及电子设备,针对待处理访存指令,首先确定待处理访存指令是否为非对齐地址访存指令,在待处理访存指令为非对齐地址访存指令的情况下,基于待处理访存指令的访存地址,确定待处理访存指令对应的至少一个访存操作,各访存操作均为未跨高速缓存行的访存操作,然后执行至少一个访存操作,得到至少一个访存操作对应的数据,并基于至少一个访存操作对应的数据,写回待处理访存指令,完成待处理访存指令的处理。本申请实施例的方案,针对待处理访存指令为非对齐地址访存指令的情况,只要满足待处理访存指令对应的访存操作为未跨高速缓存行的访存操作即可,而非对齐地址访存指令不跨高速缓存行或者跨两个高速缓存行,从而无需将待处理访存指令拆分成多条对齐地址访存指令,减小了将待处理访存指令拆分的数量,从而减小了非对齐地址访存指令处理过程中所需的访存队列项资源,从而提高了非对齐地址访存指令的处理效率。

附图说明

为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的非对齐地址访存指令的处理方法的流程图;

图2为本申请实施例提供的非对齐地址访存指令的硬件实现示意图;

图3为本申请实施例提供的数据高速缓存填充前后对比示意图;

图4为本申请实施例提供的确定待处理访存指令对应的至少一个访存操作的流程图;

图5为本申请实施例提供的待处理访存指令的处理流程图;

图6为本申请实施例提供的一种待处理访存指令的访存地址划分示意图;

图7为本申请实施例提供的一种待处理访存指令的处理示意图一;

图8为本申请实施例提供的一种待处理访存指令的处理示意图二;

图9为本申请实施例提供的一种待处理访存指令的处理示意图三;

图10为本申请实施例提供的一种待处理访存指令的处理示意图四;

图11为本申请实施例提供的一种待处理访存指令的处理示意图五;

图12为本申请实施例提供的一种待处理访存指令的处理示意图六;

图13为本申请实施例提供的非对齐地址访存指令的处理装置的结构示意图;

图14为本申请实施例提供的一种电子设备的实体结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

非对齐地址访存指令,主要指访存指令的访存地址不在访存大小的边界上对齐。比如访问双字(8字节)的访存指令,那么访存地址应该按双字对齐,即访存地址低三位应为全0。访问字(4字节)的访存指令,那么访存地址应该按字对齐,即访存地址低两位应为全0。访问半字(2字节),那么访存地址应该按半字对齐,即访存地址最低一位应为0。对于访存地址不符合上述规则的,就称之为非对齐地址访存指令。只有访问字节的访存指令,对访存指令地址没有要求,不涉及地址对齐的问题。

对齐地址的访存指令可以简化高速缓存访问逻辑和处理器访存指令地址相关的判断逻辑,因此一般高性能处理器硬件都是支持对齐地址的访存指令,大多数程序也会被编译成对齐地址的访存指令。然而,目前依然有部分库函数里面的程序是非对齐地址访问的,因此仍涉及到非对齐地址访存指令的处理。如果每次都做程序移植,耗费时间长。另外,为降低存储空间成本,高性能处理器也存在需要连续分配存储空间的需求,也会出现非对齐地址的访存指令访问。

目前,在非对齐地址访存指令的处理上,如果处理器硬件不支持非对齐地址访存指令,在遇到非对齐地址访存指令时,一般处理器会产生非对齐异常,交由软件来处理。软件将非对齐地址访存指令拆分成多条对齐地址的访存指令给处理器硬件执行。

然而,处理器采用进入异常然后交由软件拆分的处理方式,往往需要数十到上百个处理器周期才能完成。非对齐地址访存指令的处理效率成为处理器的性能瓶颈。

在拆分处理过程中还会引起资源的过多占用和执行效率的降低。即,通过拆分成多条对齐地址的访存指令,在对高速缓存的访问上需要占多个端口,在访存队列等资源上需要占多项,写回寄存器堆也需分多次写回导致多次占用寄存器堆端口,影响非对齐地址访存指令的处理效率,并且额外占用了宝贵的处理器资源。

基于此,本申请实施例提供一种非对齐地址访存指令的处理方法,以解决上述技术问题。

图1为本申请实施例提供的非对齐地址访存指令的处理方法的流程图,如图1所示,该方法包括:

S11,确定待处理访存指令是否为非对齐地址访存指令。

针对一个待处理访存指令,首先判断其是否为非对齐地址访存指令。在待处理访存指令进入访存队列后,会为待处理访存指令分配队列项,队列项中记录待处理访存指令的相关信息,基于待处理访存指令的相关信息可以确定待处理访存指令的访存地址,基于待处理访存指令的访存地址就可以确定待处理访存指令是否为非对齐地址访存指令。

具体的,首先确定待处理访存指令的指令类型,待处理访存指令的指令类型包括双字访存指令、字访存指令、半字访存指令或者字节访存指令。在确定了待处理访存指令的指令类型后,就可以基于待处理访存指令的指令类型和待处理访存指令的访存地址,确定待处理访存指令是否为非对齐地址访存指令。

例如,若待处理访存指令为双字访存指令而言,访存地址应当按双字对齐,即访存地址低三位应全为0,若待处理访存指令的访存地址的低三位全为0,则待处理访存指令属于对齐地址访存指令,否则,待处理访存指令属于非对齐地址访存指令;例如,若待处理访存指令为字访存指令,则需要判断待处理访存指令的访存地址的低两位是否全为0,若是,则待处理访存指令属于对齐地址访存指令,若否,则待处理访存指令属于非对齐地址访存指令;例如,若待处理访存指令为半字访存指令,则需要判断待处理访存指令的访存地址的低一位是否为0,若是,则待处理访存指令属于对齐地址访存指令,若否,则待处理访存指令属于非对齐地址访存指令;例如,若待处理访存指令为字节访存指令,则确定待处理访存指令属于对齐地址访存指令,等等。

S12,在待处理访存指令为非对齐地址访存指令的情况下,基于待处理访存指令的访存地址,确定待处理访存指令对应的至少一个访存操作,各访存操作均为未跨高速缓存行的访存操作。

在待处理访存指令为非对齐地址访存指令的情况下,本申请实施例基于待处理访存指令的访存地址,可以确定对应的至少一个访存操作。

在数据高速缓存中包括多个高速缓存行,不同高速缓存行的虚拟地址不同。针对任意一个访存操作而言,若该访存操作需要访存的数据处于一个高速缓存行中,则该访存操作未跨高速缓存行;若该访存操作需要访存的数据处于两个高速缓存行中,则该访存操作跨高速缓存行。在本申请实施例中,针对待处理访存指令对应的至少一个访存操作而言,任意访存操作均为未跨高速缓存行的访存操作。

S13,执行至少一个访存操作,得到至少一个访存操作对应的数据。

在确定待处理访存指令对应的至少一个访存操作后,针对每个访存操作,可以基于该访存操作进行数据访存,得到每个访存操作对应的数据。

S14,基于至少一个访存操作对应的数据,写回待处理访存指令。

若待处理访存指令对应的访存操作的数量为一个,则将该访存操作对应的数据写回待处理访存指令的队列项即可。若待处理访存指令对应的访存操作不止一个,则需要将多个访存操作各自对应的数据分别写入该待处理访存指令的队列项。

在上述任一实施例的基础上,下面结合附图对本申请实施例的方案进行详细介绍。

图2为本申请实施例提供的非对齐地址访存指令的硬件实现示意图,如图2所示,包括发射队列、地址计算模块、非对齐地址指令处理模块、数据高速缓存和转译后备缓冲器访问模块、访存指令地址相关判断和数据传递模块和访存队列。

发射队列:用于发射访存指令,同时在访存队列中为访存指令分配队列项。

地址计算模块:用于根据访存指令的指令信息,计算访存指令的访存地址。

非对齐地址指令处理模块:用于根据访存指令的指令类型和访存地址判断访存指令是否属于非对齐地址访存指令。对于非对齐地址访存指令,判断其是否跨高速缓存行,如果跨高速缓存行,则按照高速缓存行边界拆分成两个内部操作。第一个内部操作是两个操作中低地址的高速缓存行访问,继续访存流水线访问。第二个内部操作是两个操作中高地址的高速缓存行访问操作,第二个操作回滚到发射队列重新执行。

数据高速缓存和转译后备缓冲器访问模块:用于读数据高速缓存标签存储体,读数据高速缓存数据存储体,同时访问转译后备缓冲器。如转译后备缓冲器未命中,进行转译后备缓冲器失效处理,回滚到发射队列重新执行。如转译后备缓冲器命中,进行标签比较,判断数据高速缓存是否命中。如数据高速缓存命中,将访存指令需要的命中路的数据放在访存结果寄存器低位。对于不跨高速缓存行的访存指令直接写回。进入访存队列,将数据写入访存队列的数据项;对于跨高速缓存行的指令,两个操作都将数据按地址高低顺序写入访存队列为原访存指令分派时分配的队列项。

访存指令地址相关判断和数据传递模块:用于维护乱序发射的访存指令之间执行顺序。访存地址相关采取数据传递机制,具体的,一条取数指令需要从所有执行序在其之前的、与其相关的存数指令处获取对应数据;一条存数指令要判断所有的已经在访存队列中、与其相关的、且执行序在它后面的指令是否存在,如果存在,则将对应的取数指令无效掉。指令地址相关的判断以字节为单位进行精确的判断。对于取数指令写回,前面的存数指令地址未算出的情况下需要回滚到发射队列进行重新执行。访存指令的数据都放在寄存器的低位,进行数据传递时,根据访存指令的地址得到传递的数据在寄存器中的位置,选择数据进行传递。

访存队列:负责访存指令的定序,失效访存指令的数据访问和写回,拆分的非对齐地址访存指令两次内部操作的数据拼合。访存队列从发射队列接收访存指令,分配访存队列项,对于拆分的非对齐地址访存指令的两个内部操作占用同一个访存队列项。

访存队列从访存流水线接收访存指令的结果,以更新其内部的状态。命中的访存操作进入访存队列,将数据写入访存队列的数据项,对于跨高速缓存行的指令,两个操作都将数据按地址高低顺序写入原访存指令项。进入访存队列,等待将高速缓存失效的访问送到访存失效队列。对于跨高速缓存行的访存指令,根据拆分出的两个内部操作的高速缓存是否命中的结果,对于未命中的内部操作分别按内部操作的高速缓存行地址发送访存失效请求给访存失效队列。访存队列接收数据高速缓存失效填充的结果,更新访存队列中全部等待此次填充的数据的指令状态。

一次数据高速缓存填充会将数据传递到所有等待这一高速缓存行的访存队列项,所有在访存队列中等待这一高速缓存行数据的指令都会按地址匹配得到数据。这些访存队列项的数据状态被标识为有效。如果该指令此前已经进行了存数指令到取数指令的前递,访存队列负责在数据回填时合并前递结果。访存队列写回所需要的数据都已经获得的访存指令。

访存队列中的每个队列项,均包含以下信息:访存指令的操作信息,访存指令对应的访存操作及访问宽度,是否属于非对齐地址访存指令拆分成两个内部操作等信息,物理地址(访存指令的物理地址),数据项(访存指令访问的数据),状态位(该队列项的状态)。

针对队列项的状态位而言,表1示例了状态位可能的情形。

表1

访存失效队列:负责处理访存队列中失效的高速缓存请求,并访问下层存储系统。若一条失效的访存指令成功被分配访存失效队列项,后续其将在访存队列中侦听数据高速缓存填充的结果。

图3为本申请实施例提供的数据高速缓存填充前后对比示意图,如图3所示,示意了一次数据高速缓存填充前后访存队列中各项的变化。

请参见图3中未进行数据高速缓存填充的访存队列项,在未进行填充之前,访存队列项中的数据是空的,对应的状态位为失效。请参见图3中已进行数据高速缓存填充的访存队列项,在进行填充后,访存队列项中已有相应的回填数据,对应的状态位为数据有效。

在上述实施例中,对本申请实施例提供的非对齐地址访存指令的硬件实现进行了介绍,下面基于上述硬件实现,结合附图对本申请实施例的方案进行详细介绍。

图4为本申请实施例提供的确定待处理访存指令对应的至少一个访存操作的流程图,如图4所示,包括:

S41,基于待处理访存指令的访存地址,确定待处理访存指令是否为跨高速缓存行的访存指令。

跨高速缓存行的访存指令,指的是需要访问的数据在两个缓存行中的访存指令,相应的,未跨高速缓存行的访存指令,指的是需要访问的数据在一个缓存行中的访存指令。在确定了待处理访存指令的访存地址后,就可以确定待处理访存指令是否为跨高速缓存行的访存指令。

S42,基于待处理访存指令是否为跨高速缓存行的访存指令,确定待处理访存指令对应的至少一个访存操作。

在待处理访存指令为未跨高速缓存行的访存指令的情况下,基于待处理访存指令的访存地址,确定待处理访存指令对应的目标访存操作。即,在待处理访存指令未跨高速缓存行的情况下,无需对该待处理访存指令进行拆分,待处理访存指令对应的访存操作只有一个,即目标访存操作,对应的访存地址即为待处理访存指令的访存地址。

在待处理访存指令为跨高速缓存行的访存指令的情况下,基于高速缓存行的边界对所述待处理访存指令的访存地址进行拆分,得到位于边界之前的第一访存地址和位于边界之后的第二访存地址;确定第一访存地址对应的第一访存操作和第二访存地址对应的第二访存操作。即,在待处理访存指令跨高速缓存行的情况下,需要对该待处理访存指令进行拆分,得到对应的两个内部操作,分别是高地址的第一访存操作,以及低地址的第二访存操作。拆分后的第一访存操作和第二访存操作均不跨高速缓存行。

在上述实施例中,介绍了如何确定待处理访存指令对应的至少一个访存操作,而在确定至少一个访存操作后,需要执行这至少一个访存操作,得到至少一个访存操作对应的数据。

具体的,在至少一个访存操作包括目标访存操作的情况下,将目标访存操作确定为待处理访存操作,并执行第一过程;

在至少一个访存操作包括第一访存操作和第二访存操作的情况下,将第二访存操作确定为待处理访存操作,并执行第一过程;将第一访存操作回滚至发射队列后,确定为新的待处理访存操作,并执行第一过程;

其中,第一过程包括如下步骤1至步骤3:

步骤1,基于待处理访存操作对应的访存地址,确定待处理访存操作对应的物理地址。

具体的,首先判断待处理访存操作对应的访存地址是否命中转译后备缓冲器。基于待处理访存操作对应的访存地址是否命中转译后备缓冲器,来确定待处理访存操作对应的物理地址。可选的,本申请实施例中的转译后备缓冲器可以是多级转译后备缓冲器,例如两级转译后备缓冲器、三级转译后备缓冲器,等等,本申请实施例对此不作限定。

在一种可能的实现方式中,以转译后备缓冲器为两级转译后备缓冲器为例,首先确定待处理访存操作对应的访存地址是否命中一级转译后备缓冲器。在待处理访存操作对应的访存地址命中一级转译后备缓冲器的情况下,表示转译后备缓冲器命中,因而可以从一级转译后备缓冲器中确定待处理访存操作对应的物理地址;在待处理访存操作对应的访存地址未命中一级转译后备缓冲器的情况下,表示转译后备缓冲器未命中,需要从二级转译后备缓冲器中确定待处理访存操作对应的物理地址。

步骤2,在确定待处理访存操作对应的物理地址的情况下,确定待处理访存操作是否命中数据高速缓存。

步骤3,基于待处理访存操作是否命中数据高速缓存,确定待处理访存操作对应的数据。

具体的,在待处理访存操作命中数据高速缓存的情况下,从数据高速缓存中确定待处理访存操作对应的数据。在待处理访存操作未命中数据高速缓存的情况下,基于访存失效队列,从下层存储系统中确定待处理访存操作对应的数据。

然后,基于至少一个访存操作对应的数据,写回待处理访存指令。在至少一个访存操作包括目标访存操作的情况下,将目标访存操作对应的数据,写入待处理访存指令对应的队列项;在至少一个访存操作包括第一访存操作和第二访存操作的情况下,将第一访存操作对应的数据和第二访存操作对应的数据进行合并处理,得到合并数据;将合并数据写入待处理访存指令对应的队列项。

图5为本申请实施例提供的待处理访存指令的处理流程图,如图5所示,包括:

S501,发射队列发射待处理访存指令。

发射队列发射待处理访存指令,同时在访存队列中为待处理访存指令分配队列项。

S502,计算待处理访存指令的访存地址。

根据待处理访存指令的指令信息,计算得到访存指令的访存地址。待处理访存指令的指令信息包括待处理访存指令的基地址和偏移量,通过将待处理访存指令的基地址和偏移量相加计算,即可得到待处理访存指令的访存地址。

S503,根据待处理访存指令的指令类型和访存地址判断待处理访存指令是否为非对齐地址访存指令,若是,则执行S504,若否,则执行S506。

S504,判断待处理访存指令是否跨高速缓存行,若是,则执行S505,若否,则执行S506。

S505,按照高速缓存行的边界拆分成第一访存操作和第二访存操作,针对第一访存操作,执行S501,针对第二访存操作,执行S506。

根据待处理访存指令的指令类型和访存地址,判断待处理访存指令是否为非对齐地址访存指令。对于非对齐地址访存指令而言,判断其是否跨高速缓存行。判断待处理访存指令是否为非对齐地址访存指令和是否跨高速缓存行的具体实现方式可以参见上述实施例中的相关介绍,此处不再赘述。

如果待处理访存指令跨高速缓存行,则按照高速缓存行的边界拆分成两个内部操作,即第一访存操作和第二访存操作。第二访存操作是两个操作中低地址的高速缓存行访问,继续访存流水线访问。第一访存操作是两个操作中高地址的高速缓存行访问操作,第一访存操作回滚到发射队列重新执行。

S506,读数据高速缓存标签存储体,读数据高速缓存数据存储体,同时访问转译后备缓冲器。判断是否命中转译后备缓冲器,若是,则执行S507,若否,则执行S501。

S506至S511为第一过程的具体实现流程,即针对待处理访存操作,首先判断是否命中转译后备缓冲器。若命中转译后备缓冲器,则可以执行后续流程,若未命中转译后备缓冲器,则回滚到发射队列重新执行。

由于在未命中转译后备缓冲器后,会从二级转译后备缓冲器中查找待处理访存操作对应的物理地址,因此在回滚到发射队列重新执行后,就可以命中转译后备缓冲器,继续后续流程。

S507,比较数据高速缓存标签存储体,判断是否命中数据高速缓存,若是,则执行S508,若否,则执行S510。

通过标签比较,可以判断数据高速缓存是否命中。

S508,将待处理访存指令需要的命中路的数据放在访存结果寄存器低位,进行取数和存数指令相关判断和数据传递,对于不跨高速缓存行的待处理访存指令直接写回。

如果数据高速缓存命中,将待处理访存指令需要的命中路的数据放在访存结果寄存器低位,进行取数和存数指令相关判断和数据传递。对于不跨高速缓存行的指令直接写回。

S509,进入访存队列,将数据写入访存队列的数据项,对于跨高速缓存行的待处理访存指令,两个操作都将数据按地址高低顺序写入原访存指令项。

S510,进入访存队列,等待访问访存失效队列。

S511,访存失效队列访问下层存储系统,返回填充数据给访存队列和数据高速缓存,将待处理访存指令需要的数据写入访存队列项。

S512,待处理访存指令写回,提交后退出。

下面以几个具体的示例举例说明本申请实施例的方案。

图6为本申请实施例提供的一种待处理访存指令的访存地址划分示意图,如图6所示,待处理访存指令的访存地址包括标签、索引和缓存行内偏移,通过标签和索引能够判断是否命中数据高速缓存。处理器高速缓存行大小为512位(64字节),则512位高速缓存行对应的缓存行内偏移为地址的最低6位。

图7为本申请实施例提供的一种待处理访存指令的处理示意图一,如图7所示,待处理访存指令为一个非对齐地址访存指令,且不跨高速缓存行。

非对齐地址访存指令不跨高速缓存行时,非对齐地址访存指令访问n个字节,全部在同一个缓存行中。因此,不需要拆分成两个内部操作,只需要从原待处理访存指令的访存地址开始访问n个字节,放入寄存器开始的从0到n-1的n个字节位置即可,如图7所示,n为8。

图8为本申请实施例提供的一种待处理访存指令的处理示意图二,如图8所示,待处理访存指令为一个双字访存指令,例如0x407_1002地址上的双字取数操作,取64位(8字节)长整型数据,其最低6位地址为16进制0x02(二进制:000010,十进制:2),而取数宽度为双字。因为双字访问地址的最低3位不为全0,所以判断该待处理访存指令为非对齐地址访问指令,该待处理访存指令不跨高速缓存行,访问的8个字节全部在0x407_1002起始的高速缓存行中,如图8所示。

图9为本申请实施例提供的一种待处理访存指令的处理示意图三,如图9所示,待处理访存指令为非对齐地址访存指令,且跨高速缓存行。非对齐地址访问n个字节,在第一个高速缓存行的尾部有m个字节,在第二个高速缓存行有n-m字节。则拆分出的第二访存操作为从原待处理访存指令的访存地址开始,访问m个字节,放入寄存器开始的0到m-1字节位置。拆分出的第一访存操作为从下一个高速缓存行最低地址开始,访问n-m个字节,放入寄存器从m到n-1字节的位置。两个内部操作的结果在寄存器中拼合成一个n字节的数据,如图9所示,m为2,n为8。

图10为本申请实施例提供的一种待处理访存指令的处理示意图四,如图10所示,待处理访存指令为双字访问,如0x407_103e地址上的双字取数操作,取64位(8字节)长整型数据,其最低6位地址为16进制0x3e(二进制:111110,十进制:62),而取数宽度为双字。因为双字访问地址最低3位不为全0,所以可以确定待处理访存指令为非对齐地址访问,该待处理访存指令访存的内容2个字节在0x407_1000起始的高速缓存行的最后2个字节,剩下的6个字节在0x407_1040地址开始的高速缓存行的最开始6个字节,如图10所示。

由于非对齐地址访存指令的请求内容跨越了0x407_1000和0x407_1040高速缓存行的边界,因此需要拆分两个高速缓存行的内部访问操作,分别从0x407_1000和0x407_1040访问数据,拆分成两个内部操作,第二访存操作为从地址0x407_103e取两个字节数据,第一访存操作为从地址0x407_1040取6个字节数据,然后拼合两个操作所取的数据到同一个寄存器。访存指令的两次内部操作在访存队列中占同一队列项,写回寄存器也是将拼合好的数据一次写回。

图11为本申请实施例提供的一种待处理访存指令的处理示意图五,如图11所示,待处理访存指令为对齐地址访存指令,不存在跨高速缓存行的问题。待处理访存指令对齐地址访问n个字节,全部在同一个高速缓存行中。不需要将待处理访存指令拆分成两个内部操作,从原待处理访存指令的访存地址开始访问n个字节,放入寄存器开始从0到n-1的n个字节位置即可,如图11所示,n为8。

图12为本申请实施例提供的一种待处理访存指令的处理示意图六,如图12所示,待处理访存指令为双字访问,如0x407_1008地址上的双字取数操作,取64位(8字节)长整型数据,其最低6位地址为16进制0x08(二进制:001000,十进制:8),而取数宽度为双字。因为双字访问地址的最低3位全为0,所以可以确定待处理访存指令为对齐地址访问,如图12所示。

非对齐地址访存指令跨页的情况,一定是跨高速缓存行,拆分出的两个内部操作分别进行转译后备缓冲器的访问和进行转译后备缓冲器失效处理。

本申请实施例提供的非对齐地址访存指令的处理方法,将访存指令的数据统一放在寄存器低位,跨高速缓存行的非对齐地址访存指令分两个内部操作访问数据高速缓存和转译后备缓冲器,避免对不跨高速缓存行的访存指令进行拆分,对跨高速缓存行的指令最多也只需要拆分成两个内部操作,并且只需要按高速缓存行的边界进行拆分,不需要拆分成多条对齐地址的访存指令,拆分出的第二个内部操作的执行采用回滚执行的方法,加快处理器处理非对齐地址访存指令的速度,解决非对齐地址访存指令处理效率低的问题,从而提升处理器的性能,而且拆分出的第二个操作复用现有访存指令流水线,不需要增加额外的硬件开销。本申请实施例的方案,避免了软件陷入异常处理程序,同时也避免了拆分成多条对齐地址的访存指令来执行非对齐地址访存指令。

下面对本申请提供的非对齐地址访存指令的处理装置进行描述,下文描述的非对齐地址访存指令的处理装置与上文描述的非对齐地址访存指令的处理方法可相互对应参照。

图13为本申请实施例提供的非对齐地址访存指令的处理装置的结构示意图,如图13所示,该装置包括:

确定模块131,用于确定待处理访存指令是否为非对齐地址访存指令;

第一处理模块132,用于在所述待处理访存指令为非对齐地址访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的至少一个访存操作,各所述访存操作均为未跨高速缓存行的访存操作;

执行模块133,用于执行所述至少一个访存操作,得到所述至少一个访存操作对应的数据;

第二处理模块134,用于基于所述至少一个访存操作对应的数据,写回所述待处理访存指令。

在一种可能的实施方式中,所述第一处理模块132具体用于:

基于所述待处理访存指令的访存地址,确定所述待处理访存指令是否为跨高速缓存行的访存指令;

基于所述待处理访存指令是否为跨高速缓存行的访存指令,确定所述待处理访存指令对应的至少一个访存操作。

在一种可能的实施方式中,所述第一处理模块132具体用于:

在所述待处理访存指令为未跨高速缓存行的访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的目标访存操作;

在所述待处理访存指令为跨高速缓存行的访存指令的情况下,基于高速缓存行的边界对所述待处理访存指令的访存地址进行拆分,得到位于所述边界之前的第一访存地址和位于所述边界之后的第二访存地址;确定所述第一访存地址对应的第一访存操作和所述第二访存地址对应的第二访存操作。

在一种可能的实施方式中,所述执行模块133具体用于:

在所述至少一个访存操作包括所述目标访存操作的情况下,将所述目标访存操作确定为待处理访存操作,并执行第一过程;

在所述至少一个访存操作包括所述第一访存操作和所述第二访存操作的情况下,将所述第二访存操作确定为待处理访存操作,并执行所述第一过程;将所述第一访存操作回滚至发射队列后,确定为新的待处理访存操作,并执行所述第一过程;

其中,所述第一过程包括:

基于待处理访存操作对应的访存地址,确定所述待处理访存操作对应的物理地址;

在确定所述待处理访存操作对应的物理地址的情况下,确定所述待处理访存操作是否命中数据高速缓存;

基于所述待处理访存操作是否命中数据高速缓存,确定所述待处理访存操作对应的数据。

在一种可能的实施方式中,所述执行模块133具体用于:

确定所述待处理访存操作对应的访存地址是否命中转译后备缓冲器;

基于所述待处理访存操作对应的访存地址是否命中所述转译后备缓冲器,确定所述待处理访存操作对应的物理地址。

在一种可能的实施方式中,所述执行模块133具体用于:

确定所述待处理访存操作对应的访存地址是否命中一级转译后备缓冲器;

在所述待处理访存操作对应的访存地址命中所述一级转译后备缓冲器的情况下,从所述一级转译后备缓冲器中确定所述待处理访存操作对应的物理地址;

在所述待处理访存操作对应的访存地址未命中所述一级转译后备缓冲器的情况下,从二级转译后备缓冲器中确定所述待处理访存操作对应的物理地址。

在一种可能的实施方式中,所述执行模块133具体用于:

在所述待处理访存操作命中所述数据高速缓存的情况下,从所述数据高速缓存中确定所述待处理访存操作对应的数据;

在所述待处理访存操作未命中所述数据高速缓存的情况下,基于访存失效队列,从下层存储系统中确定所述待处理访存操作对应的数据。

在一种可能的实施方式中,所述第二处理模块134具体用于:

在所述至少一个访存操作包括所述目标访存操作的情况下,将所述目标访存操作对应的数据,写入所述待处理访存指令对应的队列项;

在所述至少一个访存操作包括所述第一访存操作和所述第二访存操作的情况下,将所述第一访存操作对应的数据和所述第二访存操作对应的数据进行合并处理,得到合并数据;将所述合并数据写入所述待处理访存指令对应的队列项。

在一种可能的实施方式中,所述确定模块131具体用于:

确定所述待处理访存指令的指令类型,所述指令类型包括双字访存指令、字访存指令、半字访存指令或者字节访存指令;

基于所述待处理访存指令的指令类型和所述待处理访存指令的访存地址,确定所述待处理访存指令是否为非对齐地址访存指令。

图14示例了一种电子设备的实体结构示意图,如图14所示,该电子设备可以包括:处理器(processor)1410、通信接口(Communications Interface)1420、存储器(memory)1430和通信总线1440,其中,处理器1410,通信接口1420,存储器1430通过通信总线1440完成相互间的通信。处理器1410可以调用存储器1430中的逻辑指令,以执行非对齐地址访存指令的处理方法,该方法包括:确定待处理访存指令是否为非对齐地址访存指令;在所述待处理访存指令为非对齐地址访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的至少一个访存操作,各所述访存操作均为未跨高速缓存行的访存操作;执行所述至少一个访存操作,得到所述至少一个访存操作对应的数据;基于所述至少一个访存操作对应的数据,写回所述待处理访存指令。

此外,上述的存储器1430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本申请还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的非对齐地址访存指令的处理方法,该方法包括:确定待处理访存指令是否为非对齐地址访存指令;在所述待处理访存指令为非对齐地址访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的至少一个访存操作,各所述访存操作均为未跨高速缓存行的访存操作;执行所述至少一个访存操作,得到所述至少一个访存操作对应的数据;基于所述至少一个访存操作对应的数据,写回所述待处理访存指令。

又一方面,本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的非对齐地址访存指令的处理方法,该方法包括:确定待处理访存指令是否为非对齐地址访存指令;在所述待处理访存指令为非对齐地址访存指令的情况下,基于所述待处理访存指令的访存地址,确定所述待处理访存指令对应的至少一个访存操作,各所述访存操作均为未跨高速缓存行的访存操作;执行所述至少一个访存操作,得到所述至少一个访存操作对应的数据;基于所述至少一个访存操作对应的数据,写回所述待处理访存指令。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

相关技术
  • 视网膜曝光方法、装置、电子设备及可读存储介质
  • 可弯曲电子设备、可弯曲电子设备的控制方法、装置及电子设备
  • 电子设备的显示控制方法、装置、电子设备和存储介质
  • 一种电子设备、双屏电子设备的控制方法及装置
  • 电子设备控制方法及装置、电子设备及存储介质
  • 双能曝光的控制方法、装置和电子设备
  • 双能曝光的切换控制方法、装置和电子设备
技术分类

06120116522817