CN101770355B - 兼容双精度和双单精度的浮点乘加器及其兼容处理方法 - Google Patents
兼容双精度和双单精度的浮点乘加器及其兼容处理方法 Download PDFInfo
- Publication number
- CN101770355B CN101770355B CN201010108026XA CN201010108026A CN101770355B CN 101770355 B CN101770355 B CN 101770355B CN 201010108026X A CN201010108026X A CN 201010108026XA CN 201010108026 A CN201010108026 A CN 201010108026A CN 101770355 B CN101770355 B CN 101770355B
- Authority
- CN
- China
- Prior art keywords
- precision
- double
- result
- tree
- precisions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开一种兼容双精度和双单精度浮点乘加器及其兼容处理方法。该浮点乘加器包括乘法树、移位器、LZA、LOD和加法器,这些部件既可以分别对2个单精度进行运算也可以对一个双精度的操作进行运算。都尽可能的分为2段或者对输入数据进行兼容处理,以满足支持双单精度并行处理的目的。以上技术保证了在尽量不增加或者少增加双精度浮点乘加部件面积的情况下能够兼容双单精度的运算,从而在较小的面积开销下提高了浮点乘加器的单精度运算的性能。
Description
技术领域
本发明涉及微处理器处理技术领域,特别是涉及一种兼容单精度和双单精度的浮点乘加器及其浮点乘加兼容计算处理方法。
背景技术
现有微处理器中,为了提高浮点计算的效率,通常使用浮点乘加器(Multiply-Add Fused)来实现连续的浮点乘法和加法操作(表示为A×B+C)。与单独的浮点乘法器和加法器相比,采用浮点乘加器既降低了连续执行乘法和加法的延迟,又减小了硬件开销,同时提高乘加运算的精度。这是因为若采用乘法器与加法器来实现乘加操作,需要在乘法完成后进行一次舍入和规格化操作,此后再将乘法的结果作为操作数之一送入到加法器执行,但是采用乘加单元进行乘法操作时会保留完全精度的乘法结果,只在最后进行一次舍入和规格化,从而保证了精度。
作为处理器中浮点运算的关键部件,现有技术中提出了多种方案来降低浮点乘加器的延迟以提高系统性能。参考浮点乘加器的设计,在Floating-PointFused Multiply-Add:Reduced latency for Floating-Point Addition,Proc.of 17th IEEE Symposium on Computer Arithmetic,pp.42-51,2005中提出了将乘加器划分为两条FAR和CLOSE路径的方法。这种方法根据C与A×B的指数差(表示为d)来划分不同的路径。其相对于传统乘加器能在一定程度上降低延迟。
对于浮点操作数格式及其异常操作的处理,IEEE754有详细的规定。IEEE754标准规定了单精度(32位)、双精度(64位)的格式及invalid(V)、divide by zero(Z)、overflow(0)、underflow(U)和inexact(I)5种异常处理。其中单精度和双精度的格式如表1(1、2)所示。考虑到双精度数是64位,正好是两个单精度数的长度,在有些指令集中,例如MIPS指令集,还设置pair single操作,使得既可以执行双单精度运算,如表1(3)所示,也可以同时对两对单精度进行运算。
(1)单精度浮点
1位 | 11位 | 52位 |
(2)双精度浮点
1位 | 8位 | 23位 | 1位 | 8位 | 23位 |
(3)双单精度浮点
如何在提高性能的同时降低面积开销成为浮点乘加器设计的一个关键性的问题。现有技术中要么增加大量的面积开销来降低浮点乘加器的时延,要么为了提高单精度的性能,支持双单精度的操作而增加浮点乘加器的时延。尽量复用双精度浮点乘加器的硬件降低硬件开销一直是浮点乘加器设计的一个难题。
发明内容
本发明的目的在于提供一种兼容双精度和双单精度的浮点乘加器及其兼容处理方法,以克服现有技术中的缺陷,在尽量复用双精度通路的硬件的情况下,兼容双精度及双单精度浮点乘加运算,达到在尽量增加少量面积和时延的情况下,提高浮点乘加器的性能。
为实现本发明双单精度和双精度兼容的目的,本发明中提出了一种兼容双精度和双单精度的浮点乘加器,采用双通路算法,包括双单精度和双精度复用乘法树,4:2压缩复合树,第一选择器,同时,在CLOSE路径中,包括56位宽复用对齐移位器,57位复用3:2压缩树,108位复用LZA,57位复用加法器和取反加法器,108位复用LOD,108位复用选择电路以及108位复用规格化移位器,这些部件都能在双单精度运算时复用;在FAR路径中,包括106位复用对齐移位器,取反电路,107位复用半加器,其也都能在双单精度运算时复用,即或者能够计算2个单精度的乘加操作,或者能够计算1个双精度的操作。其中:
双单精度和双精度复用乘法树,用于对A×B乘法结果进行压缩,其包括一X:2的压缩树和一(27-X):2的压缩树(双精度操作采用基2布斯编码将产生27个部分积),分别对应进行双单精度操作时的低部分单精度数和高部分单精度数的A×B乘法结果的部分积压缩,得到压缩的结果;
4:2压缩复合树,用于在双精度操作中,将所述双单精度和双精度复用乘法树输出的四个结果相加复合得到真正的双精度的乘法结果;而在双单精度操作中,将所述双单精度和双精度复用乘法树中的X:2压缩树复合得到低部分单精度数的单精度乘法结果,(27-X):2压缩树复合得到高部分单精度数的单精度乘法结果;
第一选择器,用于根据双单精度操作类型或者双精度操作类型,从所述4:2压缩复合树的输出中,选择相应的操作数作为后续操作的输入,进行双单精度操作或者双精度操作。
所述56位宽复用对齐移位器,在CLOSE路径上对A×B和C进行对齐移位。为了实现双单精度数的复用,需要对输入的尾数进行选择;对于双精度操作,全部位宽用于填充56位双精度数的移位,对于双单精度操作,用于填充两个单精度的27位数,中间空0.
所述57位复用3:2压缩树,将移位并取反后的操作数C和乘法树结果sum和carry进行压缩,得到两个数。为了实现双单精度数的复用,需要对输入进行选择;对于双精度操作,全部位宽用于57位数的压缩计算,对于双单精度操作,用于处理两个单精度的28位数的压缩计算.
所述108位复用LZA,对A×B+C结果的前导0位置进行预编码。为了实现双单精度的复用,需要对输入进行选择;对于双精度数,输入到LZA的是57位3:2复用压缩树的两个输出(sum和carry)与乘法树输出的低51位拼接而成的108位。对于单精度数,双单精度操作各需要50位(28位+22位),highLZA对应到高部分单精度数single2,lowLZA对应到低部分单精度数single1,都放置在对应部分的高位,低位补0即可。
57位复用加法器和取反加法器,对57位3:2压缩树的SUM和CARRY进行全加操作,为了实现双单精度的复用,将其分解成为2个双加器1、2及两个取反双加器3、4;对于双精度操作而言,由双加器1、2得到57位加法的结果,由取反双加器3、4得到57位取反相加的结果;对于双单精度操作而言,由双加器1得到高部分单精度加法结果,由取反双加器3得到高部分单精度取反相加的结果,由双加器2得到低部分单精度加法结果,由取反双加器4得到低部分单精度取反相加的结果。
108位复用LOD,计算108位复用LZA预编码得到结果的前导1位置。为了实现双单精度的复用,将其分解为1个57位的LOD和1个51位的LOD;对于双精度操作而言,由两者共同得到108位结果预编码的前导1位置。对于双单精度操作,57位LOD给出高部分单精度的前导1位置,51位LOD给出低部分单精度的前导1位置。
108位选择电路,根据符号检测电路选择出乘加结果的尾数,并根据操作类型选择后续规格化移位器的输入。
108位复用规格化移位器,用于对乘加结果进行规格化移位。为了实现双单精度的复用,将其分解为1个57位的规格化移位器和1个51位的规格化移位器;对于双精度操作,两者共同完成108位宽的规格化移位,对于双单精度操作,由57位规格化移位器完成高部分单精度的移位,由51位规格化移位器完成低部分单精度的移位。
106位复用对齐移位器,用于在FAR路径上根据指数差d对A×B或者C进行对齐移位。为了实现双单精度的复用,将其分解为1个55位的对齐移位器和1个51位的对齐移位器;对于双精度操作,由两者共同完成106位数据的对齐移位。对于双单精度操作,由55位对齐移位器完成高部分单精度的移位,由所述51位对齐移位器完成低部分单精度的移位。
所述107位复用半加器,对移位取反后的数和不需进行移位的数据进行半加。为了实现双单精度的复用,需要对输入进行选择;对于双精度操作,全部位宽用于处理107位数据,对于双单精度数,用于处理两个49位数,中间空9位0。
为实现本发明目的还提供一种浮点乘加处理方法,包括下列步骤:
步骤S100,在第一拍中,双单精度和双精度复用乘法树对A×B乘法结果进行压缩,其包括一X:2的压缩树和一(27-X):2的压缩树,分别对应进行双单精度操作时的低部分单精度数和高部分单精度数的A×B乘法结果的部分积的压缩,得到的压缩结果;
步骤S200,在第二拍中,如果是双精度操作,则4:2压缩复合树将所述双单精度和双精度复用乘法树输出的四个结果相加复合得到真正的双精度的乘法结果;如果是双单精度操作,则4:2压缩复合树将所述双单精度和双精度复用乘法树中的X:2压缩树复合得到低部分单精度数的单精度乘法结果,(27-X):2压缩树复合得到高部分单精度数的单精度乘法结果;
步骤S300,第一选择器根据双单精度操作类型或者双精度操作类型,从所述4:2压缩复合树的输出中,选择相应的操作数作为后续操作的输入,进行双单精度操作或者双精度操作。
本发明的有益效果体现在以下两方面:
(一)面积开销:本发明的浮点乘加器及其浮点乘加处理方法,尽量复用了双精度的硬件结构,与仅进行双精度运算的双通路浮点乘加结构相比,所增加的单元主要是一些选择器用于选择不同输入,以及在第4拍中单、双精度分开的舍入和规格化单元,考虑到大比特的移位器所占的面积很大,本发明将所有的移位器都实现了复用,使得在增加很少面积开销的情况下能够兼容双精度和双单精度的浮点乘加运算;
(二)时延开销:本发明的浮点乘加器及其浮点乘加处理方法,为了实现双精度和双单精度兼容的目标,一些选择器必不可少,但是增加的选择器所带来的时延仍在可接受范围之内,使得执行双精度操作和双单精度操作所需的时延都是4拍,提高了单精度产出率的同时并未降低双精度的时延;
附图说明
图1是本发明实施例浮点乘加器结构示意图;
图2是双单精度编码填充单元数据填充方式示意图;
图3是56位宽复用对齐移位器5的数据填充方式示意图;
图4是57位3:2复用压缩树6的数据填充方式示意图;
图5是108位复用LZA的数据填充方式示意图;
图6是57位复用双加法器和取反加法器结构示意图;
图7是51位加法器和补码器的数据填充方式示意图;
图8是55位加法器和补码器的数据填充方式示意图;
图9是108位复用LOD的结构示意图;
图10是108位选择电路的结构示意图;
图11是108位复用规格化移位器的数据填充方式和结构示意图;
图12是双精度操作时106位复用对齐移位器的输入数据填充方式示意图;
图13是双单精度时106位复用对齐移位器的输入数据填充方式示意图;
图14是106位复用对齐移位器的结构示意图;
图15是107位复用半加器的数据填充方式示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的浮点乘加器及其浮点乘加处理方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明而不是对本发明的限制。
为了降低浮点乘加器的延迟,本发明实施例中的浮点乘加器采用双通路算法,在双通路算法的基础上,对2个通路进行双精度和双单精度运算进行复用。
所述双通路算法是根据浮点乘加的据操作数A的指数、操作数B的指数和操作数C的指数计算指数差d1=exp(A)-(exp(B)+exp(C)-1023)的值,当d=0或者d=1或者d=2或者d=-1,而且做有效减法时,乘加运算通过CLOSE路径进行运算;否则乘加运算通过FAR路径进行运算。
本发明实施例针对双通路浮点乘加器,为了进一步降低浮点乘加单元的延迟,同时使得双单精度运算能够尽量多地复用双精度运算的单元,从而尽量少地减少因兼容而带来的面积开销,提出了一种兼容双精度和双单精度的浮点乘加部件,使得在4拍的情况下既可以得到一个双精度的乘加结果,同时也可以得到两个单精度的乘加结果。
本发明实施例的浮点乘加器,如图1所示,其尽量复用双精度单元,实现双精度与双单精度兼容,其包括:双单精度和双精度复用乘法树2,4:2压缩复合树3,第一选择器4,56位宽复用对齐移位器5,57位复用3:2压缩树6,108位复用LZA7,57位复用加法器和取反加法器8,108位复用LOD11,108位选择电路13,108位复用规格化移位器14,106位复用对齐移位器15,取反电路16,107位复用半加器17,其中:
所述双单精度和双精度复用乘法树2,用于对A×B乘法结果进行压缩,其包括一14:2的压缩树和一13:2的压缩树,分别对应进行低部分单精度数single1和高部分单精度数single2的A×B乘法结果的部分积的压缩,得到的压缩结果表示为sum和carry的形式,分别为sum1,carry1和sum2,carry2;
在双单精度运算时,2个压缩树分别对应了2个单精度的乘法树;在双精度运算时,这两个压缩树的结果经过4:2压缩复合树3得到双精度的乘法树的压缩结果;
所述4:2压缩复合树3,用于在双精度操作中,将所述双单精度和双精度复用乘法树输出的四个结果相加复合得到真正的双精度的乘法结果;而在双单精度操作中,将所述双单精度和双精度复用乘法树中的X:2(作为一种可实施方式,本实施中X=14)压缩树复合得到低部分单精度数的单精度乘法结果,(27-X):2(作为一种可实施方式,本实施中27-X=13)压缩树复合得到高部分单精度数的单精度乘法结果;
所述第一选择器4,用于根据双单精度操作类型或者双精度操作类型,从4:2压缩复合树3的输出中,选择相应的操作数作为后续操作的输入,进行双单精度操作或者双精度操作。
所述56位宽复用对齐移位器5,在CLOSE路径上对A×B和C的结果进行对齐移位。为了实现双单精度数的复用,需要对输入的尾数进行选择,其输入填充方式如图3所示。对于双精度操作,其全部位宽用于填充56位双精度数的移位;对于双单精度操作,其用于填充两个单精度的27位数,中间空0。
所述57位复用3:2压缩树6,将移位并取反后的操作数C和乘法树结果sum和carry进行压缩,得到两个数。为了实现双单精度数的复用,需要对输入进行选择,如图4所示。其对于双精度操作,全部位宽用于57位数的压缩计算;其对于双单精度操作,用于处理两个单精度的28位数的压缩计算.
所述108位复用LZA7,对A×B+C结果的前导0位置进行预编码。为了实现双单精度的复用,需要对输入进行选择,输入如图5所示。其对于双精度数,输入到LZA的是57位3:2复用压缩树6的两个输出(sum和carry)与乘法树输出的低51位拼接而成的108位;其对于单精度数,双单精度操作各需要50位(28位+22位),highLZA对应到高部分单精度数single2,lowLZA对应到低部分单精度数single1,都放置在对应部分的高位,低位补0即可。
所述57位复用加法器和取反加法器8,对57位3:2复用压缩树6的SUM和CARRY进行全加操作,为了实现双单精度的复用,其分解成为2个双加器A、B及两个取反双加器C、D,如图6所示。其对于双精度操作而言,由双加器A、B得到57位加法的结果,由取反双加器C、D得到57位取反相加的结果;其对于双单精度操作而言,由双加器A得到高部分单精度加法结果,由取反双加器C得到高部分单精度取反相加的结果,由双加器B得到低部分单精度加法结果,由取反双加器D得到低部分单精度取反相加的结果。
所述108位复用LOD11,计算LZA预编码得到结果的前导0位置。为了实现双单精度的复用,其分解为1个57位的LOD和1个51位的LOD,如图9所示。其对于双精度操作而言,由两者共同得到108位结果预编码的前导1位置;其对于双单精度操作,57位LOD给出高部分单精度的前导1位置,51位LOD给出低部分单精度的前导1位置。
所述108位选择电路13,根据符号检测电路12选择出乘加结果的尾数,并根据操作类型选择后续108位复用规格化移位器14的输入,其具体结构如图10所示。
所述108位复用规格化移位器14,用于对乘加结果进行规格化移位。为了实现双单精度的复用,其分解为1个57位宽规格化移位器和1个51位宽规格化移位器,其结构及数据填充方式如图11所示。其对于双精度操作,两者共同完成108位宽的规格化移位;其对于双单精度操作,由57位宽规格化移位器完成高部分单精度的移位,由51位宽规格化移位器完成低部分单精度的移位。
所述106位复用对齐移位器15,用于在FAR路径上根据指数差d对A×B或者C进行对齐移位。为了实现双单精度的复用,其分解为1个55位的对齐移位器和1个51位的对齐移位器,其结构如图14所示。其对于双精度操作,由两者共同完成106位数据的对齐移位;其对于双单精度操作,由55位对齐移位器完成高部分单精度的移位,由低51位对齐移位器完成低部分单精度的移位。
所述取反电路16,在进行减法操作时,对移位后的数据进行取反操作。
所述107位复用半加器17,对移位取反后的数和不需进行移位的数据进行半加。为了实现双单精度的复用,需要对输入进行选择,输入如图15所示。其对于双精度操作,全部位宽用于处理107位数据;其对于双单精度数,用于处理两个49位数,中间空9位0。
更佳地,所述浮点乘加器,更包括第一双精度舍入和规格化单元19、第一高部分单精度数舍入和规格化单元20、第一低部分单精度数舍入和规格化单元21,第二双精度舍入和规格化单元23、第二高部分单精度数舍入和规格化单元24、第二低部分单精度数舍入和规格化单元25,分别用于根据双单精度操作类型或者双精度操作类型,进行相应的舍入和规格化操作,以及第二选择器22,第三选择器26,第四选择器27。其中:
第一双精度舍入和规格化单元19,用于在CLOSE路径上,在进行双精度操作时,对双精度操作数进行舍入和规格化操作;
第二双精度舍入和规格化单元23,用于在FAR路径上,在进行双精度操作时,对双精度操作数进行舍入和规格化操作;
第一高部分单精度数舍入和规格化单元20,用于在CLOSE路径上,在进行双单精度操作时,对高部分单精度操作数进行舍入和规格化操作;
第二高部分单精度数舍入和规格化单元24,用于在FAR路径上,在进行双单精度操作时,对高部分单精度操作数进行舍入和规格化操作;
第一低部分单精度数舍入和规格化单元21,用于在CLOSE路径上,在进行双单精度操作时,对低部分单精度操作数进行舍入和规格化操作;
第二低部分单精度数舍入和规格化单元25,用于在FAR路径上,在进行双单精度操作时,对低部分单精度操作数进行舍入和规格化操作;
第二选择器22,用于在CLOSE路径上,根据双单精度操作类型或者双精度操作类型,选择相应路径上的输出结果;
第三选择器26,用于在FAR路径上,根据双单精度操作类型或者双精度操作类型,选择相应路径上的输出结果;
第四选择器27,用于根据第二选择器22和第三选择器26所选择的不同路径输出一个双精度的结果,或者是两个单精度的结果。
下面结合现有技术,以一种可实施方式,详细说明本发明实施例的浮点乘加器。本发明实施例的浮点乘加器中的四拍流水逻辑处理,分别为:
第一个流水拍中,双单精度编码填充单元及布斯编码器1,使得两个长度为24×2位单精度尾数,填充为双精度所使用的53位的单元,从而两者共用一个基2的布斯编码器;
对于双精度数,将53位的尾数通过基2布斯编码编成27个数;对于双单精度数,24位的尾数通过基2布斯编码编成12个数,因此可以复用双单精度编码填充单元1,其数据填充方式如图2所示;
双单精度和双精度复用乘法树2,双精度数经过编码后有27个数,本来需要一个27:2的压缩树对A×B乘法结果进行压缩,但为了实现与双单精度兼容的目标,则将27:2的压缩树分割为2个压缩树,一个为14:2的压缩树,另一个是13:2的压缩树,分别对应低部分单精度数single1和高部分单精度数single2的部分积,得到的结果表示为sum和carry的形式,分别为sum1,carry1和sum2,carry2;
第二个流水拍中,对于双精度数,由于在第一拍中拆成了两个压缩树,在这里需要通过4:2压缩复合树3将sum1、carry1、sum2和carry2组合起来得到真正双精度的部分积,表示为MUL_d105_0PP_S和MUL_d105_0PP_C。
第一选择器4根据双单精度操作类型或者双精度操作类型,从所述4:2压缩复合树3的输出中,选择相应的操作数作为后续操作的输入,进行双单精度操作或者双精度操作。
第一选择器4根据操作类型从压缩树的输出中选择相应的数作为后续57位3:2复用压缩树6、108位复用LZA7、51位加法器和补码器9、55位加法器和补码器10等的输入。
56位宽复用对齐移位器5,该移位器对操作数C,根据C与A×B的指数差d进行移位,双精度数正好需要56位宽,对于双单精度数各需要27位,其填充方法如图3所示,中间空2位0。
57位3:2复用压缩树6将移位并取反后的操作数C和由选择器4选择出来的乘法结果sum和carry进行压缩,得到两个数。对于双精度数,输入的操作数C需要扩充1位符号位,所以是57位,而对于A×B(共106位)而言只需取高55位作为输入,这是因为其低51位只需要将对应的sum和carry相加,操作数C的该部分全为0,不需要进行压缩。对于双单精度数,同样需要进行1位的符号位扩充,这样各需要28位,其填充方法如图4所示,中间空出的第28位1位bit设置为1,这是为了在后面将高29位相加时,产生一个向bit
29的进位,对应到高部分单精度数single2的操作数C取反加1的值(这是因为前面C只取反,并未进行加1操作)。对于低部分单精度数single1以及双倍(double)的操作数C的取反加1的值,只需要在压缩树6的输出的carry的最低位加上1即可实现。
为了在得到加法的结果后能够立刻进行左移规格化操作,本发明实施例采用108位复用前导0预测(LZA)单元7对A×B+C结果的前导0位置进行预编码。对于双精度数,输入到LZA的是57位3:2复用压缩树6的两个输出(sum和carry)与乘法树输出的低51位拼接而成的108位。对于单精度数,需要对该LZA进行复用,如图5所示,双单精度操作各需要50位(28位+22位),highLZA对应到高部分单精度数single2,lowLZA对应到低部分单精度数single1,都放置在对应部分的高位,低位补0即可;
57位复用双加法器和取反双加法器,其结构如图6所示,可以分成29位双加法器A,28位双加法器B,29位取反双加法器C及28位取反双加法器D,其中:
29位的双加法器A和28位的双加法器B,如果是双单精度操作,对于高部分单精度数single2,29位的双加法器A取57位复用压缩树6输出sum和carry的高29位作为输入,对于低部分单精度数single1,28位的双加法器B取57位复用压缩树6输出sum和carry的低28位作为输入。这样对于双精度操作,将两部分拼合起来就能得到57位的sum和carry相加的结果。同理,对于双单精度操作,29位的取反双加法器C和28位的取反双加法器D得到对应的单精度数的取反相加的结果。两者结合起来得到双精度的高57位的sum和carry的取反相加的结果;
51位加法器和补码器9是CLOSE和FAR路径共用的,如果是双精度操作,其输入正好对应到乘法树输出的sum和carry的低51位,因此得到低51位相加的结果及向高55位的进位。如果是双单精度操作,其输入对应到低部分单精度数single1的全部48位的sum和carry,如图7所示,都放置在低位;此外,对于CLOSE路径,如果是双精度操作,这里还提供了低51位的相加取补的结果及向高55位的进位,对于双单精度操作,这里还提供了single1的低22位的相加取补的结果及向高28位的进位。
55位加法器和补码器10同样是CLOSE和FAR路径共用的,如果是双精度操作,其输入正好对应到乘法树输出的sum和carry的高55位,同时要根据低51位的进位来进行加法运算。如果是双单精度操作,其输入对应到高部分单精度数single2的全部48位的sum和carry,如图8所示,都放置在低位;此外,对于CLOSE路径,如果是双单精度操作,这里还需要提供高部分单精度数single2的低22位的相加取补的结果及向高28位的进位。
值得注意的是,以上需要进行复用的57位3:2压缩树6、108位复用LZA7、51位加法器和补码器9、55位加法器和补码器10的输入都是通过第一选择器4来选择完成的;
第三个流水拍中,108位复用LOD11对第二拍中108位复用LZA7所编码的数的首1位置进行检测,其结构如图9所示,可以分解成为一个57位LOD和一个51位LOD,其中:
57位LOD给出A×B+C高57位的首1的位置,而51位LOD给出其低51位的首1的位置,对于双精度操作,移位量由两者共同决定,当高57位都为0时,此时按照51位LOD给出的移位量进行移位,否则根据57位LOD的结果对108位的数进行移位,具体移位量由选择器给出,传递给108位复用规格化移位器14;对于双单精度操作,高部分单精度数single2的移位量由57位LOD决定,低部分单精度数single1的移位量由51位LOD决定,其输入分别对应位HighLZA和LowLZA。此时具体移位量由其中选择器传递给108位复用规格化移位器;
108位宽复用规格化移位器14,根据所述108位复用LOD11得到的移位量对乘加结果进行规格化移位,其输入数据填充方式和结构如图11所示,可以分解成为一个57位宽的规格化移位器和一个51位宽的规格化移位器,其中:
对于双精度数正好需要108位宽的规格化移位器,可由其中57位宽规格化移位器和51位宽规格化移位器共同完成;而双单精度数的高部分单精度数single2可以由其中57位宽规格化移位器来完成移位,低部分单精度数single1可以由其中51位宽规格化移位器来完成移位,移位前的填充方法如图11所示;
所述图11中的复用规格化移位器的输入是由108位复用选择电路13来完成的,其结构如图10所示。根据符号检测单元12的结果(取反信号),将选择第2拍流水中出来的加法结果(符号为正时)或者加法取补的结果(符号为负时)。其中对于双精度操作,高57位是57位复用加法器和取反加法器8的结果,低51位是51位加法器和补码器9的结果;对于双单精度操作,高部分单精度数single2的高28位是57位复用加法器和取反加法器8中的29位双加器或者29位取补双加器的结果,其低22位是51位加法器和补码器9的低22位,低部分单精度数single1的高28位是57位复用加法器和取反加法器8中的28位双加器或者28位取补双加器的结果,低22位是55位加法器和补码器10中的补码器的低22位。同时,对于双精度操作,为了与LOD检测的结果相对应,该108位复用选择电路还给出57位选择电路和51位选择电路两个选择器,若高57位都为0,则将低51位结果送给后续的108位规格化移位器进行移位,这是由其中的两个选择器来完成的。
在FAR路径上,对于双精度数最多需要106位的对齐移位器来完成对阶操作,为了实现复用,这里采用了106位复用对齐移位器15,其结构如图14所示,可以分解成为一个51位对齐移位器和一个55位对齐移位器,其中:
如果是双精度操作时,由这两个移位器共同完成A×B或者C的移位,即:55位对齐移位器和51位对齐移位器的输入由其中的51位选择电路和55位选择电路来确定,由于进行的是右移操作,55位对齐移位器与51位对齐移位器同时进行右移,55位对齐移位器移出的部分填入到51位对齐移位器的高位,具体的输入是其中的选择电路来选择的,其填充方式如图12所示;
如果是双单精度操作时,其中的55位对齐移位器完成高部分单精度数single2的移位,其中当d>0时需要移A×B,最大的移位量为26位,当d<0时需要移C,最大的移位量为48位,都可由55位的对齐移位器来完成。而其中的51位对齐移位器完成低部分单精度数single1的移位,同理,当d>0时需要移A×B,最大的移位量为26位,当d<0时需要移C,最大的移位量为48位。双单精度时,其中的55位对齐移位器和51位对齐移位器的输入填充方式如图13所示。
106位的对齐移位器中的选择电路从A×B或者C中选择其中一个作为需要进行移位的数据,另一个数则不需要移位,直接传送给后续的107位复用半加器17进行处理,对于进行移位的数据,如果是有效减法时,还需要将其取反。
为了保证第四拍流水处理中能够正确地进行舍入,还需要对移位后的结果使用107位的复用半加器17,对于双精度操作正好使用107位,而双单精度数各需要49位,可以复用该107位半加器,其填充方式如图15所示;
当107位复用半加器17输出结果的最高2位([106:105])都是0时,需要使用1位的规格化单元18进行左移1位,否则不移位;同样,对于双单精度操作,高部分单精度数single2需要判断107位复用半加器17结果的[106:105]是否都是0来决定移位,低部分单精度数single1需要判断107位复用半加器17结果的[48:47]是否都是0来决定移位;
第四个流水拍中,对于双精度和双单精度开始分开进行处理,分别采用CLOSE路径上的第一双精度舍入和规格化单元19、第一高部分单精度数舍入和规格化单元20、第一低部分单精度数舍入和规格化单元21,以及FAR路径上的第二双精度舍入和规格化单元23、第二高部分单精度数舍入和规格化单元24、第二低部分单精度数舍入和规格化单元25,来进行舍入和规格化操作,此后第二选择器22、第三选择器26根据相应的操作类型选择对应路径上的输出结果,最后第四选择器27根据所选择的不同路径输出一个双精度的结果,或者是两个单精度的结果;
对于双精度而言,CLOSE路径上的第一双精度舍入和规格化单元19对108位复用移位器的108位数据结果进行舍入和规格化。而FAR路径上的第二双精度舍入和规格化单元23对第3拍流水中的1位规格化单元18所输出的两个107位的数据(sum和carry)进行舍入和规格化;
对于高部分单精度数single2而言,CLOSE路径上的第一高部分单精度数舍入和规格化单元20对108位复用移位器中的57位规格化移位器的结果的高50位([56:7])进行舍入和规格化操作;FAR路径上的第二高部分单精度数舍入和规格化单元24对1位规格化单元18的结果的最高49位([106:58])进行舍入和规格化操作;
对于低部分单精度数single1而言,CLOSE路径上的第一低部分单精度数舍入和规格化单元21对108位复用移位器中的51位规格化移位器的结果的高50位([50:1])进行舍入和规格化操作,FAR路径上的第二低部分单精度数舍入和规格化单元25对1位规格化单元18的结果的最低49位([48:0])进行舍入和规格化操作。
本发明实施例的浮点乘加器及其浮点乘加方法,进一步降低浮点乘加单元的延迟以提高系统浮点运算性能,同时在尽量少增加面积开销的情况下实现兼容单精度、双精度以及双单精度运算,使得4拍就能同时得到一个单精度的浮点乘加结果(单精度操作),一个双精度的浮点乘加结果(双精度操作)或者两个单精度的浮点乘加结果(双单精度操作)。
最后应当说明的是,很显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型。
Claims (7)
1.一种浮点乘加器,采用双通路算法,其特征在于,包括双单精度和双精度复用乘法树,4:2压缩复合树,第一选择器,其中:
所述双单精度和双精度复用乘法树,用于对A×B乘法结果进行压缩,其包括一X:2的压缩树和一(27-X):2的压缩树,分别对应进行双单精度操作时的低部分单精度数和高部分单精度数的A×B乘法结果的部分积的压缩,得到的压缩结果;
所述4:2压缩复合树,用于在双精度操作中,将所述双单精度和双精度复用乘法树输出的四个结果相加复合得到真正的双精度的乘法结果;而在双单精度操作中,将所述双单精度和双精度复用乘法树中的X:2压缩树复合得到低部分单精度数的单精度乘法结果,(27-X):2压缩树复合得到高部分单精度数的单精度乘法结果;
所述第一选择器,用于根据双单精度操作类型或者双精度操作类型,从所述4:2压缩复合树的输出中,选择相应的操作数作为后续操作的输入,进行双单精度操作或者双精度操作。
2.根据权利要求1所述的浮点乘加器,其特征在于,还包括双单精度编码填充单元及基2的布斯编码器;所述双单精度编码填充单元将两个长度为24×2位的单精度尾数,填充为双精度所使用的53位,从而在进行双单精度操作和双精度操作时,可以共用一个基2的布斯编码器。
3.根据权利要求1所述的浮点乘加器,其特征在于,还包括56位宽复用对齐移位器、57位3:2复用压缩树、108位复用LZA、57位复用加法器和取反加法器、108位复用LOD、108位复用规格化移位器、106位复用对齐移位器、107位复用半加器,其中:
所述56位宽复用对齐移位器,用于对A×B和C的结果进行对齐移位;其对于双精度操作,全部位宽用于填充56位双精度数的移位;其对于双单精度操作,用于填充两个单精度的27位数,中间空0;
所述57位3:2复用压缩树,用于将移位并取反后的操作数C和所述双单精度和双精度复用乘法树结果进行压缩,得到两个数;其对于双精度操作,全部位宽用于57位数的压缩计算;其对于双单精度操作,用于处理两个单精度的28位数的压缩计算;
所述108位复用LZA,用于对A×B+C的结果的前导0位置进行预编码;其对于双精度数,输入到复用LZA的是57位3:2复用压缩树的两个输出与乘法树输出的低51位拼接而成的108位;其对于单精度数,双单精度操作各需要50位,highLZA对应到高部分单精度数,lowLZA对应到低部分单精度数,都放置在对应部分的高位,低位补0即可;
所述57位复用加法器和取反加法器,用于对所述57位3:2复用压缩树的结果进行全加操作,其分解成为2个双加器及2个取反双加器;其对于双精度操作而言,由2个双加器得到57位加法的结果,由2个取反双加器得到57位取反相加的结果;其对于双单精度操作而言,由第1个双加器得到高部分单精度加法结果,由第1个取反双加器得到高部分单精度取反相加的结果,由第2个双加器得到低部分单精度加法结果,由第2个取反双加器得到低部分单精度取反相加的结果;
所述108位复用LOD,用于计算108位复用LZA预编码得到结果的前导1位置,其分解为1个57位的LOD和1个51位的LOD;其对于双精度操作而言,由两者共同得到108位结果预编码的前导1位置;其对于双单精度操作,57位LOD给出高部分单精度的前导1位置,51位LOD给出低部分单精度的前导1位置;
所述108位复用规格化移位器,用于对乘加结果进行规格化移位,其分解为1个57位的规格化移位器和1个51位的规格化移位器;其对于双精度操作,两者共同完成108位宽的规格化移位;其对于双单精度操作,由57位规格化移位器完成高部分单精度的移位,由51位规格化移位器完成低部分单精度的移位;
所述106位复用对齐移位器,用于根据指数差d对A×B或者C进行对齐移位,其分解为1个55位的对齐移位器和1个51位的对齐移位器;其对于双精度操作,由两者共同完成106位数据的对齐移位;其对于双单精度操作,由55位对齐移位器完成高部分单精度的移位,由所述51位对齐移位器完成低部分单精度的移位;
所述107位复用半加器,用于对移位取反后的数和不需进行移位的数据进行半加;其对于双精度操作,全部位宽用于处理107位数据;其对于双单精度数,用于处理两个49位数,中间空9位0。
4.根据权利要求3所述的浮点乘加器,其特征在于,还包括108位选择电路和取反电路,其中:
所述108位选择电路,用于根据符号检测电路选择出乘加结果的尾数,并根据操作类型选择后续所述108位复用规格化移位器的输入;
所述取反电路,用于在进行减法运算时,对移位后的数据进行取反操作。
5.根据权利要求1至4任一项所述的浮点乘加器,其特征在于,还包括第一双精度舍入和规格化单元、第一高部分单精度数舍入和规格化单元、第一低部分单精度数舍入和规格化单元,第二双精度舍入和规格化单元、第二高部分单精度数舍入和规格化单元、第二低部分单精度数舍入和规格化单元,以及第二选择器,第三选择器,第四选择器,其中:
所述第一双精度舍入和规格化单元,用于在CLOSE路径上,在进行双精度操作时,对双精度操作数进行舍入和规格化操作;
所述第二双精度舍入和规格化单元,用于在FAR路径上,在进行双精度操作时,对双精度操作数进行舍入和规格化操作;
所述第一高部分单精度数舍入和规格化单元,用于在CLOSE路径上,在进行双单精度操作时,对高部分单精度操作数进行舍入和规格化操作;
所述第二高部分单精度数舍入和规格化单元,用于在FAR路径上,在进行双单精度操作时,对高部分单精度操作数进行舍入和规格化操作;
所述第一低部分单精度数舍入和规格化单元,用于在CLOSE路径上,在进行双单精度操作时,对低部分单精度操作数进行舍入和规格化操作;
所述第二低部分单精度数舍入和规格化单元,用于在FAR路径上,在进行双单精度操作时,对低部分单精度操作数进行舍入和规格化操作;
所述第二选择器,用于在CLOSE路径上,根据双单精度操作类型或者双精度操作类型,选择相应路径上的输出结果;
所述第三选择器,用于在FAR路径上,根据双单精度操作类型或者双精度操作类型,选择相应路径上的输出结果;
所述第四选择器,用于根据第二选择器和第三选择器所选择的不同路径输出一个双精度的结果,或者是两个单精度的结果。
6.一种浮点乘加处理方法,其特征在于,包括下列步骤:
步骤S100,在第一拍中,双单精度和双精度复用乘法树对A×B乘法结果进行压缩,其包括一X:2的压缩树和一(27-X):2的压缩树,分别对应进行双单精度操作时的低部分单精度数和高部分单精度数的A×B乘法结果的部分积的压缩,得到的压缩结果;
步骤S200,在第二拍中,如果是双精度操作,则4:2压缩复合树将所述双单精度和双精度复用乘法树输出的四个结果相加复合得到真正的双精度的乘法结果;如果是双单精度操作,则4:2压缩复合树将所述双单精度和双精度复用乘法树中的X:2压缩树复合得到低部分单精度数的单精度乘法结果,(27-X):2压缩树复合得到高部分单精度数的单精度乘法结果;
步骤S300,第一选择器根据双单精度操作类型或者双精度操作类型,从所述4:2压缩复合树的输出中,选择相应的操作数作为后续操作的输入,进行双单精度操作或者双精度操作。
7.根据权利要求6所述的浮点乘加处理方法,其特征在于,还包括下列步骤:
步骤S400,第一双精度舍入和规格化单元在CLOSE路径上,在进行双精度操作时,对双精度操作数进行舍入和规格化操作;
第二双精度舍入和规格化单元在FAR路径上,在进行双精度操作时,对双精度操作数进行舍入和规格化操作;
第一高部分单精度数舍入和规格化单元在CLOSE路径上,在进行双单精度操作时,对高部分单精度操作数进行舍入和规格化操作;
第二高部分单精度数舍入和规格化单元在FAR路径上,在进行双单精度操作时,对高部分单精度操作数进行舍入和规格化操作;
第一低部分单精度数舍入和规格化单元在CLOSE路径上,在进行双单精度操作时,对低部分单精度操作数进行舍入和规格化操作;
第二低部分单精度数舍入和规格化单元在FAR路径上,在进行双单精度操作时,对低部分单精度操作数进行舍入和规格化操作;
第二选择器在CLOSE路径上,根据双单精度操作类型或者双精度操作类型,选择相应路径上的输出结果;
第三选择器在FAR路径上,根据双单精度操作类型或者双精度操作类型,选择相应路径上的输出结果;
第四选择器根据第二选择器和第三选择器所选择的不同路径输出一个双精度的结果,或者是两个单精度的结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010108026XA CN101770355B (zh) | 2009-12-30 | 2010-02-10 | 兼容双精度和双单精度的浮点乘加器及其兼容处理方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910243299 | 2009-12-30 | ||
CN200910243299.2 | 2009-12-30 | ||
CN201010108026XA CN101770355B (zh) | 2009-12-30 | 2010-02-10 | 兼容双精度和双单精度的浮点乘加器及其兼容处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101770355A CN101770355A (zh) | 2010-07-07 |
CN101770355B true CN101770355B (zh) | 2011-11-16 |
Family
ID=42503238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010108026XA Active CN101770355B (zh) | 2009-12-30 | 2010-02-10 | 兼容双精度和双单精度的浮点乘加器及其兼容处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101770355B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103257845B (zh) * | 2012-02-21 | 2016-12-14 | 京微雅格(北京)科技有限公司 | 乘加器 |
CN108647007B (zh) * | 2018-04-28 | 2020-10-16 | 天津芯海创科技有限公司 | 运算系统及芯片 |
CN108958705B (zh) * | 2018-06-26 | 2021-11-12 | 飞腾信息技术有限公司 | 一种支持混合数据类型的浮点融合乘加器及其应用方法 |
CN111258542B (zh) * | 2018-11-30 | 2022-06-17 | 上海寒武纪信息科技有限公司 | 乘法器、数据处理方法、芯片及电子设备 |
CN113126954B (zh) * | 2019-12-31 | 2024-04-09 | 华为技术有限公司 | 浮点数乘法计算的方法、装置和算术逻辑单元 |
CN112558918B (zh) * | 2020-12-11 | 2022-05-27 | 北京百度网讯科技有限公司 | 用于神经网络的乘加运算方法和装置 |
CN113703717B (zh) * | 2021-08-31 | 2024-01-26 | 南京英锐创电子科技有限公司 | 二进制浮点数乘法运算电路及其控制方法、计算装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1410880A (zh) * | 2001-09-27 | 2003-04-16 | 中国科学院计算技术研究所 | 提高半规模双精度浮点乘法流水线效率的结构 |
CN1831753A (zh) * | 2005-03-08 | 2006-09-13 | 中国科学院计算技术研究所 | 一种浮点乘法器及其兼容双精度和双单精度计算的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070011441A1 (en) * | 2005-07-08 | 2007-01-11 | International Business Machines Corporation | Method and system for data-driven runtime alignment operation |
-
2010
- 2010-02-10 CN CN201010108026XA patent/CN101770355B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1410880A (zh) * | 2001-09-27 | 2003-04-16 | 中国科学院计算技术研究所 | 提高半规模双精度浮点乘法流水线效率的结构 |
CN1831753A (zh) * | 2005-03-08 | 2006-09-13 | 中国科学院计算技术研究所 | 一种浮点乘法器及其兼容双精度和双单精度计算的方法 |
Non-Patent Citations (1)
Title |
---|
张戈 等..龙芯2号处理器功能部件设计.《计算机研究与发展》.2006,967-973. * |
Also Published As
Publication number | Publication date |
---|---|
CN101770355A (zh) | 2010-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101770355B (zh) | 兼容双精度和双单精度的浮点乘加器及其兼容处理方法 | |
CN107291419B (zh) | 用于神经网络处理器的浮点乘法器及浮点数乘法 | |
CN101133389B (zh) | 多用途乘法-加法功能单元 | |
CN101692202B (zh) | 一种64比特浮点乘加器及其浮点运算流水节拍处理方法 | |
CN104111816B (zh) | Gpdsp中多功能simd结构浮点融合乘加运算装置 | |
CN100570552C (zh) | 一种并行浮点乘加单元 | |
CN107273090A (zh) | 面向神经网络处理器的近似浮点乘法器及浮点数乘法 | |
CN104778028B (zh) | 乘加器 | |
US10379859B2 (en) | Inference based condition code generation | |
CN112860220B (zh) | 一种适用于多精度计算的可重构浮点乘加运算单元及方法 | |
KR20120053343A (ko) | 부동 소수점의 복합 연산장치 및 그 연산방법 | |
JPH0230530B2 (zh) | ||
CN105335127A (zh) | Gpdsp中支持浮点除法的标量运算单元结构 | |
CN100405289C (zh) | 一种浮点乘法器及其兼容双精度和双单精度计算的方法 | |
CN116820393A (zh) | 支持深度学习指令的多精度乘加单元及其应用方法 | |
CN115407965B (zh) | 一种基于泰勒展开的高性能近似除法器及误差补偿方法 | |
Quinnell et al. | Bridge floating-point fused multiply-add design | |
CN100476718C (zh) | 一种64比特浮点乘加器及其流水节拍划分方法 | |
JPH1195982A (ja) | 演算処理回路及び演算処理方法並びに演算処理システム | |
CN116933840A (zh) | 支持可变指数位宽的多精度Posit编解码运算装置及方法 | |
KR102208274B1 (ko) | 특히 함수 모델을 순수 하드웨어에 기초하여 연산하기 위한 함수 모델 유닛 내에서 사용하기 위한 fma 유닛 | |
KR100317767B1 (ko) | 부동 소수점 2진 4 워드 포맷 승산 명령 유닛 | |
US9575725B1 (en) | Specialized processing block with embedded pipelined accumulator circuitry | |
CN1202469C (zh) | 不必计算指数差而直接对阶的高速浮点加减部件 | |
CN116820395A (zh) | 支持包级运算的浮点乘加单元及其应用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100080 No. 10 South Road, Haidian District Academy of Sciences, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CP03 | Change of name, title or address |