一种浮点数处理方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别涉及一种浮点数处理方法及装置。
【背景技术】
[0002]GPU (Graphics Processing Unit,图形处理单元),又称图形处理器、显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。
[0003]目前,GPU的浮点数计算性能比CPU的浮点数计算性能高很多,因此,GPU也被主要应用于浮点数计算。
[0004]但是,GPU制造商处于成本和市场划分的考虑,在高端GPU产品上会保留双精度浮点数的硬件计算单元,在中低端GPU产品上会缩减双精度浮点数的硬件计算单元,这就导致中低端GPU产品的双精度浮点数计算能力较差,甚至不具备双精度浮点数计算能力。
【发明内容】
[0005]本发明实施例的目的在于提供一种浮点数处理方法及装置,以使中低端GPU产品具备高精度浮点数的计算能力或提高中低端GPU产品对高精度浮点数的计算能力。
[0006]为达到上述目的,本发明实施例公开了一种浮点数处理方法,包括:
[0007]获得第一目标浮点数X和第二目标浮点数Y,其中,X = 2Ex*Mx,Y = 2Ey*MY;
[0008]获得X与Y的运算法则,所述运算法则为乘法或除法;
[0009]判断X和Y是否均不为零;
[0010]如果X和Y均不为零,则对阶所述第一目标浮点数X和所述第二目标浮点数Y,以使所述第一目标浮点数X和所述第二目标浮点数Y的阶码相同,其中,若Ex多Ey,则对阶后
Y= 2Ex*My ',若 Ex〈Ey,则对阶后 X = 2Ey*Mx';
[0011]根据获得的运算法则以及对阶后的X和Y的阶码,计算最终结果的阶码;
[0012]将对阶后的X和Y的尾数分别进行分段,并将每段数据转换成单精度浮点数;
[0013]根据获得的运算法则,分别计算X的尾数的每段数据与Y的尾数的每段数据的结果;
[0014]根据计算得到的X的尾数的每段数据与Y的尾数的每段数据的结果,生成最终的尾数;
[0015]根据生成的最终的尾数和计算得到的最终结果的阶码,生成计算结果;
[0016]对生成的计算结果规格化处理,得到最终计算结果。
[0017]可选的,所述第一目标浮点数和/或所述第二目标浮点数,包括:
[0018]双精度浮点数;或单精度扩展浮点数;或双精度扩展浮点数;或满足预设表达式的浮点数。
[0019]可选的,所述预设表达式,包括:
[0020](_1)S*M*2E,其中,
[0021](-1)?符号位;M为有效数字,且I彡M < 2 ;E为阶码。
[0022]可选的,尾数分段的位数不大于11。
[0023]可选的,若Ex ^ Ey,所述将对阶后的X和Y的尾数分别进行分段,并将每段数据转换成单精度浮点数,包括:
[0024]X的尾数
[0025]Mx= M χη* (Μδ ) n+Mxn ^ (Μδ )η 丄+…+Mxn ^ (ΜΔ )η 彳…+Mx0* (ΜΔ ) °;
[0026]Y的尾数
[0027]My- = My- η*(ΜΛ )n+My- η ^(Ma)" 4…+My, η ^(Ma )η 彳…+My, 0*(ΜΔ )°;其中,
[0028]η ^ i ^ O ;ΜΔ = 2m;m < 11 ;
[0029]若Ex〈Ey,所述将对阶后的X和Y的尾数分别进行分段,并将每段数据转换成单精度浮点数,包括:
[0030]X的尾数
[0031]Mx, = Mx, η*(ΜΛ )n+Mx, n !*(MA)n k…+Mx, n ^(ΜΔ )n …+Mx, 0*(ΜΔ )?;
[0032]Y的尾数
[0033]My= M yn* (Μδ ) n+Myn ^ (Μδ )η k…+Myn 产(ΜΔ )η J+…+My0* (ΜΔ ) °;
[0034]其中,
[0035]η ^ j ^ O ;Μδ = 2m;m <11。
[0036]为达到上述目的,本发明实施例公开了一种浮点数处理装置,包括:浮点数获得模块、运算法则获得模块、判断模块、对阶模块、第一计算模块、分段转换模块、第二计算模块、尾数生成模块、计算结果生成模块和规格化模块,其中,
[0037]所述浮点数获得模块,用于获得第一目标浮点数X和第二目标浮点数Y,其中,X =2Ex*Mx,Y = 2Ey*MY;
[0038]所述运算法则获得模块,用于获得X与Y的运算法则,所述运算法则为乘法或除法;
[0039]所述判断模块,用于判断X和Y是否均不为零;
[0040]所述对阶模块,用于在所述判断模块判断X和Y均不为零的情况下,对阶所述第一目标浮点数X和所述第二目标浮点数Y,以使所述第一目标浮点数X和所述第二目标浮点数
Y的阶码相同,其中,若Ex彡Ey,则对阶后Y = 2Ex*My丨,若Ex〈Ey,则对阶后X = 2Ey*Mx丨;
[0041]所述第一计算模块,用于根据所述运算法则获得模块获得的运算法则以及所述对阶模块对阶后的X和Y的阶码,计算最终结果的阶码;
[0042]所述分段转换模块,用于将对阶后的X和Y的尾数分别进行分段,并将每段数据转换成单精度浮点数;
[0043]所述第二计算模块,用于根据所述运算法则获得模块获得的运算法则,分别计算X的尾数的每段数据与Y的尾数的每段数据的结果;
[0044]所述尾数生成模块,用于根据所述第二计算模块计算得到的X的尾数的每段数据与Y的尾数的每段数据的结果,生成最终的尾数;
[0045]所述计算结果生成模块,用于根据所述尾数生成模块生成的最终的尾数和所述第一计算模块计算得到的阶码,生成计算结果;
[0046]所述规格化模块,用于对所述计算结果生成模块生成的计算结果规格化处理,得到最终计算结果。
[0047]可选的,所述第一目标浮点数和/或所述第二目标浮点数,包括:
[0048]双精度浮点数;或单精度扩展浮点数;或双精度扩展浮点数;或满足预设表达式的浮点数。
[0049]可选的,所述预设表达式,包括:
[0050](_1)S*M*2E,其中,
[0051](_1)5为符号位;M为有效数字,且I彡M < 2 ;E为阶码。
[0052]可选的,尾数分段的位数不大于11。
[0053]可选的,若Ex彡Ey,所述分段转换模块,具体用于:
[0054]X的尾数
[0055]Mx= M χη* (Μδ ) n+Mxn ^ (Μδ )η 4 …+Mxn ^ (ΜΔ )η 彳…+Mx0* (ΜΔ ) °;
[0056]Y的尾数
[0057]My- = My- η*(ΜΛ )n+My- η ^(Ma)" 4…+My, η ^(Ma )η 彳…+My, 0*(ΜΔ )°;其中,
[0058]η ^ i ^ O ;ΜΔ = 2m;m < 11 ;
[0059]若Ex〈Ey,所述分段转换模块,具体用于:
[0060]X的尾数
[0061]Mx, = Mx, η*(ΜΛ )n+Mx, n !*(MA)n k…+Mx, n ^(ΜΔ )n …+Mx, 0*(ΜΔ )?;
[0062]Y的尾数
[0063]My= Myn*(Μδ )n+Myn ^(Μδ )η 4…+Myn 产(ΜΔ )η J+…+My0*(ΜΛ )。;其中,
[0064]n ^ j ^ O ;Μδ = 2m;m ^ Il0
[0065]由上述的技术方案可见,本发明实施例提供了一种浮点数处理方法及装置,方法包括:获得第一目标浮点数X和第二目标浮点数Y,其中,X = 2Ex*Mx,Y = 2Ey*MY;获得X与Y的运算法则,所述运算法则为乘法或除法;判断X和Y是否均不为零;如果X和Y均不为零,则对阶所述第一目标浮点数X和所述第二目标浮点数Y,以使所述第一目标浮点数X和所述第二目标浮点数Y的阶码相同,其中,若Ex彡Ey,则对阶后Y = 2Ex*My',若Ex〈Ey,则对阶后X = 2Ey*Mx';根据获得的运算法则以及对阶后的X和Y的阶码,计算最终结果的阶码;将对阶后的X和Y的尾数分别进行分段,并将每段数据转换成单精度浮点数;根据获得的运算