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

基于操作数域复用的多操作数指令的处理方法及其装置

文献发布时间:2023-06-19 16:08:01



技术领域

本申请涉及计算机技术领域,尤其涉及一种基于操作数域复用的多操作数指令的处理方法及其装置。

背景技术

多操作数指令常用于对多个操作数执行一种或多种不同类型的操作,例如运算指令,运算指令的主要功能是实现算术加、减、乘、除等运算,通过对源操作数(sourceoperand,简称src)执行运算指令对应的运算得到指令的执行结果。其中浮点乘加FMA(fused multiply–add)指令将独立的浮点乘法和浮点加法运算融合为一种运算,浮点乘加指令包括乘加、乘减、负乘加、负乘减等操作,如src1*src2+src3、src1*src2-src3、-src1*src2+src3和-src1*src2-src3。

目前,对多操作数指令处理的效率已经成为处理器性能的重要指标,如何减少指令执行的延迟,提高多操作数指令的处理效率,成为亟待解决的问题。

发明内容

本申请旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本申请的第一个目的在于提出一种基于操作数域复用的多操作数指令的处理方法。

本申请的第二个目的在于提出一种基于操作数域复用的多操作数指令的处理装置。

本申请的第三个目的在于提出一种电子设备。

本申请的第四个目的在于提出一种计算机可读存储介质。

为达上述目的,本申请第一方面提出了一种基于操作数域复用的多操作数指令的处理方法,包括:获取多操作数指令,其中所述多操作数指令中包括N个候选操作,所述N为大于或等于2的正整数,所述N个候选操作中包括第一个操作和后续的目标操作,其中所述第一个操作对应的操作对象为所述多操作数指令内的操作数,所述目标操作对应的操作对象为所述多操作数指令内的操作数和中间执行结果,所述中间执行结果由在所述目标操作之前被执行的候选操作生成;按照所述候选操作的顺序执行所述多操作数指令,针对每一个所述目标操作,在所述目标操作对应的中间执行结果生成的过程中,监听所述目标操作对应的操作数是否准备就绪;若所述目标操作对应的操作数准备就绪且所述中间执行结果未生成,则将所述目标操作对应的操作数发送至所述当前执行阶段所在的流水线中,随当前执行阶段的操作在所述流水线中传输,以在所述中间执行结果生成后,由所述目标操作对应的功能部件对所述中间执行结果和所述目标操作对应的操作数执行所述目标操作;若所述目标操作对应的操作数未准备就绪且所述中间执行结果已生成,则将所述中间执行结果存储至空闲的操作数域,并继续监听所述目标操作对应的操作数以在所述目标操作对应的操作数准备就绪时,由所述目标操作对应的功能部件对所述中间执行结果和所述目标操作对应的操作数执行所述目标操作。

根据本申请的一个实施方式,所述监听所述目标操作对应的操作数是否准备就绪,包括:响应于通过生成所述中间执行结果的功能部件进行监听,所述监听在所述功能部件执行对应的候选操作的最后一个流水节拍结束或在所述最后一个流水节拍之前结束,所述候选操作用于生成所述中间执行结果。

根据本申请的一个实施方式,在所述按照所述候选操作的顺序执行所述多操作数指令之前,还包括:监听所述第一个操作对应的操作数是否准备就绪;响应于所述第一个操作对应的操作数已准备就绪,发送所述多操作数指令至指令执行流水线以执行所述第一个操作。

根据本申请的一个实施方式,在所述目标操作对应的操作数未准备就绪且所述中间执行结果已生成的情况下,所述由所述目标操作对应的功能部件对所述中间执行结果和所述目标操作对应的操作数执行所述目标操作之前,还包括:响应于监听到所述目标操作对应的操作数准备就绪,从所述空闲的操作数域中将所述中间执行结果取出,将所述中间执行结果和所述目标操作对应的操作数发送给所述目标操作对应的功能部件。

根据本申请的一个实施方式,所述将所述中间执行结果和所述目标操作对应的操作数发送给所述目标操作对应的功能部件,包括:识别所述目标操作对应的功能部件是否处于空闲状态,若所述目标操作对应的功能部件处于空闲状态,将所述中间执行结果和所述目标操作对应的操作数发送给所述目标操作对应的功能部件。

根据本申请的一个实施方式,所述空闲的操作数域位于保留站或寄存器堆中。

根据本申请的一个实施方式,监听所述多操作数指令内的任一操作数是否准备就绪,包括:对所述任一操作数对应的标志位进行监听,所述标志位存在于所述多操作数指令的状态标志位域;若所述任一操作数对应的标志位为第一设定值,则确定所述任一操作数准备就绪。

根据本申请的一个实施方式,监听所述多操作数指令内的任一操作数是否准备就绪,包括:监听指令的写回总线;判断监听到的指令是否为所述多操作数指令的相关指令,其中所述相关指令为多个候选指令中距离所述多操作数指令最近的候选指令,所述候选指令对应的目的寄存器号与所述任一操作数的寄存器号相同,且所述候选指令的程序串行执行序在所述多操作数指令之前;若所述监听到的指令为所述相关指令则确定所述任一操作数已准备就绪。

为达上述目的,本申请第二方面提出了一种基于操作数域复用的多操作数指令的处理装置,包括:获取模块,用于获取多操作数指令,其中所述多操作数指令中包括N个候选操作,所述N为大于或等于2的正整数,所述N个候选操作中包括第一个操作和后续的目标操作,其中所述第一个操作对应的操作对象为所述多操作数指令内的操作数,所述目标操作对应的操作对象为所述多操作数指令内的操作数和中间执行结果,所述中间执行结果由在所述目标操作之前被执行的候选操作生成;监听模块,用于按照所述候选操作的顺序执行所述多操作数指令,针对每一个所述目标操作,在所述目标操作对应的中间执行结果生成的过程中,监听所述目标操作对应的操作数是否准备就绪;发送模块,用于若所述目标操作对应的操作数准备就绪且所述中间执行结果未生成,则将所述目标操作对应的操作数发送至当前执行阶段所在的流水线中,随所述当前执行阶段的操作在所述流水线中传输,以在所述中间执行结果生成后,由所述目标操作对应的功能部件对所述中间执行结果和所述目标操作对应的操作数执行所述目标操作;存储模块,用于若所述目标操作对应的操作数未准备就绪且所述中间执行结果已生成,则将所述中间执行结果存储至空闲的操作数域,并继续监听所述目标操作对应的操作数以在所述目标操作对应的操作数准备就绪时,由所述目标操作对应的功能部件对所述中间执行结果和所述目标操作对应的操作数执行所述目标操作。

根据本申请的一个实施方式,所述监听模块进一步用于:响应于通过生成所述中间执行结果的功能部件进行监听,所述监听在所述功能部件执行对应的候选操作的最后一个流水节拍结束或在所述最后一个流水节拍之前结束,所述候选操作用于生成所述中间执行结果。

根据本申请的一个实施方式,所述监听模块还用于:监听所述第一个操作对应的操作数是否准备就绪;响应于所述第一个操作对应的操作数已准备就绪,发送所述多操作数指令至指令执行流水线以执行所述第一个操作。

根据本申请的一个实施方式,所述发送模块,还用于:响应于监听到所述目标操作对应的操作数准备就绪,从所述空闲的操作数域中将所述中间执行结果取出,将所述中间执行结果和所述目标操作对应的操作数发送给所述目标操作对应的功能部件。

根据本申请的一个实施方式,所述发送模块,进一步用于:识别所述目标操作对应的功能部件是否处于空闲状态,若所述目标操作对应的功能部件处于空闲状态,将所述中间执行结果和所述目标操作对应的操作数发送给所述目标操作对应的功能部件。

根据本申请的一个实施方式,所述空闲的操作数域位于保留站或寄存器堆中。

根据本申请的一个实施方式,所述监听模块进一步用于:对所述任一操作数对应的标志位进行监听,所述标志位存在于所述多操作数指令的状态标志位域;若所述任一操作数对应的标志位为第一设定值,则确定所述任一操作数准备就绪。

根据本申请的一个实施方式,所述监听模块,进一步用于:监听指令的写回总线;判断监听到的指令是否为所述多操作数指令的相关指令,其中所述相关指令为多个候选指令中距离所述多操作数指令最近的候选指令,所述候选指令对应的目的寄存器号与所述任一操作数的寄存器号相同,且所述候选指令的程序串行执行序在所述多操作数指令之前;若所述监听到的指令为所述相关指令则确定所述任一操作数已准备就绪。

为达上述目的,本申请第三方面提出了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时,实现如本申请第一方面所述的基于操作数域复用的多操作数指令的处理方法。

为达上述目的,本申请第四方面提出了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请第一方面所述的基于操作数域复用的多操作数指令的处理方法。

本申请实施例的基于操作数域复用的多操作数指令的处理方法,获取多操作数指令,其中多操作数指令中包括N个候选操作,N为大于或等于2的正整数,N个候选操作中包括第一个操作和后续的目标操作,其中第一个操作对应的操作对象为多操作数指令内的操作数,目标操作对应的操作对象为多操作数指令内的操作数和中间执行结果,该中间执行结果由在目标操作之前被执行的候选操作生成;按照候选操作的顺序执行多操作数指令,针对每一个目标操作,在目标操作对应的中间执行结果生成的过程中,监听目标操作对应的操作数是否准备就绪;若目标操作对应的操作数准备就绪且中间执行结果未生成,则将目标操作对应的操作数发送至当前执行阶段所在的流水线中,随当前执行阶段的操作在流水线中传输,以在中间执行结果生成后,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作;若目标操作对应的操作数未准备就绪且中间执行结果已生成,则将中间执行结果存储至空闲的操作数域,并继续监听目标操作对应的操作数以在目标操作对应的操作数准备就绪时,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作。此方法无需等待多操作数指令的全部操作数均准备就绪,便可以开始指令的执行,针对每一个目标操作,在该操作的操作对象(其他候选操作生成的中间执行结果)生成的过程中,监听另外的操作对象(该操作对应的操作数)是否准备就绪,若在该目标操作对应的中间执行结果生成后,由操作数构成的操作对象仍然未准备就绪,便将该中间执行结果存储至已经空闲的操作数域中,无需占用额外的存储空间,直至另外的操作对象准备就绪时,由目标操作对应的功能部件对该目标操作对应的操作对象执行该目标操作,避免因等待操作数占用流水线,从而降低指令执行的延迟,提高指令的处理效率。

附图说明

图1是根据本申请一示例性实施例示出的一种基于操作数域复用的多操作数指令的处理方法的流程图;

图2是根据本申请另一示例性实施例示出的一种基于操作数域复用的多操作数指令的处理方法的流程图;

图3是根据本申请另一示例性实施例示出的一种基于操作数域复用的多操作数指令的处理方法的流程图;

图4是根据本申请一示例性实施例示出的一种基于操作数域复用的多操作数指令的处理方法中发射队列的结构示意图;

图5是根据本申请一示例性实施例示出的一种基于操作数域复用的多操作数指令的处理方法中保留站的结构示意图;

图6是根据本申请一示例性实施例示出的一种基于操作数域复用的多操作数指令的处理装置的框图;

图7是根据本申请一示例性实施例的一种电子设备的结构示意图。

具体实施方式

下面详细描述本申请的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。

图1是根据本申请一示例性实施例示出的一种基于操作数域复用的多操作数指令的处理方法的流程图,如图1所示,该指令的处理方法包括以下步骤:

S101,获取多操作数指令,多操作数指令中包括N个候选操作,N为大于或等于2的正整数,N个候选操作中包括第一个操作和后续的目标操作。

本申请基于操作数域复用的多操作数指令的处理方法可应用于源操作数为多个的多操作数指令,如包含三个及以上操作数的浮点运算指令、定点运算指令、向量浮点指令、向量定点指令等多操作数指令。

从指令寄存器中获取多操作数指令,可以通过对该指令的多个操作数执行该指令对应的操作来实现指令执行的过程。本申请将对操作数的执行过程按照操作步骤划分为N个候选操作,N为大于或等于2的正整数。

作为一种实现方式,将N个候选操作中首先在流水线中执行的操作确定为第一个操作,将N个候选操作中除了第一个操作之外的后续候选操作确定为目标操作。需要说明的是,本申请实施例中的候选操作是根据执行步骤划分的,每个候选操作对应的操作类型可以相同也可以不同,例如,每一个候选操作均可为加减乘除中的任一种类型的操作或者运算以外的其他类型操作。

其中,第一个操作的操作对象为多操作指令的操作数,目标操作的操作对象为多操作指令的操作数和中间执行结果,该中间执行结果由除了该目标操作之外的其他候选操作生成。不难理解的,第一个操作对应的操作对象至少存在一个,例如移位操作;目标操作对应的操作对象至少存在2个,例如一个由在目标操作之前被执行的候选操作生成的中间执行结果和一个多操作数指令内的操作数,其中本申请所提到的操作数指的是多操作数指令的源操作数(source operand,简称src)。

举例说明,对于一个需要实现src1*src2+src3运算的多操作数指令,将实现src1*src2的操作确定为第一个操作,将实现src1*src2的乘法结果与操作数src3相加的操作确定为目标操作,其中,第一个操作的操作对象为操作数src1、操作数src2,目标操作的操作对象为由第一个操作生成的中间执行结果(src1*src2)和操作数src3。

S102,按照候选操作的顺序执行多操作数指令,针对每一个目标操作,在目标操作对应的中间执行结果生成的过程中,监听目标操作对应的操作数是否准备就绪。

基于候选操作的逻辑顺序或特定顺序执行指令,其中针对每一个目标操作,需要在由中间执行结果构成的操作对象的生成过程中,监听由操作数构成的操作对象是否准备就绪。

例如针对上一示例src1*src2+src3而言,在执行src1*src2的乘法操作后得到的中间执行结果作为目标操作的操作对象,在该中间执行结果生成的过程中(即在执行该示例中乘法操作的过程中)监听操作数src3是否准备就绪。

以浮点运算指令中的包含四操作数的浮点乘加(FMA)指令为例,浮点乘加(FMA)指令也可以称为浮点乘法累加指令,其用于执行乘加运算,例如:src1*src2+src3+src4,在执行该指令时需要实现三个候选操作,即一个乘法操作和两个加法操作,其中将乘法操作确定为第一个操作,两个加法操作确定为目标操作,操作数src1作为浮点乘数,操作数src2作为浮点被乘数,操作数src3和操作数src4作为浮点累加数,通过对四个操作数执行对应的候选操作完成对FMA指令的处理过程。

可以在操作数src1和操作数src2进入指令执行流水线,在第一个操作对应的功能部件(例如乘法部件)执行乘法操作的过程中,监听操作数src3是否准备就绪;在将对乘法操作得到的中间执行结果和操作数src3送至第一个目标操作对应的功能部件(例如加法部件)执行加法操作的过程中,监听操作数src4是否准备就绪。

不难理解的,上述任一操作数可以为当前多操作数指令的上一指令或更早的指令的执行结果,例如上一指令可以为累加指令,通过对累加指令对应的操作数执行累加操作得到上述任一操作数。再例如,上述任一操作数为比该多操作数指令更早的其他指令(比如取数(Load)指令、计算指令等)的执行结果,只要上述任一操作数的寄存器号是其他早于当前多操作数指令的目的操作数寄存器号,就存在相关,如果相关指令的结果未得出,则需要等待。因此需要判断操作数是否准备就绪,以便当前多操作数指令在对操作数执行操作时,能够在操作数准备就绪的情况下调取该操作数。

S103,若目标操作对应的操作数准备就绪且中间执行结果未生成,则将目标操作对应的操作数发送至当前执行阶段所在的流水线中,随当前执行阶段的操作在流水线中传输,以在中间执行结果生成后,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作。

在本申请实施例中,若在目标操作的操作对象(由其他候选操作生成的中间执行结果)生成的过程中,该目标操作的其他操作对象(操作数)准备就绪,可以将操作数发送至当前执行阶段所在的流水线中。例如,对FMA指令处理时,若操作数src1和操作数src2进行到浮点数阶码运算时,操作数src3准备就绪,则将src3送入该阶段所处的流水线,随当前执行阶段的操作一起在流水线中继续向下传输,在中间执行结果生成后,操作数src3和中间执行结果一起进入该目标操作对应的功能部件执行该目标操作。

S104,若目标操作对应的操作数未准备就绪且中间执行结果已生成,则将中间执行结果存储至空闲的操作数域,并继续监听目标操作对应的操作数以在目标操作对应的操作数准备就绪时,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作。

在本申请实施例中,若在目标操作的操作对象(由其他候选操作生成的中间执行结果)已生成时该目标操作对应的操作数未准备就绪,为避免流水线占用,可以将中间执行结果存储至空闲操作数域,等待该目标操作对应的操作数准备就绪。期间继续监听该目标操作对应的操作数是否准备就绪,在该目标操作对应的操作数准备就绪时,将该目标操作对应的操作数和中间执行结果送入该目标操作对应的功能部件执行该目标操作。

本申请实施例的基于操作数域复用的多操作数指令的处理方法,多操作数指令的N个候选操作中包括第一个操作和后续的目标操作,其中第一个操作对应的操作对象为多操作数指令内的操作数,目标操作对应的操作对象为多操作数指令内的操作数和中间执行结果,该中间执行结果由在目标操作之前被执行的候选操作生成,按照候选操作的顺序执行多操作数指令,针对每一个目标操作,在目标操作对应的中间执行结果生成的过程中,监听目标操作对应的操作数是否准备就绪,若目标操作对应的操作数准备就绪且中间执行结果未生成,则将目标操作对应的操作数发送至当前执行阶段所在的流水线中,随当前执行阶段的操作在流水线中传输,以在中间执行结果生成后,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作,若目标操作对应的操作数未准备就绪且中间执行结果已生成,则将中间执行结果存储至空闲的操作数域,并继续监听目标操作对应的操作数以在目标操作对应的操作数准备就绪时,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作。此方法无需等待操作数全部准备就绪,才开始执行指令。针对每一个目标操作,在该操作的操作对象(其他候选操作生成的中间执行结果)生成的过程中,监听另外的操作对象(该操作对应的操作数)是否准备就绪,若在该目标操作对应的中间执行结果生成后,由操作数构成的操作对象仍然未准备就绪,便将该中间执行结果存储至已经空闲的操作数域中,无需占用额外的存储空间,直至另外的操作对象准备就绪时,由目标操作对应的功能部件对目标操作对应的操作对象执行该目标操作,避免因等待操作数占用流水线,从而降低指令执行的延迟,提高指令的处理效率。

在一些实施例中,多操作数指令的候选操作中可以包括多个由操作数作为操作对象的候选操作,和由中间执行结果作为操作对像的候选操作。例如,针对一个包含四个操作数的多操作数指令,候选操作A对应两个操作数,候选操作B对应两个操作数,候选操作C对应的操作对象为候选操作A得到的中间执行结果和候选操作B得到的中间执行结果。在该指令执行时,可以在监听到候选操作A或候选操作B对应的操作数准备就绪时,发送该指令进入流水线执行候选操作A或候选操作B,同时监听另一操作的操作数是否准备就绪,在准备就绪时将操作数送入流水线执行对应的操作,期间可以将已经生成的中间执行结果存储至空闲的操作数域等待未准备就绪的操作数,或者进入流水线随正在执行的操作传输,直至候选操作C对应的操作对象均生成时,基于候选操作C对应的功能部件执行候选操作C。

在一些实施例中,保留站、寄存器堆和上述功能部件均可以实现监听目标操作对应的操作数是否准备就绪的过程,其中为避免增加延迟,对目标操作对应的操作数进行监听时,由功能部件(例如可以为生成该目标操作对应的中间执行结果的功能部件)实现的监听过程可以设定在该功能部件执行对应的候选操作的最后一个流水节拍结束或最后一个流水节拍之前结束。例如,目标操作的一个操作对象为候选操作A得到的中间执行结果,那么功能部件对操作数的监听过程可以在执行候选操作A的最后一个流水节拍时结束,或者在进入最后一个流水节拍之前结束监听,结束监听的具体时机可根据时序情况确定。

在图1所示实施例的基础上,如图2所示,本申请实施例在步骤S102中“按照候选操作的顺序执行多操作数指令”之前还包括以下步骤:

S201,监听第一个操作对应的操作数是否准备就绪。

本申请实施例在发送已获取的多操作数指令至指令执行流水线之前,监听第一个操作对应的操作数的状态,判断第一个操作对应的操作数是否准备就绪。

S202,响应于第一个操作对应的操作数已准备就绪,发送多操作数指令至指令执行流水线以执行第一个操作。

在本申请实施例中,响应于第一个操作对应的操作数已准备就绪,发送多操作数指令至流水线执行,无需等待全部操作数准备就绪,可以优先对第一个操作对应的操作数执行第一个操作。第一个操作得到的中间执行结果作为下一个目标操作的操作对象,在第一个操作执行的过程中,监听下一个目标操作对应的操作数是否准备就绪。

在一些实施例中,根据寄存器中指令的需求不同,获取操作数的位置也可以不同,例如在指令发送后根据寄存器号从寄存器堆中获取第一个操作对应的操作数,发送至流水线中执行;或者若在第一个操作对应的操作数准备就绪时,便根据发射队列中的寄存器号获取这些操作数,并将这些操作数存入保留站中对应的数据域,这种情况下可以从保留站中获取这些操作数,发送至流水线中执行。具体获取位置在此不做过多限定。

在本申请实施例中,第一个操作对应的操作数被送入流水线执行后,这些操作数的操作数域处于空闲状态,本申请将空闲的操作数域进行复用,用于存储多操作数指令的中间执行结果,以此避免占用缓存资源,同时也不会占用流水线影响其他指令在流水线中的执行。其中根据获取操作数的位置不同,空闲的操作数域可以位于保留站或寄存器堆中。

其中,根据操作数的大小和中间执行结果的大小可以选择复用的操作数域的个数。以三个操作数的浮点乘加指令为例,一个操作数域的大小为64位,两个操作数域相加的大小为128位,即第一个操作对应的两个操作数的数据域存在128位的存储空间,该128位的存储空间用于存储浮点乘加指令的中第一个操作得到得中间执行结果。

在一些实施例中,对浮点运算指令处理时,可以根据指令的中间执行结果是否为候选操作的执行结果经过规格化和舍入操作得到的,确定中间执行结果所需要的存储空间,以此确定将中间执行结果存储至一个空闲的操作数域或者多个空闲的操作数域。例如,对FMA指令处理时,乘法操作的执行结果未进行规格化和舍入,那么FMA指令的中间执行结果可以包括乘法操作的执行结果和舍入信息,将乘法操作的执行结果和舍入信息存储至保留站或寄存器堆中两个空闲的操作数域里。此外中间执行结果还可以为乘法操作的执行结果进行规格化和舍入后得到的数据,此时该中间执行结果只需一个空闲的操作数域便可存储,可以选择空闲的任一操作数域进行存储。

以向量浮点指令为例,一个操作数域为512位,两个操作数域相加的大小为1024位,其中一个操作数包括8个64bit,对两个操作数分别对应的8个64bit并行执行得到中间执行结果,该结果可以存储在两个空闲的操作数域中。

此外,对定点运算指令进行处理时,一个操作数域为64位,对两个操作数执行候选操作后得到的中间执行结果也是64位,可以将该中间执行结果存储到空闲的任一操作数域中。

再例如对带有掩码的向量指令处理,该向量指令可为3操作数指令,包括两个向量操作数和一个掩码操作数,也可以为4操作数指令,包括3个向量操作数和一个掩码操作数。RISC-V向量指令集的掩码操作(Mask Operation)将向量寄存器中的数据作为掩码数据进行与或非等操作。向量指令通过掩码操作实现条件执行,向量指令使用向量寄存器存储掩码。通过掩码,判断是否执行某个操作,从而为向量处理单元提供了条件执行的能力。其中可以通过访存/比较指令等方式得到掩码数据,存于向量寄存器中。掩码数据与普通向量数据的不同点在于掩码数据只有低位(Least Significant Bit)有效。通过本申请可以在RISC-V向量指令的掩码寄存器还没有准备好的情况下,先完成运算操作,当掩码准备好后,再根据掩码的值执行条件操作,即一个候选操作为运算操作,另一个候选操作为条件操作,掩码向量寄存器作为第三个操作数,当保存掩码的寄存器还没有准备好的情况下,也可以发射向量指令。

在一些实施例中,向量和向量之间的运算采用由vs2和vs1指定的向量寄存器组中的两个操作数向量进行计算,向量算术指令在vm字段下被掩码。如vs2和vs1为512位向量操作数,向量的每个元素为64位,每个向量有8个元素;掩码寄存器操作数vm为512位,其低8位有效,表示8个元素的掩码,vm的其余高位为0;vd为512位向量目的寄存器。

比如,指令vop.vv vd,vs2,vs1,vm,根据掩码vm的值,确定每个元素是运算后的结果,还是保留原值。

其中,vop操作可以是算数或逻辑运算等,如vadd(向量加法)、vsub(向量减)、vmadd(向量乘加)、vfadd(向量浮点加)、vfmadd(向量浮点乘加)等、vand(向量与)、vxor(向量异或)、vsll(向量左移)和vsrl(向量右移)等。

由此,本申请的基于数据域复用的多操作数指令处理方法除了可应用于多操作数的运算指令,还可应用于多操作数的非运算指令。

在本申请实施例中无需等待全部操作数准备就绪,优先将准备就绪的操作数送入指令执行流水线,执行对应的候选操作,在此过程中监听下一个目标操作对应的操作数,期间可以将候选操作得到的中间执行结果暂存至空闲的操作数域,等待下一个目标操作对应的操作数准备就绪。以此提高指令的处理效率。

在上述实施例的基础上,本申请实施例在步骤S104中“由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作之前,还包括:响应于监听到目标操作对应的操作数准备就绪,从空闲的操作数域中将中间执行结果取出,将中间执行结果和目标操作对应的操作数发送给目标操作对应的功能部件。

在本申请实施例中,当监听到目标操作对应的操作数准备就绪时,获取目标操作对应的操作数,并从存储有中间执行结果的操作数域中调取目标操作对应的中间执行结果。

其中,目标操作对应的操作数可以根据寄存器指令的需求从寄存器堆或者保留站中获取,此处不再赘述。

在一些实施例中,上述“将中间执行结果和目标操作对应的操作数发送给目标操作对应的功能部件”可以通过以下过程实现:识别目标操作对应的功能部件是否处于空闲状态,在目标操作对应的功能部件处于空闲状态的情况下,将中间执行结果和目标操作对应的操作数发送给目标操作对应的功能部件;在目标操作对应的功能部件处于占用状态时,不获取操作数和中间执行结果,等到功能部件处于空闲状态时再获取操作数和中间执行结果并发送至该功能部件。

例如,若目标操作对应的操作数准备就绪时,且目标操作对应的功能部件空闲,可以直接调取目标操作对应的中间执行结果发送至功能部件,并将目标操作对应的操作数送入功能部件,基于目标操作对应的操作数在目标操作对应的功能部件进行目标操作。

在上述实施例的基础上,如图3所示,本申请的基于操作数域复用的多操作数指令的处理方法还包括操作数是否准备就绪的监听过程,包括以下步骤:

S301,对任一操作数对应的标志位进行监听,标志位存在于多操作数指令的状态标志位域。

如图4所示,包含三个操作数的多操作数指令被存放在发射队列中时,发射队列包括操作数对应的寄存器号域(如上述操作数src1对应的寄存器号域、操作数src2对应的寄存器号域和操作数src3对应的寄存器号域)和状态标志位域(例如ready域)等域,状态标志位域中的三个bit位(即与三个操作数对应的三个标志位)用于标志操作数是否准备就绪,每一个标志位对应一位操作数。本申请通过对该状态标志位域中任一操作数对应的标志位进行监听,以判断操作数是否准备就绪。

图5为保留站的结构示意图,除包括与发射队列中同样的操作数对应的寄存器号域和状态标志位域等域外,还包括操作数对应的数据域(即操作数域)例如操作数src1对应的数据域data-src1域、操作数src2对应的数据域data-src2域和操作数src3对应的数据域data-src3域。

需要说明的是,状态标志位域中操作数对应的bit位的数值通过流水线根据该操作数对应的指令的处理状态进行更新,例如对操作数A执行左移指令得到操作数B,那么根据左移指令是否执行结束(即是否得到操作数B)来更新ready域中的数值。

S302,若任一操作数对应的标志位为第一设定值,则确定任一操作数准备就绪。

在本申请实施例中,设定第一设定值表示操作数准备就绪,如图4或5所示,设定1为第一设定值,即当操作数src1的标志位为1时,表示操作数src1已准备就绪,当操作数src2的标志位为1时,表示操作数src2已准备就绪,当操作数src3的标志位为1时,表示操作数src3已准备就绪。

作为一种可行的实施方式,还可以通过写回总线监听的方式对任一操作数的状态进行监听,判断其是否准备就绪,其具体过程如下:

监听指令的写回总线;判断监听到的指令是否为多操作数指令的相关指令,其中相关指令为多个候选指令中距离多操作数指令最近的候选指令。其中候选指令对应的目的寄存器号与上述多操作数指令的任一操作数的寄存器号相同(例如针对包含三个操作数的指令而言,与操作数src1的寄存器号相同或与操作数src2的寄存器号相同或与操作数src3的寄存器号相同),且该候选指令的程序串行执行序在上述多操作数指令之前;若监听到的指令为相关指令则确定任一操作数已准备就绪。

例如,在执行一程序对应的多条指令时,这些指令中包括多操作数指令,从这些指令中确定与该多操作数指令存在相关的指令,例如指令1、指令2、指令3和指令4的程序串行执行序在该多操作数指令之前,若指令1和指令3的目的寄存器号与该多操作数指令的操作数src1的寄存器号相同那么指令1和指令3可被看作候选指令,在这两个候选指令中指令3距离该多操作指令最近,则将指令3确定为该多操作数指令的相关指令。在执行程序对应的多条指令时,监听指令的写回总线,对监听到的一条或多条写回的指令进行判断,判断这些指令中是否存在指令3,若存在,则可认为操作数src1准备就绪。其中上述程序串行执行序对应于程序顺序执行的序,对应的,距离多操作数指令最近即为基于程序序而言距离多操作数指令最近。

此外,在具体实施中,若在一个候选操作对应的操作数准备就绪时,其他候选操作对应的操作数也准备就绪,那么这些操作数可以一起进入流水线传输;或者,待一个候选操作执行结束,再将下一个候选操作对应的操作数送入对应的功能部件与该操作的其他操作对象(由其他操作生成的中间执行结果)一起执行该操作;或者,将下一个候选操作对应的操作数存储至寄存器堆或保留站中等待该操作对应的中间执行结果,待该操作对应的中间执行结果生成后,再执行该操作。综上,本申请将指令的中间执行结果存在保留站或寄存器堆内,不会占用流水线,也不会影响后续指令在流水线中的正常运行。此时仅需等下一候选指令对应的操作数准备就绪后,继续做执行该操作即可,不会因为等待全部操作数准备就绪,而造成延迟,可以有效地降低处理器中指令的处理时间,提高处理器的性能。

图6是根据本申请一示例性实施例示出的一种基于操作数域复用的多操作数指令的处理装置的框图,如图6所示,该处理装置500,包括:获取模块501、监听模块502、发送模块503和存储模块504。

获取模块501,用于获取多操作数指令,其中多操作数指令中包括N个候选操作,N为大于或等于2的正整数,N个候选操作中包括第一个操作和后续的目标操作,其中第一个操作对应的操作对象为多操作数指令内的操作数,目标操作对应的操作对象为多操作数指令内的操作数和中间执行结果,中间执行结果由在目标操作之前被执行的候选操作生成。

监听模块502,用于按照候选操作的顺序执行多操作数指令,针对每一个目标操作,在目标操作对应的中间执行结果生成的过程中,监听目标操作对应的操作数是否准备就绪。

发送模块503,用于若目标操作对应的操作数准备就绪且中间执行结果未生成,则将目标操作对应的操作数发送至当前执行阶段所在的流水线中,随当前执行阶段的操作在流水线中传输,以在中间执行结果生成后,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作。

存储模块504,用于若目标操作对应的操作数未准备就绪且中间执行结果已生成,则将中间执行结果存储至空闲的操作数域,并继续监听目标操作对应的操作数以在目标操作对应的操作数准备就绪时,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作。

在本申请实施例中,监听模块502进一步用于:响应于通过生成所述中间执行结果的功能部件进行监听,所述监听在所述功能部件执行对应的候选操作的最后一个流水节拍结束或在最后一个流水节拍之前结束,候选操作用于生成中间执行结果。

在本申请实施例中,监听模块502还用于:监听第一个操作对应的操作数是否准备就绪;响应于第一个操作对应的操作数已准备就绪,发送多操作数指令至指令执行流水线以执行第一个操作。

在本申请实施例中,发送模块503,还可用于:响应于监听到目标操作对应的操作数准备就绪,从空闲的操作数域中将中间执行结果取出,将中间执行结果和目标操作对应的操作数发送给目标操作对应的功能部件。

在本申请实施例中,发送模块503,进一步可用于:识别目标操作对应的功能部件是否处于空闲状态,若目标操作对应的功能部件处于空闲状态,将中间执行结果和目标操作对应的操作数发送给目标操作对应的功能部件。

在本申请实施例中,空闲的操作数域位于保留站或寄存器堆中。

在本申请实施例中,监听模块502进一步用于:对任一操作数对应的标志位进行监听,标志位存在于多操作数指令的状态标志位域;若任一操作数对应的标志位为第一设定值,则确定任一操作数准备就绪。

在本申请实施例中,监听模块502,进一步用于:监听指令的写回总线;判断监听到的指令是否为多操作数指令的相关指令,其中相关指令为多个候选指令中距离多操作数指令最近的候选指令,候选指令对应的目的寄存器号与任一操作数的寄存器号相同,且候选指令的程序串行执行序在多操作数指令之前;若监听到的指令为相关指令则确定任一操作数已准备就绪。

需要说明的是,上述对基于操作数域复用的多操作数指令的处理方法实施例的解释说明,也适用于本申请实施例的基于操作数域复用的多操作数指令的处理装置,具体过程此处不再赘述。

本申请实施例的基于操作数域复用的多操作数指令的处理装置,多操作数指令的N个候选操作中包括第一个操作和后续的目标操作,其中第一个操作对应的操作对象为多操作数指令内的操作数,目标操作对应的操作对象为多操作数指令的内操作数和中间执行结果,该中间执行结果由在目标操作之前被执行的候选操作生成,按照候选操作的顺序执行多操作数指令,针对每一个目标操作,在目标操作对应的中间执行结果生成的过程中,监听目标操作对应的操作数是否准备就绪,若目标操作对应的操作数准备就绪且中间执行结果未生成,则将目标操作对应的操作数发送至当前执行阶段所在的流水线中,随当前执行阶段的操作在流水线中传输,以在中间执行结果生成后,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作,若目标操作对应的操作数未准备就绪且中间执行结果已生成,则将中间执行结果存储至空闲的操作数域,并继续监听目标操作对应的操作数以在目标操作对应的操作数准备就绪时,由目标操作对应的功能部件对中间执行结果和目标操作对应的操作数执行目标操作。此方法无需等待操作数全部准备就绪,才开始执行指令。针对每一个目标操作,在该操作的操作对象(其他候选操作生成的中间执行结果)生成的过程中,监听另外的操作对象(该操作对应的操作数)是否准备就绪,若在该目标操作对应的中间执行结果生成后,由操作数构成的操作对象仍然未准备就绪,便将该中间执行结果存储至已经空闲的操作数域中,无需占用额外的存储空间,直至另外的操作对象准备就绪时,由目标操作对应的功能部件对目标操作对应的操作对象执行该目标操作,避免因等待操作数占用流水线,从而降低指令执行的延迟,提高指令的处理效率。

为了实现上述实施例,本申请实施例还提出一种电子设备600,如图7所示,该电子设备600具体可包括:存储器601、处理器602及存储在存储器601上并可在处理器602上运行的计算机程序,处理器602执行程序时,实现如上述实施例所示的基于操作数域复用的多操作数指令的处理方法。

为了实现上述实施例,本申请实施例还提出一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行,以实现如上述实施例所示的多操作数指令的处理方法。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

相关技术
  • 基于操作数域复用的多操作数指令的处理方法及其装置
  • 一种断言寄存器操作数指令的实现方法和装置
技术分类

06120114714687