一种Posit浮点数的运算处理器以及运算处理系统转让专利

申请号 : CN202010346033.7

文献号 : CN111538472B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 梁峰吴斌张国和孙齐伟

申请人 : 西安交通大学

摘要 :

本申请提供了一种Posit浮点数的运算处理器以及运算处理系统,涉及计算机技术领域。直接以自解码电路获取的补码形式的中间数据进行加、减、乘、FMA运算,得到以补码形式的中间数据表示的运算结果,直接将以补码形式的中间数据表示的运算结果输入编码电路,以使编码电路直接将补码形式的中间数据转换为Posit浮点数。避免了在运算电路反复进行原码和补码的相互转化,简化了运算电路的逻辑,从而减小运算电路的面积和功耗。

权利要求 :

1.一种Posit浮点数的运算处理器,其特征在于,所述运算处理器包括:

获取模块,用于获取解码电路输出的参与目标运算的多个补码形式的中间数据;所述中间数据是所述解码电路根据CPU的计算指令,对参与运算的Posit浮点数解码后得到的;

所述中间数据至少包括以下字段:符号字段、指数字段以及尾数字段;

尾数字段处理模块,用于得到分别对应多个中间数据的多个尾数字段和分别对应多个中间数据的多个符号字段,根据所述多个符号字段,分别对所述多个尾数字段补充隐藏位,得到参与所述目标运算的多个完整尾数字段;

完整尾数字段计算模块,用于将所述多个完整尾数字段分别对应到各自在所述目标运算中的运算位置,并按所述目标运算进行运算,得到运算结果的尾数字段和运算结果的符号字段;

指数字段计算模块,用于得到分别对应所述多个中间数据的多个指数字段,将所述多个指数字段对应到各自在所述目标运算中的运算位置,并按所述目标运算进行运算得到运算结果的指数字段;

运算结果确定模块,用于将所述运算结果的尾数字段、所述运算结果的指数字段和所述运算结果的符号字段作为所述目标运算的运算结果数据输出给编码电路,以通过所述编码电路根据所述计算指令中的指定格式,将所述运算结果数据转换为所述指定格式的Posit浮点数。

2.根据权利要求1所述的Posit浮点数的运算处理器,其特征在于,所述中间数据还包括:无穷数字段和零值字段;所述运算处理器还包括:无穷数字段处理模块,用于在所述多个中间数据中的任意一个中间数据的无穷数字段为真时,将运算结果的无穷数字段置为真,并将置为真的所述无穷数字段作为所述目标运算的运算结果数据输出给所述编码电路,以使所述编码电路直接输出表示无穷数的特殊编码;

第一零值字段处理模块,用于在所述目标运算是加法,且参与所述目标运算的所述多个中间数据中的零值字段都为真时,将运算结果的零值字段置为真;

第二零值字段处理模块,用于在所述目标运算是乘法运算时,并且参与所述目标运算的所述多个中间数据中的任一中间数据的零值字段为真时,将所述运算结果的零值字段置为真;

零值字段输出模块,用于将置为真的所述零值字段作为所述目标运算的运算结果数据输出给所述编码电路,以使所述编码电路直接输出表示零的特殊编码。

3.根据权利要求1所述的Posit浮点数的运算处理器,其特征在于,所述尾数字段处理模块包括:拼接器件和以下子模块:正数拼接子模块,用于在所述符号字段为0时,以所述拼接器件,将01拼接到所述符号字段对应的所述中间数据的所述尾数字段的隐藏位,得到所述符号字段对应的所述中间数据的完整尾数字段;

负数拼接子模块,用于在所述符号字段为1时,以所述拼接器件,将10拼接到所述符号字段对应的所述中间数据的所述尾数字段的隐藏位,得到所述符号字段对应的所述中间数据的完整尾数字段。

4.根据权利要求3所述的Posit浮点数的运算处理器,其特征在于,所述尾数字段处理模块还包括移位器件以及以下子模块:差值计算子模块,用于在所述目标运算是加法运算时,得到更大数的指数字段与更小数的指数字段的差值;所述更大数是所述多个中间数据中具有最大指数字段的中间数据;

所述更小数是所述多个中间数据中具有最小指数字段的中间数据;

尾数移位子模块,用于在所述目标运算是加法运算时,根据所述差值,以所述移位器件对所述更小数的尾数字段向右移位,以使所述正数拼接子模块或所述负数拼接子模块再对移位后的所述尾数字段补充符号位,得到所述更小数的完整尾数字段。

5.根据权利要求3所述的Posit浮点数的运算处理器,其特征在于,所述中间数据还包括保护位字段;所述完整尾数字段计算模块包括:范围确定子模块,用于在所述目标运算是乘法时,根据所述尾数字段的取值范围,确定所述运算结果的尾数字段的取值范围;

所述指数字段计算模块包括:

第一指数修正子模块,用于在所述目标运算是乘法时,根据所述运算结果的尾数字段所在的取值区间,对所述运算结果的指数字段进行修正,得到修正后的运算结果的指数字段;

所述完整尾数字段计算模块包括:截取器件以及以下子模块:

尾数字段选取模块,用于在所述目标运算是乘法时,根据所述修正后的运算结果的指数字段,以所述截取器件在尾数字段乘积结果中,从高位到低位截取固定位宽的小数位,作为所述运算结果的尾数字段;其中,所述固定位宽为所述中间数据中尾数字段的位宽。

6.根据权利要求5所述的Posit浮点数的运算处理器,其特征在于,所述运算处理器还包括:第一保护位结果确定模块,用于在所述目标运算是乘法时,将截取所述固定位宽的小数位后的尾数字段乘积结果中,剩余的小数位的最高三位构成运算结果的保护位字段,并输出所述运算结果的保护位字段。

7.根据权利要求3所述的Posit浮点数的运算处理器,其特征在于,所述完整尾数字段计算模块包括:异或器件以及如下子模块:符号计算子模块,用于在所述目标运算是加法时,得到对应多个中间数据的多个尾数字段中的多个扩展位,以所述异或器件,对所述多个扩展位执行第一异或操作,再以所述异或器件,对所述第一异或操作的结果,与对所述多个完整尾数字段执行所述目标运算后产生的进位执行第二异或操作,得到所述运算结果的符号字段;

符号确定子模块,用于在所述目标运算是乘法运算时,以所述多个完整尾数字段执行所述目标运算后的最高位作为所述运算结果的符号字段。

8.根据权利要求4所述的Posit浮点数的运算处理器,其特征在于,所述中间数据还包括保护位字段,所述尾数字段处理模块还包括:保护位保留子模块,用于在所述目标运算是加法运算时,在所述更小数的尾数字段向右移位过程中,在所述更小数的尾数字段的末尾增加值为0的三位作为运算保护位;

完整尾数字段计算模块包括所述拼接器件、反码型前导零检测电路器件以及如下子模块;

拼接子模块,用于在所述目标运算是加法运算时,拼接所述运算结果的符号字段、所述运算结果的尾数字段和所述运算保护位,得到拼接字段;

尾数字段确定子模块,用于在所述目标运算是加法运算时,以所述反码型前导零检测电路器件,检测所述拼接字段中的无效位,以舍弃所述无效位后的所述拼接字段的小数位,作为所述运算结果的尾数字段;

所述指数字段计算模块包括:

指数字段确定子模块,用于以所述无效位的位数,修正所述更大数的指数字段,得到所述运算结果的指数字段;

所述运算处理器还包括:

第二保护位结果确定模块,用于在所述目标运算是加法运算时,取舍弃所述无效位后的所述拼接字段的小数位的最低三位,作为所述运算结果的保护位字段。

9.根据权利要求1所述的Posit浮点数的运算处理器,其特征在于,所述运算处理器还包括:减数转换模块,在所述目标运算是减法时,将参与所述目标运算的减数对应的中间数据进行转换为所述减数的相反数的补码。

10.一种Posit浮点数的运算处理系统,其特征在于,所述Posit浮点数的运算处理系统包括CPU、解码电路、编码电路以及权利要求1‑9任一所述的Posit浮点数的运算处理器;

所述CPU是计算机的中央处理器,连接所述解码电路,用于根据用户的输入,生成计算指令,并将所述计算指令发送给所述解码电路;所述计算指令包括目标运算、参与所述目标运算的Posit浮点数和输出的Posit浮点数的指定格式;

所述解码电路连接所述Posit浮点数的运算处理器,用于将参与所述目标运算的Posit浮点数转换为补码形式的中间数据,并将所述补码形式的中间数据发送给所述Posit浮点数的运算处理器;

所述Posit浮点数的运算处理器连接所述编码电路,用于以所述补码形式的中间数据进行所述目标运算,得到以补码形式的中间数据表示的运算结果,并将所述以补码形式的中间数据表示的运算结果发送给所述编码电路;

所述编码电路用于将所述以补码形式的中间数据表示的运算结果进行编码,得到所述指定格式的Posit浮点数,并将所述指定格式的Posit浮点数发送给计算机的显示装置,以显示所述指定格式的Posit浮点数。

说明书 :

一种Posit浮点数的运算处理器以及运算处理系统

技术领域

[0001] 本申请涉及计算机技术领域,特别是涉及一种Posit浮点数的运算处理器以及运算处理系统。

背景技术

[0002] 浮点数是科学计算领域和高性能计算领域常用的数据表示方法,特别地,在对计算结果的精度要求较高的场合,大量运用浮点数进行数据处理,例如自动驾驶、航空航天、力学计算领域。
[0003] Posit标准的浮点数相较于IEEE 754标准的浮点数,灵活性更高,并且Posit浮点数在实数上的采样分布与sigmoid函数相关,而sigmoid函数是机器学习里常用的一种激活函数,因此将Posit浮点数用于机器学习,计算机进行数据处理的效率更高。
[0004] 目前对Posit浮点数进行处理的方法,通常是利用解码电路将参与运算的Posit浮点数转换为原码,将原码输入到运算电路进行运算,而运算电路为了运算方便,依据原码判断Posit浮点数是否为负数,再将负数的Posit浮点数的原码统一为补码的形式,得到补码形式的运算结果后,再将补码形式的运算结果转换为原码,整个运算过程需要反复地进行原码到补码,以及补码到原码的转换,并且在每一个运算节点都需要判断Posit浮点数的正负,使得整个对Posit浮点数的运算逻辑十分复杂繁琐,导致运算电路的电路面积过大。

发明内容

[0005] 本申请实施例提供一种Posit浮点数的运算处理器以及运算处理系统,直接以自解码电路获取的补码形式的中间数据进行加、减、乘运算,得到以补码形式的中间数据表示的运算结果,直接将以补码形式的中间数据表示的运算结果输入编码电路,以使编码电路直接将补码形式的中间数据转换为Posit浮点数。避免了在运算电路反复进行原码和补码的相互转化,简化了运算电路的逻辑,从而减小运算电路的面积和功耗。
[0006] 本申请实施例第一方面提供了一种Posit浮点数的运算处理器,所述运算处理器包括:获取模块,用于获取解码电路输出的参与目标运算的多个补码形式的中间数据;所述中间数据是所述解码电路根据CPU的计算指令,对参与运算的Posit浮点数解码后得到的;所述中间数据至少包括以下字段:符号字段、指数字段以及尾数字段;
[0007] 尾数字段处理模块,用于得到分别对应多个中间数据的多个尾数字段和分别对应多个中间数据的多个符号字段,根据所述多个符号字段,分别对所述多个尾数字段补充隐藏位,得到参与所述目标运算的多个完整尾数字段;
[0008] 完整尾数字段计算模块,用于将所述多个完整尾数字段分别对应到各自在所述目标运算中的运算位置,并按所述目标运算进行运算,得到运算结果的尾数字段和运算结果的符号字段;
[0009] 指数字段计算模块,用于得到分别对应所述多个中间数据的多个指数字段,将所述多个指数字段对应到各自在所述目标运算中的运算位置,并按所述目标运算进行运算得到运算结果的指数字段;
[0010] 运算结果确定模块,用于将所述运算结果的尾数字段、所述运算结果的指数字段和所述运算结果的符号字段作为所述目标运算的运算结果数据输出给编码电路,以通过所述编码电路根据所述计算指令中的指定格式,将所述运算结果数据转换为所述指定格式的Posit浮点数。
[0011] 可选地,所述中间数据还包括:无穷数字段和零值字段;所述运算处理器还包括:
[0012] 无穷数字段处理模块,用于在所述多个中间数据中的任意一个中间数据的无穷数字段为真时,将运算结果的无穷数字段置为真,并将置为真的所述无穷数字段作为所述目标运算的运算结果数据输出给所述编码电路,以使所述编码电路直接输出表示无穷数的特殊编码;
[0013] 第一零值字段处理模块,用于在所述目标运算是加法时,且参与所述目标运算的所述多个中间数据中的零值字段都为真时,将运算结果的零值字段置为真;
[0014] 第二零值字段处理模块,用于在所述目标运算是乘法运算时,并且参与所述目标运算的所述多个中间数据中的任一中间数据的零值字段为真时,将所述运算结果的零值字段置为真;
[0015] 零值字段输出模块,用于将置为真的所述零值字段作为所述目标运算的运算结果数据输出给所述编码电路,以使所述编码电路直接输出表示零的特殊编码。
[0016] 可选地,所述尾数字段处理模块包括:拼接器件和以下子模块:
[0017] 正数拼接子模块,用于在所述符号字段为0时,以所述拼接器件,将01拼接到所述符号字段对应的所述中间数据的所述尾数字段的隐藏位,得到所述符号字段对应的所述中间数据的完整尾数字段;
[0018] 负数拼接子模块,用于在所述符号字段为1时,以所述拼接器件,将10拼接到所述符号字段对应的所述中间数据的所述尾数字段的隐藏位,得到所述符号字段对应的所述中间数据的完整尾数字段。
[0019] 可选地,所述尾数字段处理模块还包括移位器件以及以下子模块:
[0020] 差值计算子模块,用于在所述目标运算是加法运算时,得到更大数的指数字段与更小数的指数字段的差值;所述更大数是所述多个中间数据中具有最大指数字段的中间数据;所述更小数是所述多个中间数据中具有最小指数字段的中间数据;
[0021] 尾数移位子模块,用于在所述目标运算是加法运算时,根据所述差值,以所述移位器件对所述更小数的尾数字段向右移位,以使所述正数拼接子模块或所述负数拼接子模块再对移位后的所述尾数字段补充符号位,得到所述更小数的完整尾数字段。
[0022] 可选地,所述中间数据还包括保护位字段;所述完整尾数字段计算模块包括:
[0023] 范围确定子模块,用于在所述目标运算是乘法时,根据所述尾数字段的取值范围,确定所述运算结果的尾数字段的取值范围;
[0024] 所述指数字段计算模块包括:
[0025] 第一指数修正子模块,用于在所述目标运算是乘法时,根据所述运算结果的尾数字段所在的取值区间,对所述运算结果的指数字段进行修正,得到修正后的运算结果的指数字段;
[0026] 所述完整尾数字段计算模块包括:截取器件以及以下子模块:
[0027] 尾数字段选取模块,用于在所述目标运算是乘法时,根据所述修正后的运算结果的指数字段,以所述截取器件在尾数字段乘积结果中,从高位到低位截取固定位宽的小数位,作为所述运算结果的尾数字段;其中,所述固定位宽为所述中间数据中尾数字段的位宽。
[0028] 可选地,所述运算处理器还包括:
[0029] 第一保护位结果确定模块,用于在所述目标运算是乘法时,将截取所述固定位宽的小数位后的尾数字段乘积结果中,剩余的小数位的最高三位构成运算结果的保护位字段,并输出所述运算结果的保护位字段。
[0030] 可选地,所述完整尾数字段计算模块包括:异或器件以及如下子模块:
[0031] 符号计算子模块,用于在所述目标运算是加法时,得到对应多个中间数据的多个尾数字段中的多个扩展位,以所述异或器件,对所述多个扩展位执行第一异或操作,再以所述异或器件,对所述第一异或操作的结果,与对所述多个完整尾数字段执行所述目标运算后产生的进位执行第二异或操作,得到所述运算结果的符号字段;
[0032] 符号确定子模块,用于在所述目标运算是乘法运算时,以所述多个完整尾数字段执行所述目标运算后的最高位作为所述运算结果的符号字段。
[0033] 可选地,所述中间数据还包括保护位字段,所述尾数字段处理模块还包括:
[0034] 保护位保留子模块,用于在所述目标运算是加法运算时,在所述更小数的尾数字段向右移位过程中,在所述更小数的尾数字段的末尾增加值为0的三位作为运算保护位;
[0035] 完整尾数字段计算模块包括所述拼接器件、反码型前导零检测电路器件以及如下子模块;
[0036] 拼接子模块,用于在所述目标运算是加法运算时,拼接所述运算结果的符号字段、所述运算结果的尾数字段和所述运算保护位,得到拼接字段;
[0037] 尾数字段确定子模块,用于在所述目标运算是加法运算时,以所述反码型前导零检测电路器件,检测所述拼接字段中的无效位,以舍弃所述无效位后的所述拼接字段的小数位,作为所述运算结果的尾数字段;
[0038] 所述指数字段计算模块包括:
[0039] 指数字段确定子模块,用于以所述无效位的位数,修正所述更大数的指数字段,得到所述运算结果的指数字段;
[0040] 所述运算处理器还包括:
[0041] 第二保护位结果确定模块,用于在所述目标运算是加法运算时,取舍弃所述无效位后的所述拼接字段的小数位的最低三位,作为所述运算结果的保护位字段。
[0042] 可选地,所述运算处理器还包括:
[0043] 减数转换模块,在所述目标运算是减法时,将参与所述目标运算的减数对应的中间数据进行转换为所述减数的相反数的补码。
[0044] 本申请实施例第二方面提供了一种Posit浮点数的运算处理系统,所述Posit浮点数的运算处理系统包括CPU、解码电路、编码电路以及第一方面提出的Posit浮点数的运算处理器;
[0045] 所述CPU是计算机的中央处理器,连接所述解码电路,用于根据用户的输入,生成计算指令,并将所述计算指令发送给所述解码电路;所述计算指令包括目标运算、参与所述目标运算的Posit浮点数和输出的Posit浮点数的指定格式;
[0046] 所述解码电路连接所述Posit浮点数的运算处理器,用于将参与所述目标运算的Posit浮点数转换为补码形式的中间数据,并将所述补码形式的中间数据发送给所述Posit浮点数的运算处理器;
[0047] 所述Posit浮点数的运算处理器连接所述编码电路,用于以所述补码形式的中间数据进行所述目标运算,得到以补码形式的中间数据表示的运算结果,并将所述以补码形式的中间数据表示的运算结果发送给所述编码电路;
[0048] 所述编码电路用于将所述以补码形式的中间数据表示的运算结果进行编码,得到所述指定格式的Posit浮点数,并将所述指定格式的Posit浮点数发送给计算机的显示装置,以显示所述指定格式的Posit浮点数。
[0049] 本申请实施例提出的Posit浮点数的运算处理器,以尾数字段处理模块对解码电路得到的中间数据的尾数字段扩展隐藏位和符号位,以使完整尾数字段计算模块可以直接对补码形式的中间数据的尾数字段进行补码加法运算,以及补码乘法运算,得到运算结果的尾数字段和运算结果的符号字段,再结合指数字段计算模块直接对中间数据的指数字段进行运算,利用运算结果的尾数字段调整或修正加法运算中更大数指数字段,和两个中间数据的乘积,得到运算结果的指数字段,运算电路简单,没有冗余的用于正负符号判断的逻辑电路,也没有冗余的用于补码和原码相互转换的电路,进而使得Posit浮点数的运算处理器整体的电路面积较小,运算时各个模块分别得到运算结果的指数字段、运算结果的尾数字段、运算结果的符号字段、运算结果的保护位字段,由于运算结果的指数字段和输入的指数字段都是补码形式的中间数据,计算逻辑简单,不涉及补码和原码的转换,进而使得Posit浮点数的运算处理器计算效率较高。

附图说明

[0050] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0051] 图1是本申请实施例提出的Posit浮点数的运算处理系统的结构示意图;
[0052] 图2是本申请实施例提出的Posit浮点数的运算处理器的结构示意图;
[0053] 图3是本申请实施例提出的尾数处理模块的结构示意图;
[0054] 图4是本申请实施例提出的完整尾数字段计算模块的结构示意图。

具体实施方式

[0055] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0056] Posit浮点数是由新加坡国立大学的教授John L.Gustafson提出的一种新型浮点数标准(也叫Unum浮点标准,Posit是第三版Unum标准),是一种用于在计算机技术中,近似e表示任意某个实数的科学计数法。以实数M×2为例,M是尾数,2是基数,e是指数。计算机中参与运算的数据都用二进制表示,因此Posit浮点数的基数是2。
[0057] Posit浮点数需要预先约定好具体的格式,即Posit浮点数需要预先约定Posit浮点数的总位宽和指数的位宽。例如,“Posit<8,1>”可以表示一个总位宽8bit、指数位宽为1bit的Posit编码。
[0058] Posit浮点数的标准规定了Posit浮点数为补码形式的编码,并且规定了Posit浮点数包括以下字段:
[0059] 一:符号字段。符号字段通常是Posit浮点数的最高位。
[0060] 二、regime字段,位于符号字段后,regime字段由从最高位到次低位的一串连续的1和最低位的0组成,最低位的0是翻转位,或由最从高位到次低位的一串连续的0和最低位的1组成。在regime字段为正时,regime字段的取值为连续的1的个数减1,在连regime字段为负时,regime字段的取值为0的个数取负。regime字段的宽度可以是任意的。例如:在regime字段是1110时,其取值为3‑1=2;在regime字段是0001时,其取值为‑3。
[0061] 三、编码指数字段,若regime字段没有用完事先约定的总位宽,regime字段后紧跟编码指数字段,编码指数字段宽为事先约定的位宽。编码指数字段是无符号整数,其取值一定大于零。编码指数字段实际是表示Posit浮点数编码中的指数的字段。
[0062] 四、尾数字段,若编码指数字段和regime字段没有用完事先约定的总位宽,剩余的全部位宽为尾数字段的位宽。可以理解的是,在十进制中,由于尾数是一个大于等于1.0、小于10的小数,其整数部分取1至9中任意一个整数。二进制中,尾数的整数部分只可能是1,为了减少不必要的编码,Posit浮点数标准将整数位作为隐藏位,只在Posit浮点数的尾数字段记录小数位。例如:如果尾数字段是1001,那么它加上隐藏位就是11001,对应的十进制取0 ‑1 ‑2 ‑3 ‑4
值是1×2+1×2 +0×2 +0×2 +1×2 =1.5625。
[0063] 在Posit浮点数标准中,还定义了useed的概念,useed用于在数值上统一regime字段和编码指数字段。useed的值与事先约定的Posit浮点数的编码指数字段的位宽有关,对于任意的格式固定的Posit浮点数,useed的值也是固定的。假设编码指数字段的位宽是es,则useed的取值为 例如,es=1时, es=2时, 假设一个Posit浮点数的符号为s,regime的值为r,指数的值为e,含隐藏位的尾数值为m,那么该Posit浮点数对应的十进制实数为:
[0064] (‑1)s×useedr×2e×m
[0065] 目前计算Posit浮点数,都是以Posit浮点数解码得到的原码进行计算,具体地,运算电路会判断原码的正负,将负数原码转换为补码,进行补码运算,得到补码的运算结果,再将运算结果转换为原码。进行整个运算过程的运算电路需要多个用于正负判断的逻辑电路,和多个原码和补码相互转换的电路,导致运算电路逻辑复杂,面积和功耗过大。
[0066] 本申请提出的Posit浮点数的运算处理系统,具备指令解码功能,根据输入的信息生成计算指令,解码电路能将根据计算指令获取的Posit浮点数解码为补码形式的中间数据:编码电路能将补码形式的中间数据编码得到指定格式的Posit浮点数,Posit浮点数的运算处理器能够以将多个补码形式的中间数据进行目标运算,得到同样以补码形式的中间数据表示的运算结果,进而实现整个运算处理器不必添加用于补码和原码转换的逻辑电路。
[0067] 所述Posit浮点数的运算处理系统包括CPU101、解码电路102、编码电路104以及本申请所有实施例提出的Posit浮点数的运算处理器103;
[0068] 参考图1,图1是本申请实施例提出的Posit浮点数的运算处理系统的结构示意图。
[0069] 所述CPU是计算机的中央处理器,连接所述解码电路,用于根据用户的输入,生成计算指令,并将所述计算指令发送给所述解码电路;所述计算指令包括目标运算、参与所述目标运算的Posit浮点数和输出的Posit浮点数的指定格式;
[0070] 指定格式是Posit浮点数预先约定好具体的格式,通常以“Posit<总位宽,指数位宽>”作为指定格式。目标运算是加法运算、加法运算、乘法运算或FMA运算。FMA(Fused Multiplication and Addition)是先进行乘法,然后用所得的乘积去与第三个输入进行加法的运算。最后依据加法的结果生成中间数据类型。由于乘积的位宽是两倍的尾数位宽,所有FMA相比普通的先乘后加有更高的精度。
[0071] 假设用户的输入3+0的计算,CUP生成的计算指令包括:加法运算、Posit浮点数0|10|1|1000和0|00|0|0000,指定格式Posit<8,1>。其中,对于Posit浮点数编码0|10|1|
1000,0是Posit浮点数编码的符号字段,10是Posit浮点数编码的regime字段,1是Posit浮点数编码的编码字数字段,1000是Posit浮点数编码的尾数字段。
[0072] 所述解码电路连接所述Posit浮点数的运算处理器,用于将参与所述目标运算的Posit浮点数转换为补码形式的中间数据,并将所述补码形式的中间数据发送给所述Posit浮点数的运算处理器;
[0073] 所述Posit浮点数的运算处理器连接所述编码电路,用于以所述补码形式的中间数据进行所述目标运算,得到以补码形式的中间数据表示的运算结果,并将所述以补码形式的中间数据表示的运算结果发送给所述编码电路;
[0074] 所述编码电路用于将所述以补码形式的中间数据表示的运算结果进行编码,得到所述指定格式的Posit浮点数,并将所述指定格式的Posit浮点数发送给计算机的显示装置,以显示所述指定格式的Posit浮点数。
[0075] 补码形式的中间数据包括:无穷数字段、零值字段、符号字段、指数字段、尾数字段以及保护位字段。解码电路在识别出无穷数的编码(最高位是1,其余位数全部是0的编码)和零值的编码(所有位数全部是0的编码)后,分别将无穷数字段、零值字段置为真,输入到运算处理器,以使运算处理器的无穷数字段处理模块、第一零值字段处理模块、第二零值字段处理模块和零值字段输出模块可以直接得到零或无穷数的运算结果,不必再等待通过尾数字段处理模块等模块依据中间数据的符号字段、指数字段、尾数字段计算得到的运算结果,提高了运算处理器得到运算结果的效率。
[0076] 参考图2,图2是本申请实施例提出的Posit浮点数的运算处理器的结构示意图。
[0077] 无穷数字段处理模块201,用于在所述多个中间数据中的任意一个中间数据的无穷数字段为真时,将运算结果的无穷数字段置为真,并将置为真的所述无穷数字段作为所述目标运算的运算结果数据输出给所述编码电路,以使所述编码电路直接输出表示无穷数的特殊编码;
[0078] 多个中间数据是解码电路获取到参与目标运算的多个Posit浮点数后,将多个Posit浮点数后解码后得到的。每个Posit浮点数对应的中间数据都包含无穷数字段、零值字段、符号字段、指数字段、尾数字段以及保护位字段六个字段。无穷数字段处理模块会读取每个Posit浮点数对应的中间数据,在读取无穷数字段为真时,就会将运算结果的无穷数字段置为真,输入编码电路,编码电路接收到置为真的运算结果的无穷数字段,输出无穷数的编码:最高位是1,其余位数全部是0的编码(假设指定格式是Posit<8,1>,那么无穷数的编码是10000000)。
[0079] 解码电路获得的指数字段,是将Posit浮点数的编码指数字段和regime字段进行拼接后的字段,Posit浮点数的运算处理器以指数字段进行运算,避免了regime字段位宽不确定的缺陷。
[0080] 第一零值字段处理模块202,用于在所述目标运算是加法时,且参与所述目标运算的所述多个中间数据中的零值字段都为真时,将运算结果的零值字段置为真;
[0081] 第二零值字段处理模块203,用于在所述目标运算是乘法运算时,并且参与所述目标运算的所述多个中间数据中的任一中间数据的零值字段为真时,将所述运算结果的零值字段置为真;
[0082] 零值字段输出模块204,用于将置为真的所述零值字段作为所述目标运算的运算结果数据输出给所述编码电路,以使所述编码电路直接输出表示零的特殊编码。
[0083] 无穷数字段处理模块、第一零值字段处理模块与第二零值字段处理模块并联,第一零值字段处理模块用于在加法运算时,对参与运算的多个Posit浮点数的中间数据进行处理,决定是否将运算结果的零值字段置为真,第二零值字段处理模块用于在乘法运算时,对参与运算的多个Posit浮点数的中间数据进行处理,决定是否将运算结果的零值字段置为真,零值字段输出模块连接第一零值字段处理模块与第二零值字段,用于将置为真的零值字段输出给编码电路,以使编码电路接收到置为真的运算结果的零值字段,输出零值的编码,假设指定格式是Posit<8,1>,那么零值的编码是00000000。
[0084] Posit浮点数的运算处理器的获取模块205连接解码电路,获取解码电路对参与运算的多个Posit浮点数,解码得到的多个中间数据的全部字段:无穷数字段、零值字段、符号字段、指数字段、尾数字段以及保护位字段。获取模块205除了将获取的所有六个字段输入无穷数字段处理模块、第一零值字段处理模块、第二零值字段处理模块和零值字段输出模块,以快速得到置为真的运算结果的零值字段和置为真的运算结果的无穷数字段外,还会将所有六个字段输入与无穷数字段处理模块等并联的模块(尾数字段处理模块等),以直接对多个尾数字段进行目标运算,对多个指数字段进行目标运算,对多个符号字段进行运算,得到运算结果的尾数字段,运算结果的指数字段和运算结果的符号字段,以使编码电路直接根据运算结果的尾数字段、运算结果的指数字段和运算结果的符号字段,编码得到指定格式的Posit浮点数。
[0085] 获取模块205,用于获取解码电路输出的参与目标运算的多个补码形式的中间数据;所述中间数据是所述解码电路根据CPU的计算指令,对参与运算的Posit浮点数解码后得到的;所述中间数据至少包括以下字段:符号字段、指数字段以及尾数字段;
[0086] 获取模块会获取中间数据的全部字段:无穷数字段、零值字段、符号字段、尾数字段、指数字段、保护位字段。
[0087] 尾数字段处理模块206,用于得到分别对应多个中间数据的多个尾数字段和分别对应多个中间数据的多个符号字段,根据所述多个符号字段,分别对所述多个尾数字段补充隐藏位,得到参与所述目标运算的多个完整尾数字段;
[0088] 尾数字段处理模块从获取模块得到参与运算的Posit浮点数的中间数据的尾数字段和符号字段。假设CPU发送的计算指令是对Posit浮点数1和Posit浮点数2进行加法运算1,解码电路对Posit浮点数1解码得到中间数据1,对Posit浮点数2解码得到中间数据2,获取模块获取得到参与加法运算1的中间数据1和中间数据2,尾数字段处理模块接收中间数据1中的尾数字段1和符号字段1,以及中间数据2中的尾数字段2和符号字段2。尾数字段1、符号字段1与中间数据1是对应的。
[0089] 本申请提出的运算处理器直接将符号字段拼接到尾数字段参与目标运算,电路简单,进而避免了多次判断Posit浮点数的正负带来的用于判断正负的冗余逻辑电路。例如:以现有的浮点数运算处理器进行加法运算,假设参与运算的两个Posit浮点数分别是正数和负数,并且负的Posit浮点数的绝对值较大,那么浮点数运算处理器需要设置通过原码,判断两个Posit浮点数的正负的逻辑电路,再设置将负数的Posit浮点数的原码转换为补码的电路,加法运算结束后,需要设置判断运算结果的正负的逻辑电路,并设置依照运算结果的正负,将负数的运算结果转换为补码的逻辑电路。
[0090] 中间数据的尾数字段是解码电路解析regime字段和编码指数字段后,直接从Posit浮点数编码中补零获取的尾数字段。Posit浮点数是二进制数据,并且Posit浮点数标e准规定了隐藏位是1,所以Posit浮点数编码中的尾数字段是科学计数法:M×2中M的小数部分。
[0091] 中间数据的符号字段是解码电路解析Posit浮点数编码后,直接以Posit浮点数的最高位,即以Posit浮点数的符号字段作为中间数据的符号字段。
[0092] 因此尾数字段处理模块对中间数据的尾数字段补充隐藏位所得到的完整尾数字段不仅拼接了符号字段,还将尾数字段拼接上整数部分,将只有小数部分的中间数据的尾数字段补充完整。
[0093] 在补充隐藏位时,尾数字段处理模块以正数拼接子模块和负数拼接子模块,分别在符号字段是0和符号字段是1时,对中间数据的尾数字段补充隐藏位。参考图3,图3是本申请实施例提出的尾数处理模块的结构示意图。
[0094] 所述尾数字段处理模块包括:拼接器件和以下子模块:
[0095] 正数拼接子模块206‑1,用于在所述符号字段为0时,以所述拼接器件,将01拼接到所述符号字段对应的所述中间数据的所述尾数字段的隐藏位,得到所述符号字段对应的所述中间数据的完整尾数字段;
[0096] 符号字段为0时,参与运算的中间数据对应的Posit浮点数为正数,尾数字段也必然为正数,尾数字段的隐藏位是1,将0作为符号位,置于最高位,1作为整数位,因此将01拼接到尾数字段的高位。
[0097] 负数拼接子模块206‑2,用于在所述符号字段为1时,以所述拼接器件,将10拼接到所述符号字段对应的所述中间数据的所述尾数字段的隐藏位,得到所述符号字段对应的所述中间数据的完整尾数字段。
[0098] 对于参与加法运算的中间数据存在的一种特殊情况,正数拼接子模块设置有零值拼接子单元,对所有位为零的尾数字段,在其最高位拼接00,作为该为零的尾数字段扩展的隐藏位。
[0099] 符号字段为1时,参与运算的中间数据对应的Posit浮点数为负数,尾数字段为补码,由于补码算法会导致进位,原本应该将Posit浮点数的指数加1,在补充隐藏位时,将1作为符号位,置于最高位,1作为整数位,补11,但实际补充10,在尾数字段的隐藏位补充10,尾数字段的整数位是2,抵消了负数的Posit浮点数的尾数字段因补码算法本因导致的指数增加。
[0100] 完整尾数字段计算模块207,用于将所述多个完整尾数字段分别对应到各自在所述目标运算中的运算位置,并按所述目标运算进行运算,得到运算结果的尾数字段和运算结果的符号字段;
[0101] 在目标运算是加法时,完整尾数字段计算模块内置有将零值字段置为零的电路,输入Posit浮点数的运算处理器的中间数据包含六个字段:无穷数字段、零值字段、符号字段、指数字段、尾数字段以及保护位字段,Posit浮点数的运算处理器输出的运算结果依然包括六个字段:运算结果的无穷数字段、运算结果的零值字段、运算结果的符号字段、运算结果的指数字段、运算结果的尾数字段以及运算结果的保护位字段,完整尾数字段计算模块内置的电路,在完整尾数字段计算模块得到的运算结果的尾数字段的每一位都为零时,将运算结果的零值字段置为真。完整尾数字段计算模块内置的用于将运算结果的零值字段置为零电路可以复用第一零值字段处理模块的电路结构。
[0102] 指数字段计算模块208,用于得到分别对应所述多个中间数据的多个指数字段,将所述多个指数字段对应到各自在所述目标运算中的运算位置,并按所述目标运算进行运算得到运算结果的指数字段;
[0103] 在目标运算是加法时,目标运算中的运算位置是加数,在目标运算是乘法时,目标运算中的运算位置是乘数,在目标运算是减法时,目标运算中的运算位置是减数和被减数,在目标运算是FMA时,目标运算中的运算位置是加数、乘数。
[0104] 将多个完整尾数字段和指数字段分别对应到各自在其目标运算中的运算位置,实质是,判断完整尾数字段和指数字段所对应的目标运算是加法、减法、乘法中的哪一种运算,以及完整尾数字段和指数字段所属的中间数据本身的大小特性等,对接收的多个完整尾数字段和多个指数字段进行区分。因中间数据以使其各自所在的相关电路,对完整尾数字段做进一步的运算。将多个指数字段分别对应到各自在其目标运算中的运算位置,以使其各自所在的相关电路,对指数字段做进一步的处理,并对指数字段做进一步的相关运算。因此,将多个完整尾数字段和多个指数字段分别对应到各自在其目标运算中的运算位置的意义是,在目标运算是乘法时,以乘法相关电路处理获得的指数字段和完整尾数字段,在目标运算是加法时,以加法相关电路处理获得的指数字段和完整尾数字段。
[0105] 在乘法相关电路将多个指数字段和多个完整尾数字段进行乘法运算前,还需进一步利用范围确定模块等电路模块,按照乘法所需的乘数格式,对多个指数字段和多个完整尾数字段进行处理。在加法相关电路将多个指数字段和多个完整尾数字段进行加法运算前,还需进一步利用差值计算模块等电路模块,按照加法所需的加数格式,对多个指数字段和多个完整尾数字段进行处理。继续参考图3,具体尾数处理模块中的电路器件逻辑如下:
[0106] 本申请一种实施例提出进行加法运算时,相关电路的组成和电路逻辑。
[0107] 所述尾数字段处理模块包括:移位器件以及以下子模块;
[0108] 差值计算子模块206‑3,用于在所述目标运算是加法运算时,得到更大数的指数字段与更小数的指数字段的差值;所述更大数是所述多个中间数据中具有最大指数字段的中间数据;所述更小数是所述多个中间数据中具有最小指数字段的中间数据;
[0109] 尾数移位子模块206‑4,用于在所述目标运算是加法运算时,根据所述差值,以所述移位器件对所述更小数的尾数字段向右移位,以使所述正数拼接子模块或所述负数拼接子模块再对移位后的所述尾数字段补充符号位,得到所述更小数的完整尾数字段。
[0110] 补充符号位也可以是算术右移。
[0111] 保护位保留子模块206‑5,用于在所述目标运算是加法运算时,在所述更小数的尾数字段向右移位过程中,在所述更小数的尾数字段的末尾增加值为0的三位作为运算保护位;
[0112] 运算保护位作为加法运算中的保护位,对更小数的精确程度进行保护。
[0113] 在目标运算是加法时,尾数字段处理模块206的差值计算子模块以获取的多个指数字段比较多个中间数据的大小,以指数字段最小的中间数据作为更小数,以指数字段最大的中间数据作为更大数,得到最大指数字段和最小指数字段的差值,再将差值、以及更大数和更小数的判断结果,输入到尾数移位子模块以及保护位保留子模块;
[0114] 其中,保护位保留子模块对更小数的尾数字段的末尾增加保护位,以对右移的更小数的尾数字段进行舍入操作,保证更小数的尾数字段的精确度。尾数移位子模块根据差值,将更小数对应的尾数字段右移相应的位数,以使更大数和更小数的尾数字段的小数点的位置对齐,在将小数点对齐后的更大数的尾数字段补充隐藏位,得到更大数的完整尾数字段,同时也将小数点对齐后的更小数的尾数字段补充隐藏位,得到更小数的完整尾数字段。可以理解的是更小数的完整尾数字段的最低三位为保护位,运算保护位不参与运算。
[0115] Posit浮点数标准中规定了三位保护位GRS分别称作Guard,Round,Sticky。
[0116] 示例地,参与加法运算的两个指定格式为Posit<8,1>,的Posit浮点数分别是:0|10|1|1000和0|10|0|1011,其中0|10|1|1000的指数大于0|10|0|1011的指数,0|10|1|1000是更大数,0|10|0|1011是更小数,0|10|1|1000的指数字段是编码指数字段1和regime字段
10的取值字段拼接后的字段,regime字段10的值为0,因此0|10|1|1000的编码指数字段1和
0的拼接字段是1,同理0|10|0|1011的指数字段是0,差值计算子模块得到0|10|1|1000与0|
10|0|1011的指数字段的差值是1,差值计算模块将差值1输入尾数移位子模块以及保护位保留子模块继续以下处理:将更小数的1011拼接运算保护位000,将1011右移一位0101|
100,1右移入保护位000,运算保护位变成100。100不参与运算。对1000补充隐藏位得到01|
1000,对0101|100补充隐藏位得到01|0101|100。01|1000和01|0101|100分别为更大数和更小数的完整尾数字段。
[0117] 尾数字段处理模块得到完整尾数字段后,将其输入完整尾数字段计算模块,完整尾数字段计算模块207依据加法运算对更小数的完整尾数字段和更大数的完整尾数字段相加。本申请提出的完整尾数字段计算模块还包括符号计算子模块207‑1,以对参与加法运算的Posit浮点数的符号进行加法运算,直接得到补码的符号结果,作为运算结果的符号字段,进而避免了计算过程中反复的正负符号判断。
[0118] 参考图4,图4是本申请实施例提出的完整尾数字段计算模块的结构示意图。
[0119] 完整尾数字段计算模块包括:异或器件以及如下子模块:
[0120] 符号计算子模块207‑1,用于在所述目标运算是加法时,得到对应多个中间数据的多个尾数字段中的多个扩展位,以所述异或器件,对所述多个扩展位执行第一异或操作,再以所述异或器件,对所述第一异或操作的结果,与对所述多个完整尾数字段执行所述目标运算后产生的进位执行异或操作,得到所述运算结果的符号字段;
[0121] 扩展位包括补充的隐藏位和符号位,符号计算子模块只对符号进行加法运算,因此对多个扩展位执行第一异或操作指的是对符号位进行异或操作,即对中间数据的符号字段进行异或操作。由于异或操作的实质是两个输入都是0或都是1时,输出为0;当两个输入一个是1一个是0时,输出为1,0加0依然为0,1加1进位,当前位依然为0,1加0当前位为1,可以看做二进制的加法运算,因此可以将完整尾数字段中的扩展位的符号位单独取出,进行加法运算。完整尾数字段进行加法运算后,补充的扩展位需要存在进位的情况,但符号相加不存在进位,因此以符号异或的结果对完整尾数字段相加后进位的最高位进行异或,得到运算结果的符号字段。
[0122] 第一异或操作是对符号字段的异或操作,第二异或操作是对第一异或操作的结果和完整尾数字段的相加后的最高位进行的异或操作。
[0123] 示例地,进行加法运算的两个完整尾数字段是01|1100和10|1000,符号位异或得到1,01|1100与10|1000相加后得到100|0100,产生进位,将1与1异或,得到符号字段是0,即01|1100和10|1000相加后的运算结果的符号字段是0,在指数字段相同的情况下,01|1100和10|1000相加的结果是正数。
[0124] 完整尾数字段计算模块207包括所述拼接器件、反码型前导零检测电路器件以及如下子模块;拼接子模块207‑2,用于在所述目标运算是加法运算时,拼接所述运算结果的符号字段、所述运算结果的尾数字段和所述运算保护位,得到拼接字段;
[0125] 尾数字段确定子模块207‑3,用于在所述目标运算是加法运算时,以所述反码型前导零检测电路器件,检测所述拼接字段中的无效位,以舍弃所述无效位后的所述拼接字段的小数位,作为所述运算结果的尾数字段;
[0126] 运算保护位对由运算结果的符号字段和运算结果的尾数字段拼接形成的拼接字段进行舍入。若拼接字段的所有位的值都为0,完整尾数字段计算模块可以确定运算结果的尾数字段为0,编码电路接收到运算结果的尾数字段为0的以补码形式的中间数据表示的运算结果时,输出零值的编码。若拼接字段并非所有位的值都为0,则通过反码型前导零检测电路器件检测拼接电路的无效位,无效位是最高位后,第一个非零位之前的所有位数。对于科学技术法,尾数是不包括无效位。相应地,需要以无效位的位数对运算结果的指数字段进行修正。
[0127] 示例地,若拼接字段是1|011,其中1是运算结果的符号字段,无效位是1位。
[0128] 反向前导零检测电路器件利用二分电路,通过将拼接字段多次折半,得到多个位宽为2的输入字段,以异或器件对多个位宽为2的输入字段的第0位和所述多个位宽为2的输入字段的第1位进行或运算,得到所述多个输出字段的第1位;以取反器件分别对多个位宽为2的输入字段的第0位进行取反运算,再以所述或器件,分别对多个取反结果和多个位宽为2的输入字段的第1位进行或运算,得到多个输出字段的第0位。
[0129] 示例地,假设拼接字段是000001,通过二分电路得到的多个的位宽为2的输入字段是(00)、(00)、(01)。再以子电路对每个位宽为2的输入字段进行检测,得到每个位宽为2的输入字段中0的个数的反码。
[0130] 以多个位宽为2的输入字段中的(01)进行说明,“1”是输入字段(01)的第0位,“0”是输入字段(01)的第1位,“1”取反后得到“0”,“0”与“0”进行或运算,得到0,作为(01)对应的输出字段的第0位。同理得到输出字段的第1位是1,(01)对应的输出字段是“10”,同理,以子电路对(00)进行计算,得到(00)对应的输出字段是01,进而输出拼接字段的取值的反码[(01)(01)(10)]。
[0131] 得到拼接的取值的反码[(01)(01)(10)]后,对“10”取反得到“01”,01即为(01)中0的个数,表示(01)中有1个0。对01取反,01取反得到10,10即(00)中0的个数,表示(00)中有2个0。进而得到多个位宽为2的输入字段[(00)(00)(01)]的检测结果是[(2)+(2)+(1)],即000001中一共有5个0。出去最高位的符号位,拼接字段的无效位的位数是4。
[0132] 加法的指数计算,取更大数的指数字段,再以无效位修正更大数的指数字段,得到运算结果的指数字段。因此完整尾数字段计算模块的尾数字段确定子模块无效位后,将无效位输入指数字段计算模块,指数字段计算模块208在接收到多个指数字段后,将其对应到加法运算,并区分得到更小数和更大数,取更大数的指数字段,并将更大数的指数字段减去无效位的位数,得到运算结果的指数字段。
[0133] 所述指数字段计算模块208包括:
[0134] 指数字段确定子模块208‑1,用于以所述无效位的位数,修正所述更大数的指数字段,得到所述运算结果的指数字段;
[0135] 运算结果确定模块209,用于将所述运算结果的尾数字段、所述运算结果的指数字段和所述运算结果的符号字段作为所述目标运算的运算结果数据输出给编码电路,以通过所述编码电路根据所述计算指令中的指定格式,将所述运算结果数据转换为所述指定格式的Posit浮点数。
[0136] 所述运算处理器还包括:
[0137] 第二保护位结果确定模块210,用于在所述目标运算是加法运算时,取舍弃所述无效位后的所述拼接字段的小数位的最低三位,作为所述运算结果的保护位字段。
[0138] 运算结果确定模块也会将运算结果的保护位字段输给编码电路。
[0139] 如果待解码Posit浮点数编码的尾数字段是所有位全部为0的特殊情况,由于Posit浮点数是补码形式的编码,因此在Posit浮点数是正数时,尾数字段的隐藏位按1处理;在Posit浮点数是负数时,Posit浮点数编码的尾数字段的隐藏位按‑2(10.000…)处理。假设Posit浮点数是负数,那么所有位全部为0的尾数字段(00000)实际上是(1111),在得到(1111)的补码过程中,必定会产生进位,将隐藏位减1,同时因隐藏位是‑2,需要将指数字段减1,因此,在Posit浮点数是负数时,中间数据的尾数字段的隐藏位按2(10.000…)处理。
[0140] 根据上述分析可知,解码电路102得到的尾数字段的取值范围是[‑2,‑1)∪[1,2)。由于中间数据的尾数字段的取值范围是[‑2,‑1)∪[1,2),在左移舍弃无效位时,需要保证舍弃后的尾数是1.xxx、‑1.xxx或‑2.000。
[0141] 继续参考图2和图1,运算结果确定模块209将指数字段计算模块和完整尾数字段计算模块分别计算得到的,运算结果的尾数字段、运算结果的指数字段和运算结果的符号字段输入编码电路104,编码电路将中间数据编码得到Posit浮点数编码的过程,是解码电路102将Posit浮点数编码解码得到中间数据的逆过程。需在运算结果的指数字段取出编码指数字段和regime字段,以算术右移和填充的方式,依次拼接运算结果的符号字段、regime字段、运算结果的尾数字段,再对拼接后的字段进行舍入操作,最后得到Posit浮点数编码。
[0142] 本申请另一种实施例提出进行乘法运算时,相关电路的组成和电路逻辑。
[0143] 所述中间数据还包括保护位字段;所述完整尾数字段计算模块包括:
[0144] 范围确定子模块207‑4,用于在所述目标运算是乘法时,根据所述尾数字段的取值范围,确定所述运算结果的尾数字段的取值范围;
[0145] 继续参考图4,用于在目标运算是乘法时,完整尾数字段计算模块将参与运算的Posit浮点数对应的中间数据的尾数字段进行乘法运算,具体地以尾数字段处理模块输出的完整尾数字段进行乘法运算。并确定运算结果的尾数字段所在的取值范围。
[0146] 解码电路102解码得到的中间数据的尾数字段的取值范围是:取值范围是[‑2,‑1)∪[1,2),由此得到两个中间数据的尾数字段相乘的取值范围是(‑4,‑1)∪[1,4],若运算结果的尾数字段位于(‑4,‑1)∪[1,4]中的子范围(‑4,‑2)∪[2,4)时,需要以第一指数修正子模块对运算结果的指数字段加1;若运算结果的尾数字段为4时,需要以第一指数修正子模块对运算结果的指数字段加2。注意在运算结果的尾数字段为‑2时,不需要不需要以第一指数修正子模块修正运算结果的指数字段。因此,范围确定子模块需要确定运算结果的尾数字段所在区间,以使第一指数修正子模块对应根据运算结果的尾数字段所在区间进行对指数运算结果进行修正。
[0147] 所述指数字段计算模块包括:
[0148] 第一指数修正子模块208‑2,用于在所述目标运算是乘法时,根据所述运算结果的尾数字段所在的取值区间,对所述运算结果的指数字段进行修正,得到修正后的运算结果的指数字段;
[0149] 在目标运算是乘法运算时,指数字段计算模块对中间数据的指数字段相加,完整尾数字段计算模块对中间数据的尾数字段相乘。
[0150] 所述完整尾数字段计算模块包括:截取器件以及以下子模块:
[0151] 尾数字段选取模块207‑5,用于在所述目标运算是乘法时,根据所述修正后的运算结果的指数字段,以所述截取器件在尾数字段乘积结果中,从高位到低位截取固定位宽的小数位,作为所述运算结果的尾数字段;其中,所述固定位宽为所述中间数据中尾数字段的位宽。
[0152] 符号确定子模块207‑6,用于在所述目标运算是乘法运算时,以所述多个完整尾数字段执行所述目标运算后的最高位作为所述运算结果的符号字段。
[0153] 由于本申请实施例的乘法是补码乘法运算,完整尾数字段计算模块对完整尾数字段相乘后得到的运算结果的最高位是运算结果的符号字段。
[0154] 两个完整数据字段的乘积的位宽为两倍中间数据的尾数位宽再加4,其中最高4位是整数位,剩余的为指数修正前的小数位。根据第一指数修正子模块对指数字段乘积的修正后,得到的运算结果的指数字段截取隐藏位后面所有的小数位,选取开头的若干位为尾数,位宽就是Posit浮点数的运算处理器规定用于处理尾数的位宽。剩余的小数位构成GRS位,用于编码时的舍入操作。
[0155] 示例地,假设完整尾数字段计算模块中两个完整数据字段的乘积是0001|0100,0001是整数位,若修正后的运算结果的指数字段要加1,那么对应截取的小数位是10100。
[0156] 所述运算处理器还包括:
[0157] 第一保护位结果确定模块211,用于在所述目标运算是乘法时,将截取所述固定位宽的小数位后的尾数字段乘积结果中,剩余的小数位的最高三位构成运算结果的保护位字段,并输出所述运算结果的保护位字段。
[0158] 在目标运算是减法时,以减数转换模块对多个中间数据中的减数进行处理,转换为补码,再以尾数字段处理模块、完整尾数字段和计算模块指数字段计算模块等模块,对多个中间数据个各个字段分别做加法运算。
[0159] 减数转换模块,在所述目标运算是减法时,将参与所述目标运算的减数对应的中间数据进行转换为所述减数的相反数的补码。
[0160] 具体可以利用取反逻辑电路将减数取反加1,得到减数的相反数的补码。
[0161] Posit浮点数的运算处理器处理FMA时,可以综合加法运算的相关电路和乘法运算的相关,先将两个中间数据相乘,然后用所得的乘积去与第三个中间数据进行加法。由于乘积的位宽是两倍的尾数位宽,所有FMA相比普通的先乘后加有更高的精度。
[0162] 本申请实施例提出的Posit浮点数的运算处理器,以尾数字段处理模块对解码电路得到的中间数据的尾数字段扩展隐藏位和符号位,以使完整尾数字段计算模块可以直接对补码形式的中间数据的尾数字段进行补码加法运算,以及补码乘法运算,得到运算结果的尾数字段和运算结果的符号字段,再结合指数字段计算模块直接对中间数据的指数字段进行运算,利用运算结果的尾数字段调整或修正加法运算中更大数指数字段,和两个中间数据的乘积,得到运算结果的指数字段,运算电路简单,没有冗余的用于正负符号判断的逻辑电路,也没有冗余的用于补码和原码相互转换的电路,进而使得Posit浮点数的运算处理器整体的电路面积较小,运算时各个模块分别得到运算结果的指数字段、运算结果的尾数字段、运算结果的符号字段、运算结果的保护位字段,由于运算结果的指数字段和输入的指数字段都是补码形式的中间数据,计算逻辑简单,不涉及补码和原码的转换,进而使得Posit浮点数的运算处理器计算效率较高。
[0163] 本申请独创的Posit浮点数的运算处理器,能够对Posit浮点数的运算处理系统的解码电路解码得到补码型的中间数据进行加、减、乘、FMA运算,即该Posit浮点数的运算处理器能够独立进行补码加法运算、补码乘法运算和补码减法运算。
[0164] 尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
[0165] 在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0166] 以上对本申请所提供的一种Posit浮点数的运算处理器以及运算处理系统,进行了详细介绍,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。