一种基于内部前推的浮点融合乘加方法、装置及处理器的制造方法
【技术领域】
[0001]本发明涉及数字信号处理领域,具体涉及一种基于内部前推的浮点融合乘加方法、装置及处理器。
【背景技术】
[0002]融合乘加操作(FMA,Fused Multiply-add)是一种一步执行A+BXC类型的浮点乘加操作,是一种常见的算术运算操作,它只进行一次舍入。也就是说,非融合乘加操作先计算B X C的结果,将结果舍入到N个有效位,然后再把结果和A相加,最后再将相加后的结果舍入到N个有效位。而融合乘加操作是以全精度计算A+BXC的值,然后将最终的结果舍入到N个有效位。可见融合乘加操作相比于传统的通过浮点加法器和浮点乘法器联合起来进行浮点乘加操作,具有计算速度快、计算精度高等的优点。从而,目前融合乘加器在许多通用处理器中,如ARM、POWER、Itanium等,代替了浮点加法器和浮点乘法器,用于执行浮点加、减、乘、乘加等算术操作。另外,在GPU、DSP等领域,也获得了非常广泛的应用。
[0003]目前通常采用的融合乘加方法例如是IBM公司Power 6/7处理器的浮点部件中采用的方法,其工作原理是采用7级流水,如图1所示,支持第七阶段结果到第一阶段的数据前推(forwarding),和第六阶段结果到第一阶段的数据前推。其中第七阶段到第一阶段:将最终结果前推到下一条指令的操作数部分。第六阶段到第一阶段:将规格化还未舍入的结果前推到下一条指令的操作数部分。这种前推技术是将运算结果前推到浮点乘加器的入口处,在这种情况下,当出现数据相关的指令时仍旧需要等待几拍才能执行,容易引起流水线较长时间的阻塞,例如指令1执行操作:A2 =A1+B1XC1,紧随其后的指令2执行操作:A3=A2+B2XC2,即指令1和指令2发生了读后写相关(Read After Write,RAW)采用这种前推技术,从浮点乘加器计算出来的结果被前推到浮点乘加器的入口处,那么指令2仍旧会被阻塞(n-2)拍才可以进入流水线,η为浮点乘加器流水线级数,所以降低了融合乘加操作的执行速度。
【发明内容】
[0004]因此,本发明要解决的技术问题在于克服现有技术中的浮点融合乘加方法阻塞时间长、执行速度低的缺陷。
[0005]为此,本发明的一种基于内部前推的浮点融合乘加方法,包括如下步骤:
[0006]在第一级流水线中执行包括指数加比选操作和阵列乘法操作中的第一部分压缩操作,所述指数加比选操作包括当不存在第一前推值或第二前推值时,对加运算中加数的指数值、第一积运算中第一因数的指数值和所述第一积运算中第二因数的指数值进行指数加比选操作,产生对阶移位操作的第一控制信号,所述第一前推值为对阶移位操作产生的中间结果所对应的指数值,所述第二前推值为前导零操作产生的中间结果所对应的指数值,所述阵列乘法操作包括对所述第一因数的尾数值和所述第二因数的尾数值进行阵列乘法操作,分为所述第一部分压缩操作和第二部分压缩操作;
[0007]在第二级流水线中执行包括对阶移位操作和所述阵列乘法操作中的第二部分压缩操作,所述对阶移位操作包括当不存在第三前推值时,根据所述第一控制信号对所述加数的尾数值进行对阶移位操作并前推对阶移位操作产生的中间结果所对应的指数值,所述第三前推值为相加操作产生的中间结果;
[0008]在第三级流水线中执行包括前导零操作和相加操作,所述前导零操作包括当不存在第三前推值时,对所述对阶移位操作产生的中间结果和所述阵列乘法操作中的第二部分压缩操作产生的中间结果进行前导零操作并前推前导零操作产生的中间结果所对应的指数值,所述相加操作包括当不存在第三前推值时,对所述对阶移位操作产生的中间结果和所述阵列乘法操作中的第二部分压缩操作产生的中间结果进行相加操作并前推相加操作产生的中间结果;
[0009]在第四级流水线中执行包括第一规格化操作,所述第一规格化操作包括对所述相加操作产生的中间结果进行规格化操作;
[0010]在第五级流水线中执行包括舍入操作,所述舍入操作包括对所述第一规格化操作产生的中间结果进行舍入操作,产生浮点融合乘加结果值并输出。
[0011]优选地,所述指数加比选操作还包括当存在第一前推值和第二前推值时,对所述第一前推值、所述第二前推值、第二积运算中第三因数的指数值和所述第二积运算中第四因数的指数值进行指数加比选操作,产生对阶移位操作的第二控制信号。
[0012]优选地,所述当存在第一前推值和第二前推值时,对所述第一前推值、所述第二前推值、第二积运算中第三因数的指数值和所述第二积运算中第四因数的指数值进行指数加比选操作,产生对阶移位操作的第二控制信号的步骤包括:
[0013]当存在第一前推值和第二前推值时,对所述第一前推值、第二积运算中第三因数的指数值和所述第二积运算中第四因数的指数值进行第一次指数加比选操作,产生中间指数值;
[0014]对所述第二前推值和所述中间指数值进行第二次指数加比选操作,产生对阶移位操作的第二控制信号。
[0015]优选地,所述对阶移位操作还包括当存在第三前推值时,根据所述第二控制信号对所述相加操作产生的中间结果进行对阶移位操作并前推对阶移位操作产生的中间结果所对应的指数值。
[0016]优选地,在第二级流水线中执行还包括第二规格化操作,所述第二规格化操作包括当存在第三前推值时,对所述相加操作产生的中间结果进行规格化操作。
[0017]优选地,所述前导零操作还包括当存在第三前推值时,对所述第二规格化操作产生的中间结果和所述阵列乘法操作中的第二部分压缩操作产生的中间结果进行前导零操作并前推前导零操作产生的中间结果所对应的指数值;
[0018]所述相加操作还包括当存在第三前推值时,对所述第二规格化操作产生的中间结果和所述阵列乘法操作中的第二部分压缩操作产生的中间结果进行相加操作并前推相加操作产生的中间结果。
[0019]本发明的一种基于内部前推的浮点融合乘加装置,包括:
[0020]第一级单元,包括用于在第一级流水线中执行指数加比选操作的指数加比选单元和用于在第一级流水线中执行阵列乘法操作中的第一部分压缩操作的第一部分压缩单元,所述指数加比选单元包括第一指数加比选子单元,用于当不存在第一前推值或第二前推值时,对加运算中加数的指数值、第一积运算中第一因数的指数值和所述第一积运算中第二因数的指数值进行指数加比选操作,产生对阶移位操作的第一控制信号,所述第一前推值为对阶移位操作产生的中间结果所对应的指数值,所述第二前推值为前导零操作产生的中间结果所对应的指数值,所述阵列乘法操作包括对所述第一因数的尾数值和所述第二因数的尾数值进行阵列乘法操作,分为所述第一部分压缩操作和第二部分压缩操作;
[0021]第二级单元,包括用于在第二级流水线中执行对阶移位操作的对阶移位单元和用于在第二级流水线中执行所述阵列乘法操作中的第二部分压缩操作的第二部分压缩单元,所述对阶移位单元包括第一对阶移位子单元,用于当不存在第三前推值时,根据所述第一控制信号对所述加数的尾数值进行对阶移位操作并前推对阶移位操作产生的中间结果所对应的指数值,所述第三前推值为相加操作产生的中间结果;
[0022]第三级单元,包括用于在第三级流水线中执行前导零操作的前导零单元和用于在第三级流水线中执行相加操作的相加单元,所述前导零单元包括第一前导零子单元,用于当不存在第三前推值时,对所述对阶移位操作产生的中间结果和所述阵列乘法操作中的第二部分压缩操作产生的中间结果进行前导零操作并前推前导零操作产生的中间结果所对应的指数值,所述相加单元包括第一相加子单元,用于当不存在第三前推值时,对所述对阶移位操作产生的中间结果和所述阵列乘法操作中的第二部分压缩操作产生的中间结果进行相加操作并前推相加操作产生的中间结果;
[0023]第四级单元,包括用于在第四级流水线中执行第一规格化操作的第一规格化单元,所述第一规格化单元包括第一规格化子单元,用于对所述相加操作产生的中间结果进