浮点向量乘加运算装置和方法转让专利

申请号 : CN200910241614.8

文献号 : CN101706712B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡伟武陈云霁朱海涛

申请人 : 北京龙芯中科技术服务中心有限公司

摘要 :

本发明公开一种浮点向量乘加运算装置和方法。该装置包括一个乘数选择单元,n个乘法单元,n个加法单元;乘数选择单元,用于根据第四源操作数的值m,选择第二源操作数浮点向量的第m+1部分输出到n个乘法单元;其中,m≤n-1;乘法单元,用于将所选择的第二源操作数浮点向量的第m+1部分与第三源操作数浮点向量的n个部分分别进行相乘操作,并将相乘操作的运算结果输出到相应的n个加法单元;加法单元,用于将相乘操作运算结果的n个部分和第一源操作数浮点向量的n个部分分别进行加法操作,得到乘加结果。其可以省去浮点向量运算中的shuffle移位指令,减少程序长度,提高微处理器在执行乘加运算时的运算效率和速度。

权利要求 :

1.一种浮点向量乘加运算装置,其特征在于,包括一个乘数选择单元,n个乘法单元,n个加法单元;

乘数选择单元,用于根据第四源操作数的值m,选择第二源操作数浮点向量的第m+1部分输出到n个乘法单元;其中,m≤n-1;

乘法单元,用于将所选择的第二源操作数浮点向量的第m+1部分与第三源操作数浮点向量的n个部分分别进行相乘操作,并将相乘操作的运算结果输出到相应的n个加法单元;

加法单元,用于将相乘操作的运算结果和第一源操作数浮点向量的n个部分分别进行加法操作,得到乘加结果;

其中,所述第一源操作数浮点向量,第二源操作数浮点向量和第三源操作数浮点向量存放在寄存器中,第四源操作数为立即数;所述乘加结果存入所述第一源操作数所在的寄存器,即第一源操作数为目的操作数。

2.根据权利要求1所述的浮点向量乘加运算装置,其特征在于,所述第四源操作数的值选择第二源操作数浮点向量的相应部分,为:当第四源操作数的值为0时,选择第二源操作数浮点向量的第一部分;当第四源操作数的值为1时,选择第二源操作数浮点向量的第二部分;……;当第四源操作数为n-1时,选择第二源操作数浮点向量的第n部分。

3.根据权利要求1或2所述的浮点向量乘加运算装置,其特征在于,所述乘数选择单元为一个多路选择器。

4.根据权利要求1或2所述的浮点向量乘加运算装置,其特征在于,所述乘法单元由多个并行的乘法子单元构成。

5.根据权利要求1或2所述的浮点向量乘加运算装置,其特征在于,所述加法单元由多个并行的加法子单元构成。

6.一种浮点向量乘加运算装置的处理方法,其特征在于,包括如下步骤:

步骤A,将进行浮点向量乘加运算的具有n个部分浮点向量加数存放在浮点向量乘加运算装置的第一源操作数寄存器中;

将进行浮点向量乘加运算的具有n个部分的浮点向量乘数存放在浮点向量乘加运算装置的第二源操作数寄存器中;

将进行浮点向量乘加运算的具有n个部分的浮点向量被乘数存放在浮点向量乘加运算装置的第三源操作数寄存器中;

将所述第二源操作数寄存器中参与乘加运算的乘数的位置号,存放在浮点向量乘加运算装置的第四源操作数中;所述第四源操作数是立即数m;

步骤B,根据所述第四源操作数的值m,所述浮点向量乘加运算装置的乘数选择单元选择所述第二源操作数寄存器中具有n个部分的第二源操作数浮点向量的第m+1部分输出到浮点向量乘加运算装置的n个乘法单元;

并将所述第三源操作数寄存器中具有n个部分的第三源操作数浮点向量输出到相应的浮点向量乘加运算装置的n个乘法单元;其中,m≤n-1;

步骤C,所述浮点向量乘加运算装置的乘法单元将所选择的所述第二源操作数浮点向量的n个部分与所述第三源操作数浮点向量的n个部分分别进行相乘操作,并将相乘操作的运算结果输出到相应的所述浮点向量乘加运算装置的n个加法单元;

步骤D,所述浮点向量乘加运算装置的加法单元将所述乘法单元相乘操作的运算结果和所述第一源操作数寄存器中的第一源操作数浮点向量的n个部分分别进行加法操作,得到乘加结果。

7.根据权利要求6所述的浮点向量乘加运算装置的处理方法,其特征在于,所述步骤B中,根据所述第四源操作数的值m,所述浮点向量乘加运算装置的乘数选择单元选择所述第二源操作数寄存器中具有n个部分的第二源操作数浮点向量的第m+1部分输出到浮点向量乘加运算装置的n个乘法单元;具体包括如下步骤:当第四源操作数的值为0时,所述浮点向量乘加运算装置的乘数选择单元选择第二源操作数浮点向量的第1部分输出到浮点向量乘加运算装置的n个乘法单元;

当第四源操作数的值为1时,所述浮点向量乘加运算装置的乘数选择单元选择第二源操作数浮点向量的第2部分输出到浮点向量乘加运算装置的n个乘法单元;……;

当第四源操作数为n-1时,所述浮点向量乘加运算装置的乘数选择单元选择第二源操作数浮点向量的第n部分输出到浮点向量乘加运算装置的n个乘法单元。

说明书 :

浮点向量乘加运算装置和方法

技术领域

[0001] 本发明涉及微处理器中的运算部件设计技术领域,特别是涉及一种浮点向量乘加运算装置和方法。

背景技术

[0002] 在微处理器中,浮点向量乘加部件的应用极大的提高了浮点运算速度。
[0003] 浮点向量乘加部件通过浮点向量乘加指令,将一个浮点操作数A0和浮点向量(B0,B1,……Bn-1)相乘,将其乘积累加到第三个浮点向量(C0,C1,……Cn-1),即:
[0004] (C0,C1,……Cn-1)=(C0,C1,……Cn-1)+A0*(B0,B1,……Bn-1)[0005] 其中,各浮点操作数存放在相应的寄存器中。
[0006] 浮点向量部件一种很重要的应用就是进行图1中a所示的矩阵运算。
[0007] 在现有的技术中,图1中的矩阵运算是通过shuffle指令和向量乘加指令组合使用来完成的。设A0,A1,……An-1已经按次序存放在寄存器REG_A中,B0,B1,……Bn-1存放在寄存器REG_B中,C00,C01,……C0(n-1)存放在寄存器REG_C0中,C10,C11,……C1(n-1)存放在寄存器REG_C1中,……,C(n-1)0,C(n-1)1,……C(n-1)(n-1)存放在寄存器REG_C(n-1)中。
[0008] 首先,向量乘加指令进行(C00,C01,……C0(n-1))+=A0*(B0,B1,……Bn-1)的运算,如图1中b所示。然后shuffle指令对向量(A0,A1,……An-1)进行移位,得到(A1,……An-1,0),接下来向量乘加指令进行(C10,C11,……C1(n-1))+=A1*(B0,B1,……Bn-1)的运算,如图1中c所示;……;shuffle指令对向量(An-2,An-1,……0)进行移位,得到(An-1,0,……0),然后向量指令进行(C(n-1)0,C(n-1)1,…“…C(n-1)(n-1))+=A(n-1)*(B0,B1,……Bn-1)的运算,如图1中d所示。
[0009] 由此可以看出,使用现有技术,每执行两条指令(一条移位指令,一条运算指令)才能完成一次向量乘加操作,效率很低。

发明内容

[0010] 本发明的目的在于提供一种浮点向量乘加运算装置和方法,克服现有技术中的缺陷,把shuffle移位指令和向量乘加指令融合成一条新的向量乘加指令,省去在进行浮点向量运算时的移位指令,减少程序长度,提高微处理器在执行向量乘加运算时的运算效率和速度。
[0011] 为了实现所述目的,本发明提供一种浮点向量乘加运算装置,包括一个乘数选择单元,n个乘法单元,n个加法单元;
[0012] 乘数选择单元,用于根据第四源操作数的值m,选择第二源操作数浮点向量的第m+1部分输出到n个乘法单元;其中,m≤n-1;
[0013] 乘法单元,用于将所选择的第二源操作数浮点向量的第m+1部分与第三源操作数浮点向量的n个部分分别进行相乘操作,并将相乘操作的运算结果输出到相应的n个加法单元;
[0014] 加法单元,用于将相乘操作的运算结果的n个部分和第一源操作数浮点向量的n个部分分别进行加法操作,得到乘加结果;
[0015] 其中,所述第一源操作数浮点向量,第二源操作数浮点向量和第三源操作数浮点向量存放在寄存器中,第四源操作数为立即数;所述乘加结果存入所述第一源操作数所在的寄存器,即第一源操作数为目的操作数。
[0016] 为实现本发明目的还提供一种浮点向量乘加运算装置的处理方法,包括如下步骤:
[0017] 步骤A,将进行浮点向量乘加运算的具有n个部分浮点向量加数存放在浮点向量乘加运算装置的第一源操作数寄存器中;
[0018] 将进行浮点向量乘加运算的具有n个部分的浮点向量乘数存放在浮点向量乘加运算装置的第二源操作数寄存器中;
[0019] 将进行浮点向量乘加运算的具有n个部分的浮点向量被乘数存放在浮点向量乘加运算装置的第三源操作数寄存器中;
[0020] 将所述第二源操作数寄存器中参与乘加运算的乘数的位置号,存放在浮点向量乘加运算装置的第四源操作数中;所述第四源操作数是立即数m;
[0021] 步骤B,根据所述第四源操作数的值m,所述浮点向量乘加运算装置的乘数选择单元选择所述第二源操作数寄存器中具有n个部分的第二源操作数浮点向量的第m+1部分输出到浮点向量乘加运算装置的n个乘法单元;
[0022] 并将所述第三源操作数寄存器中具有n个部分的第三源操作数浮点向量输出到相应的浮点向量乘加运算装置的n个乘法单元;其中,m≤n-1;
[0023] 步骤C,所述浮点向量乘加运算装置的乘法单元将所选择的所述第二源操作数浮点向量的n个部分与所述第三源操作数浮点向量的n个部分分别进行相乘操作,并将相乘操作的运算结果输出到相应的所述浮点向量乘加运算装置的n个加法单元;
[0024] 步骤D,所述浮点向量乘加运算装置的加法单元将所述乘法单元相乘操作的运算结果和所述第一源操作数寄存器中的第一源操作数浮点向量的n个部分分别进行加法操作,得到乘加结果。
[0025] 本发明的有益效果:使用本发明的浮点向量乘加运算装置和方法,仅需要在向量乘加指令中通过第四源操作数指定乘数,避免了现有技术中每执行完一条向量乘加指令,就要通过一条shuffle移位指令重新设置乘数的缺陷,减少了程序长度,提高了运算效率和速度。

附图说明

[0026] 图1是使用现有技术进行浮点向量乘加运算的示意图;
[0027] 图2是本发明实施例的浮点向量乘加运算装置结构示意图;
[0028] 图3是本发明实施例的浮点向量乘加运算装置的处理方法流程图;
[0029] 图4是本发明实施例的浮点向量乘加指令执行的示意图;
[0030] 图5是本发明实施例中浮点向量乘加运算矩阵示意图;
[0031] 图6是本发明实施例中用浮点向量乘加运算指令实现图5矩阵乘法的伪代码示意图。
[0032] 图7是使用现有技术计算图5中矩阵运算的伪代码示意图。

具体实施方式

[0033] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的浮点向量乘加运算装置和方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明而不是对本发明的限制。
[0034] 本发明实施例的浮点向量乘加运算装置融合了现有向量乘加运算方法中的shuffle部件和向量乘加部件,当向量乘加指令中第四源操作数为0时,执行C=C+A0*B的运算;当第四源操作数为1时,执行C=C+A1*B的运算;……;当第四源操作数为n-1时,执行C=C+A(n-1)*B的运算。避免了现有技术中必需通过shuffle指令对向量A进行移位来设置乘数。
[0035] 如图2所示,为本发明实施例的浮点向量乘加运算装置结构示意图。该装置实现的功能是:
[0036] 目的操作数<-第一源操作数+第二源操作数某一部分(由第四源操作数选择)*第三源操作数。
[0037] 该装置包括一乘数选择单元1,n个乘法单元2,n个加法单元3。
[0038] 乘数选择单元1,用于根据第四源操作数的值m,选择第二源操作数浮点向量的第m+1部分输出到n个乘法单元2;
[0039] 其中,m≤n-1。
[0040] 当第四源操作数的值为0时,选择第二源操作数浮点向量的第一部分;当第四源操作数的值为1时,选择第二源操作数浮点向量的第二部分;……;当第四源操作数为n-1时,选择第二源操作数浮点向量的第n部分。
[0041] 乘法单元2,用于将所选择的第二源操作数浮点向量的第m+1部分与第三源操作数浮点向量的n个部分分别进行相乘操作,并将相乘操作的运算结果输出到相应的n个加法单元3。
[0042] 加法单元3,用于将相乘操作的运算结果的n个部分和第一源操作数浮点向量的n个部分分别进行加法操作,得到乘加结果。
[0043] 所述第一源操作数浮点向量,第二源操作数浮点向量和第三源操作数浮点向量存放在寄存器中,所述第四源操作数为立即数;
[0044] 所述加法操作的结果作为整个乘加运算的最后结果,保存在第一源操作数中,即将加法操作的结果存入所述第一源操作数存放寄存器的相应位置,即第一源操作数为目的操作数。
[0045] 较佳地,所述乘数选择单元1为一个多路选择器。
[0046] 较佳地,所述乘法单元2由多个并行的乘法子单元构成。
[0047] 较佳地,所述加法单元3由多个并行的加法子单元构成。
[0048] 基于图2所示的浮点向量乘加运算装置,图3示出本发明实施例的浮点向量乘加运算装置的处理方法的流程图,所述浮点向量乘加运算装置的处理方法包括如下步骤:
[0049] 步骤S100,将具有n个加数的浮点向量存放在第一源操作数寄存器中,具有n个乘数的浮点向量存放在第二源操作数寄存器中,具有n个被乘数的浮点向量存放在第三源操作数寄存器中,把将要参与运算的乘数在第二源操作数寄存器中的位置号,存放在第四源操作数中。
[0050] 步骤S200,根据第四源操作数的值m,选择具有n个部分的第二源操作数浮点向量的第m+1部分作为乘数输出到n个乘法单元2;第三源操作数浮点向量输出到相应的n个乘法单元2;其中,m≤n-1。
[0051] 步骤S300,将所选择的第二源操作数浮点向量的第m+1部分与第三源操作数浮点向量的n个部分分别进行相乘操作,并将相乘操作的运算结果输出到相应的n个加法单元3。
[0052] 步骤S400,把第一源操作数寄存器中的n个加数输出到相应的加法单元3,当步骤S300中的乘法运算结果输入到加法单元3之后,进行加法运算,加法运算的结果作为整个乘加运算的最后结果,保存在第一源操作数中。
[0053] 作为一种可实施方式,所述方法可以以计算机向量乘加指令的方式实现,如图4所示,为本发明实施例的浮点向量乘加指令执行的示意图。所述乘加指令的格式为:操作码第一源操作数(目的操作数),第二源操作数,第三源操作数,第四源操作数。所述乘加指令用于实现如下功能:
[0054] 目的操作数<-第一源操作数+第二源操作数某一部分(由第四源操作数选择)*第三源操作数。
[0055] 其中,第一源操作数,第二源操作数和第三源操作数存放在寄存器中,第四操作数为立即数,所述第一源操作数为目的操作数。
[0056] 下边以一个实施例方式来说明使用本发明浮点向量乘加运算装置的处理方法的过程。设寄存器长度为256bit,每个数据元素为8字节的双精度数。以图5所示的矩阵乘法为例,设A0,A1,A2,A3已经按次序存放在寄存器REG_A中,B0,B1,B2,B3存放在寄存器REG_B中,C00,C01,C02,C03存放在寄存器REG_C0中,C10,C11,C12,C13存放在寄存器REG_C1中,C20,C21,C22,C23存放在寄存器REG C2中,C30,C31,C32,C33存放在寄存器REG_C3中。图6为使用本发明的浮点向量乘加运算方法进行运算的伪代码。
[0057] 在第一步骤中,第四源操作数的值为0,此时乘数选择单元1选择第二源操作数REG_A中的A0,然后A0与第三源操作数REG_B中的B0,B1,B2,B3同时进行乘法运算,运算结果输出到四个加法单元3,分别与第一源操作数REG_C0中的C00,C01,C02,C03进行加法运算,最后结果保存在第一源操作数REG_C0中。
[0058] 在第二步骤中,第四源操作数的值为1,此时乘数选择单元1选择第二源操作数REG_A中的A1,然后A1与第三源操作数REG_B中的B0,B1,B2,B3同时进行乘法运算,运算结果输出到四个加法单元3,分别与第一源操作数REG_C1中的C10,C11,C12,C13进行加法运算,最后结果保存在第一源操作数REG_C1中。
[0059] 在第三步骤中,第四源操作数的值为2,此时乘数选择单元1选择第二源操作数REG_A中的A2,然后A2与第三源操作数REG_B中的B0,B1,B2,B3同时进行乘法运算,运算结果输出到四个加法单元3,分别与第一源操作数REG_C2中的C20,C21,C22,C23进行加法运算,最后结果保存在第一源操作数REG_C2中。
[0060] 在第四步骤中,第四源操作数的值为3,此时乘数选择单元1选择第二源操作数REG_A中的A3,然后A3与第三源操作数REG_B中的B0,B1,B2,B3同时进行乘法运算,运算结果输出到四个加法单元3,分别与第一源操作数REG_C3中的C30,C31,C32,C33进行加法运算,最后结果保存在第一源操作数REG_C3中。
[0061] 经过四个步骤,寄存器REG_C0,REG_C1,REG_C2,REG_C3中保存的值即为最终结果。图7是使用现有技术计算图5中矩阵运算的伪代码示意图,与图6比较可以看出,本发明的效率远高于现有技术。
[0062] 使用本发明实施例的浮点向量乘加运算装置和方法,当进行图1中所示类型的运算时,把向量(A0,A1,……An-1)存放在第二源操作数中,然后只需执行连续的n条向量乘加指令即可。其中,n条指令中第四源操作数的值分别0,1,……n-1,用来指定每条指令中所使用的乘数。避免了现有技术中,每执行完一条向量乘加指令,就要执行一条shuffle移位指令重新设置乘数的缺陷,减少了程序长度,提高了运算效率和速度。
[0063] 最后应当说明的是,很显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型。