一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

浮点数运算方法及装置与流程

2022-02-24 14:45:43 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种浮点数运算方法及装置。


背景技术:

2.在计算机技术领域,浮点数(float point,fp)主要用于表示小数,且浮点数通常由三部分组成,即符号位、指数位和尾数位。其中,符号位可以为1比特(bit),指数位和尾数位可以为多个比特(bits),以典型的16位浮点数(fp16)为例,则指数位可以为5bits、尾数位可以为10bits。浮点数计算是一种常用的计算方式,可被应用于人工智能、深度学习和高性能计算等多个场景中。
3.在浮点数计算中,对于计算的多个浮点数,需要执行指数位对齐操作,比如,如图1所示,对于16bits的浮点数计算a b,在执行指数位对齐操作时会使b的尾数右移,若尾数计算暂存器的位宽为11bits,则会导致b的尾数的一部分比特位丢失,从而产生浮点计算过程中的精度损失。
4.通常通过增加计算过程中尾数的缓存位宽来降低浮点计算的精度损失。比如,对于16bits的浮点数,采用22bits的缓存位宽,这样在执行对齐操作时可以降低尾数丢失的问题。但是,增加尾数的缓存位宽会增加硬件成本,同时随着缓存位宽的增加会带来更多的功耗,进而影响浮点计算的可靠性和性能。


技术实现要素:

5.本发明提供一种浮点数运算方法及装置,用于减少浮点数运算过程中因为阶码对齐操作而导致的精度损失。
6.第一方面,提供一种浮点数运算方法,该方法可由计算设备中的处理器来执行,该方法包括:处理器根据预存关系确定第一浮点数的第一存储位置和第二浮点数的第二存储位置,预存关系用于记录浮点数运算中多个浮点数排序结果和每个浮点数的存储位置的对应关系,其中,该预存关系中包括多个浮点数按照阶码排序的排序结果和每个浮点数的存储位置的对应关系,比如,该多个浮点数排序结果可以是按照该多个浮点数的阶码的大小顺序进行排序得到的;处理器根据第一存储位置和第二存储位置分别获取第一浮点数和第二浮点数,第一浮点数和第二浮点数可以是相差较小的两个浮点数,比如,第一浮点数和第二浮点数的阶码相同;处理器根据浮点数运算的类型,完成第一浮点数和第二浮点数的运算处理,比如,该浮点数运算的类型可以为加法或者乘法。
7.上述技术方案中,由于该预存关系用于记录浮点数运算中多个浮点数排序结果和每个浮点数的存储位置的对应关系,从而使得处理器可以根据该预存关系确定第一浮点数的第一存储位置和第二浮点数的第二存储位置,第一浮点数和第二浮点数可以是阶码相同或相差较小的两个浮点数,后续再根据这两个存储位置分别获取第一浮点数和第二浮点数之后完成这两个浮点数的运算时,则可无需执行阶码对齐操作或者减小阶码对齐操作中尾数右移的比特数,从而可以减少了因为阶码对齐操作而导致的精度损失,同时也加快了计
算效率。
8.在一种可能的实现方式中,预存关系以索引表形式存储,索引表包括索引值和索引值关联的浮点数的存储位置的对应关系,索引值的数量大于或等于第一值,第一值根据浮点数的阶码进行设置,比如,第一值为2的浮点数的阶码次方;或者,该预存关系以链表形式存储。上述可能的实现方式中,提供了两种可能的预存关系的存储形式,其中以索引表形式存储时可以提高查询该预存关系的效率,以链表形式存储时可以节省该预存关系所占用的存储空间。
9.在一种可能的实现方式中,该方法还包括:处理器确定多个浮点数中的每个浮点数的阶码,以得到多个阶码;处理器按照该多个阶码从小到大或从大到小的顺序,分别存储多个阶码中每个阶码对应的浮点数,以得到该多个浮点数排序结果,该多个浮点数中的每个浮点数占用一个存储位置,每个存储位置中可以仅存储有浮点数的符号位和尾数位,该多个浮点数排序结果和每个浮点数的存储位置的对应关系用于形成预存关系。上述可能的实现方式中,通过将该多个浮点数按照该多个浮点数的阶码大小进行排序,后续可以按照该排序结果对多个浮点数进行浮点数运算,从而在浮点数运算过程中可无需执行阶码对齐操作或者减小阶码对齐操作中尾数右移的比特数,从而可以减少了因为阶码对齐操作而导致的精度损失。
10.在一种可能的实现方式中,该存储位置设置有标志位,该方法还包括:在存储多个阶码中每个阶码对应的浮点数之后,处理器将每个阶码对应的浮点数所占用的存储位置的标志位设置为有效;相应的,在根据第一存储位置和第二存储位置分别获取第一浮点数和第二浮点数之后,处理器将第一存储位置的标志位和第二存储位置的标志位均设置为无效。上述可能的实现方式中,通过及时地设置存储位置的有效或无效,可以使得该存储位置被有效地用于存储不同的浮点数,从而提高存储空间的利用率,节省内存。
11.在一种可能的实现方式中,当浮点数运算的类型为加法时,处理器完成第一浮点数和第二浮点数的运算处理,包括:处理器将第一浮点数的符号位和尾数位与第二浮点数的符号位和尾数位相加。上述可能的实现方式中,当该浮点数运算的类型为加法时,可无需执行阶码对齐操作,从而减少了因为阶码对齐操作而导致的精度损失,同时也加快了计算效率。
12.在一种可能的实现方式中,当浮点数运算的类型为乘法时,处理器完成第一浮点数和第二浮点数的运算处理,包括:处理器将第一浮点数的阶码和第二浮点数的阶码相加,以及将第一浮点数的符号位和尾数位与第二浮点数的符号位和尾数位相加。上述可能的实现方式中,当该浮点数运算的类型为乘法时,可无需执行阶码对齐操作,从而减少了因为阶码对齐操作而导致的精度损失,同时也加快了计算效率。
13.在一种可能的实现方式中,该浮点数运算是按照多个浮点数排序结果中多个浮点数的阶码从小到大的顺序执行的。上述可能的实现方式中,该浮点数运算通过按照阶码从小到大的顺序执行,可以减少了因为阶码对齐操作而导致的精度损失,同时也加快了计算效率。
14.在一种可能的实现方式中,该预存关系包括多个子对应关系,多个子对应关系中的任一子对应关系均可用于记录浮点数运算中多个浮点数排序结果和每个浮点数的存储位置的对应关系。上述可能的实现方式中,当不同的子对应关系用于支持不同组的浮点数
运算时,可以实现不同浮点数运算的同时执行。
15.在一种可能的实现方式中,该多个子对应关系中存在至少两个子对应关系记录的浮点数的类型不同。上述可能的实现方式中,可以实现不同浮点数类型的多个浮点数之间的浮点数运算,从而可以降低不同类型的浮点数运算的精度损失,加快计算效率。
16.第二方面,提供一种浮点数运算装置,该装置可以为pcie卡、soc、处理器,以及包括上述硬件的服务器等;其中,该装置包括:获取单元,用于根据预存关系确定第一浮点数的第一存储位置和第二浮点数的第二存储位置,预存关系用于记录浮点数运算中多个浮点数排序结果和每个浮点数的存储位置的对应关系;获取单元,还用于根据第一存储位置和第二存储位置分别获取第一浮点数和第二浮点数;运算单元,用于根据浮点数运算的类型,完成第一浮点数和第二浮点数的运算处理。
17.在一种可能的实现方式中,该预存关系中包括多个浮点数按照阶码排序的排序结果和每个浮点数的存储位置的对应关系。
18.在一种可能的实现方式中,该预存关系以索引表形式存储,索引表包括索引值和索引值关联的浮点数的存储位置的对应关系,索引值的数量大于或等于第一值,第一值根据浮点数的阶码进行设置,比如,第一值为2的浮点数的阶码次方。
19.在一种可能的实现方式中,该预存关系以链表形式存储。
20.在一种可能的实现方式中,该装置还包括:排序单元,用于:确定多个浮点数中的每个浮点数的阶码,以得到多个阶码;按照多个阶码从小到大或从大到小的顺序,分别存储多个阶码中每个阶码对应的浮点数,以得到多个浮点数排序结果,多个浮点数中的每个浮点数占用一个存储位置,多个浮点数排序结果和每个浮点数的存储位置的对应关系用于形成预存关系。
21.在一种可能的实现方式中,该存储位置设置有标志位,排序单元还用于:在存储多个阶码中每个阶码对应的浮点数之后,将每个阶码对应的浮点数所占用的存储位置的标志位设置为有效;相应的,获取单元,还用于:在根据第一存储位置和第二存储位置分别获取第一浮点数和第二浮点数之后,装置还包括:将第一存储位置的标志位和第二存储位置的标志位均设置为无效。
22.在一种可能的实现方式中,该当浮点数运算的类型为加法时,运算单元还用于:将第一浮点数的符号位和尾数位与第二浮点数的符号位和尾数位相加。
23.在一种可能的实现方式中,该当浮点数运算的类型为乘法时,运算单元还用于:将第一浮点数的阶码和第二浮点数的阶码相加,以及将第一浮点数的符号位和尾数位与第二浮点数的符号位和尾数位相加。
24.在一种可能的实现方式中,该浮点数运算是按照多个浮点数排序结果中多个浮点数的阶码从小到大的顺序执行的。
25.在一种可能的实现方式中,该预存关系包括多个子对应关系,多个子对应关系中的任一子对应关系均可用于记录浮点数运算中多个浮点数排序结果和每个浮点数的存储位置的对应关系。
26.在一种可能的实现方式中,该多个子对应关系中存在至少两个子对应关系记录的浮点数的类型不同。
27.第三方面,一种浮点数运算装置,该装置包括:处理器和存储器,该存储器中存储
有计算机程序,该处理器执行该存储器中存储的计算机程序,以使该装置执行上述第一方面或者第一方面的任一项可能的实现方式所提供的浮点数运算方法的操作步骤。
28.第四方面,提供一种可读存储介质,该可读存储介质中存储有指令,当该可读存储介质在设备上运行时,使得该设备执行第一方面或者第一方面的任一项可能的实现方式所提供的浮点数运算方法的操作步骤。
29.第五方面,提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得该计算机执行第一方面或者第一方面的任一项可能的实现方式所提供的浮点数运算方法的操作步骤。
30.可以理解地,上述提供的任一种浮点数运算方法的装置、计算机存储介质或者计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
31.本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
32.图1为本实施例提供的一种浮点数运算过程中尾数右移的示意图;
33.图2为本实施例提供的一种计算设备的结构示意图;
34.图3为本实施例提供的一种处理器的结构示意图;
35.图4为本实施例提供的一种浮点数运算方法的流程示意图;
36.图5为本实施例提供的一种预存关系的示意图;
37.图6为本实施例提供的一种存储浮点数的示意图;
38.图7为本实施例提供的一种浮点数运算的示意图;
39.图8为本实施例提供的一种fscu的示意图;
40.图9为本实施例提供的一种浮点数运算装置的结构示意图。
具体实施方式
41.首先,在介绍本实施例之前,对本实施例所涉及的浮点数的类型进行解释说明。
42.浮点数(float point,fp)主要用于表示小数,通常由三部分组成,即符号(sign)位、指数(exponent)位和尾数(mantisa)位,该指数位也可以称为阶码,下文中均称其为阶码。其中,符号位可以为1比特(bit),阶码和尾数位可以为多个比特(bits)。浮点数通常可以包括三种格式(format),即半精度浮点数、单精度浮点数和双精度浮点数,具体如下所述。
43.半精度浮点数(half-precision floating-point):是计算机使用的一种二进制的数据类型,在计算机存储器中占用16bits(即占用2个字节),也可以简称为fp16。半精度浮点数可表示的数值的绝对值范围大约为[6.10
×
10-5
,6.55
×
104]。
[0044]
单精度浮点数(single-precision floating-point):是计算机使用的一种二进制数据类型,在计算机存储器中占用32bits(即4个字节),也可以简称为fp32。单精度浮点数可表示的数值的绝对值范围大约为[1.18
×
10-38
,3.40
×
10
38
]。
[0045]
双精度浮点数(double precision floating point):是计算机使用的一种二进
制的数据类型,在计算机存储器中占用64bits(即占用8个字节),也可以简称为fp64。双精度浮点数可以表示十进制的15位或16位有效数字,可表示的数值的绝对值范围大约为[2.23
×
10-308
,1.80
×
10
308
]。
[0046]
下面的表1分别示出了上述三种浮点数的一种存储格式。其中,在fp16占用的16bits中,符号位占用1bit、阶码占用5bits、尾数位占用10bits;在fp32占用的32bits中,符号位占用1bit、阶码占用8bits、尾数位占用23bits;在fp64占用的64bits中,符号位占用1bit、阶码占用11bits、尾数位占用52bits。
[0047]
表1
[0048] 符号位指数位(阶码)尾数位fp161bit5bits10bitsfp321bit8bits23bitsfp641bit11bits52bits
[0049]
图2为本实施例提供的一种计算设备的结构示意图,该计算设备可以是终端、网络设备或者服务器等具有计算能力的设备。参见图2,该计算设备可以包括存储器201、处理器202、通信接口203和总线204,存储器201、处理器202以及通信接口203通过总线204相互连接。
[0050]
其中,存储器201可用于存储数据、软件程序以及模块,主要包括存储程序区和存储数据区,存储程序区可存储操作系统、至少一个功能所需的应用程序等,存储数据区可存储该设备的使用时所创建的数据等。比如,该操作系统可以包括linux操作系统、unix操作系统或者window操作系统等;该至少一个功能所需的应用程序(application,app)可以包括人工智能(artificial intelligence)相关的app、高性能计算(high performance computing,hpc)相关的app、深度学习(deep learning)相关的app或者计算机图形(computer graphics,cg)相关的app等。在一种可能的示例性中,存储器201包括但不限于静态随机存储器(static ram,sram)、动态随机存储器(dynamic ram,dram)、同步动态随机存储器(synchronous dram,sdram)或者高速随机存取存储器等。进一步的,存储器201还可以包括其他非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0051]
另外,处理器202用于对该计算设备的操作进行控制管理,比如通过运行或执行存储在存储器201内的软件程序和/或模块,以及调用存储在存储器201内的数据,执行该计算设备的各种功能和处理数据。在一种可能的示例性中,处理器202包括但不限于中央处理单元(central processing unit,cpu)、网络处理单元(network processing unit,npu)、图形处理器(graphics processing unit,gpu)、应用专用集成电路(application specific integrated circuit,asic),现场可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、逻辑电路或者其任意组合。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器202也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等。
[0052]
通信接口203用于实现该计算设备与外部设备进行通信。其中,通信接口203可以包括输入接口和输出接口。该输入接口可用于获取下文方法实施例中的多个浮点数。在一
些可行的实施例中,该输入接口可以只有一个输入接口,也可以有多个输入接口。该输出接口可用于输出下文方法实施例中的运算结果。在一些可行的实施例中,该运算结果可以由处理器直接输出,也可以先被存储于存储器中,然后经存储器输出。在另一些可行的实施例中,可以只有一个输出接口,也可以有多个输出接口。
[0053]
总线204可以是外设部件互连标准(peripheral component interconnect express,pcie)总线,或者扩展工业标准结构(extended industry standard architecture,eisa)总线等。总线204可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0054]
在本实施例中,处理器202可以包括浮点数存储计算单元(float point store calculate unit,fscu),该fscu可用于支持该处理器执行下述方法实施例中的一个或者多个步骤。本实施例中的预存关系可以存储在该fscu中,也可以存储在存储器201中,或者通过单独的寄存器存储等。在实际应用中,该fscu可以是asic、fpga或者逻辑电路等,当然该fscu也可以通过软件实现,本技术实施例对此不作具体限制。
[0055]
进一步的,该处理器202还可以包括cpu、gpu或npu等其他处理单元中的一个或者多个。如图3所示,以该处理器202包括cpu 1和fscu 2为例,fscu 2可以与cpu 1集成在一起(比如,fscu 2集成在cpu 1所在的soc的内部),也可以与cpu 1并列单独设置(比如,fscu 2以pcie卡的形式设置),具体如图3中的(a)和图3中的(b)所示。进一步的,该cpu 1中还可以包括控制器(controller)11、一个或者多个算术逻辑单元(arithmetic logic unit,alu)12、缓存器(cache)13和内存管理单元(memory management unit,mmu)14等。图3中以存储器201为动态随机存储器dram为例进行说明。
[0056]
图4为本实施例提供的一种浮点数运算方法的流程示意图,该方法可由本文所提供的计算设备中的处理器来执行,该方法可以包括以下几个步骤:
[0057]
s301:根据预存关系确定第一浮点数的第一存储位置和第二浮点数的第二存储位置,该预存关系用于记录浮点数运算中多个浮点数排序结果和每个浮点数的存储位置的对应关系。
[0058]
其中,该多个浮点数排序结果可以是按照从小到大的顺序对该多个浮点数进行排序得到的,也可以是按照从大到小的顺序对该多个浮点数进行排序得到的。
[0059]
可选的,该预存关系以链表形式存储;或者,该预存关系以索引表形式存储,该索引表包括多个索引值和该多个索引值中每个索引值关联的浮点数的存储位置的对应关系,该多个索引值的数量大于或等于第一值,第一值为2的浮点数的阶码次方。比如,若浮点数的阶码为11bits,则第一值可以为2
11
;若浮点数的阶码为8bits,则第一值可以为28;浮点数的阶码为5bits,则第一值可以为25。
[0060]
在一种可能的实施例中,该预存关系中包括多个浮点数按照阶码排序的排序结果和每个浮点数的存储位置的对应关系。
[0061]
下面以索引表形式为例对该预存关系进行举例说明。示例性的,该多个索引值可以是连续的多个阶码,该多个阶码的位宽可以相同,即该多个阶码中每个阶码占用的比特数量是相同。连续的多个阶码可以是指该多个阶码所表示的数值大小是连续的。比如,该多个阶码的位宽为5bits,连续的多个阶码所表示的数值(以十进制表示)大小可以包括0至31(即0至2
5-1);或者,该多个阶码的位宽为8bits,连续的多个阶码所表示的数值(以十进制
表示)大小可以包括0至255(即0至2
8-1);或者,该多个阶码的位宽为11bits,连续的多个阶码所表示的数值(以十进制表示)大小可以包括0至2047(即0至2
11-1)。
[0062]
另外,该预存关系中的每个索引值可以对应至少一个存储位置,从而该预存关系可以包括多个存储位置,该多个存储位置对应的存储空间可以是一段连续的存储空间,该连续的存储空间可以位于该计算设备的存储器(比如,内存或者dram)中,该多个存储位置可以分别通过首地址和指针来指示。该多个存储位置中的每个存储位置可以用于存储一个浮点数。
[0063]
示例性的,假设该多个阶码的位宽均为11bits,该多个索引值包括0至2047,则该预存关系参见图5所示。在图5中,0至2047表示连续的多个索引值,add_0至add_2047分别表示0至2047对应的存储地址集合,add_0至add_2047所对应的存储空间可以位于dram中,每个索引值对应的存储地址集合可以包括一个或者多个存储地址,即每个索引值在dram中可以对应一个或者多个存储位置,图5中以p0至pn(n为大于1的整数)表示这一个或者多个存储位置。
[0064]
进一步的,该预存关系可以包括多个子对应关系,该多个子对应关系中的任一子对应关系均可用于记录该浮点数运算中多个浮点数排序结果和每个浮点数的存储位置的对应关系。其中,当该预存关系包括两个以上的子对应关系时,每个子对应关系集记录的浮点数的类型可以不同。本技术中用于进行浮点数运算的多个浮点数可以包括不同类类型的浮点数,且不同类型的浮点数可以通过用于记录对应类型的子对应关系进行存储记录。比如,该多个子对应关系包括第一子对应关系和第二子对应关系,第一子对应关系用于记录的浮点数的类型为fp16,第二子对应关系用于记录的浮点数的类型为fp32。
[0065]
比如,该预存关系中共包括2048个索引值且对应2048个存储地址集合:假设该预存关系被划分为64个第一子对应关系且每个第一子对应关系包括的多个索引值是相同的),每个第一子对应关系可以包括32个索引值,该32个索引值具体可以包括0至31;或者,假设该预设预存关系被划分为8个第二子对应关系且每个第二子对应关系包括的多个索引值是相同的,每个第二子对应关系可以包括256个索引值,这256个索引值具体可以包括0至255;或者,假设该预存关系被划分为36个子对应关系,且存在32个第一子对应关系和4个第二子对应关系,第一子对应关系包括32个索引值,第二子对应关系包括256个索引值。
[0066]
具体的,第一浮点数和第二浮点数可以是阶码相同,或者,第一浮点数和第二浮点数可以是阶码相差在预设值范围内的两个浮点数,其中,预设值可以根据历史数据获得的统计值(例如,平均值)或人为设定的经验值。以这两个浮点数的阶码相同且均为第一阶码为例,在将该多个浮点数的阶码作为多个索引值时,该第一阶码可以作为第一索引值,第一索引值可以是该多个索引值中的任一索引值,比如,第一索引值可以按照从小到大的顺序依次遍历该多个索引值中的每个索引值,并对于每个索引值按照本文中的步骤进行浮点数运算。本文中以第一索引值为例,则该处理器可以根据第一索引值查询该预存关系,该预存关系包括多个索引值中每个索引值与浮点数的存储位置之间的对应关系,由此实现该处理器可以根据该预存关系确定第一索引值对应的第一浮点数的第一存储位置和第二浮点数的第二存储位置。
[0067]
进一步的,在s301之前,对于多个浮点数中的每个浮点数,该方法还可以包括在每个索引值对应的存储位置中存储同一阶码的浮点数的过程,即下文中所描述的s300的过
程。相应的,参见图4,该方法还包括:s300。
[0068]
s300:确定多个浮点数中每个浮点数的阶码以得到多个阶码,并按照该多个阶码从小到大或从大到小的顺序,分别存储多个阶码中每个阶码对应的浮点数,以得到多个浮点数排序结果。
[0069]
其中,该多个浮点数中的每个浮点数占用一个存储位置,该存储位置可存储有该浮点数的符号位和尾数位,而不存储该浮点数的阶码,该多个浮点数排序结果和每个浮点数的存储位置的对应关系可用于形成该预存关系。
[0070]
具体的,多个浮点数中的每个浮点数,该处理器可以将该浮点数拆分为阶码、符号位和尾数位,该符号位和尾数位可以拼接为一个新的浮点数,为便于描述,可以将该符号位和该尾数位拼接得到的浮点数称为拼接浮点数。因此,该多个浮点数经过拆分处理可以对应得到多个阶码和多个拼接浮点数,这多个拼接浮点数可以被存储在该预存关系包括的多个存储位置中。每个浮点数对应的拼接浮点数可以根据该浮点数的阶码作为索引值时对应的存储位置进行存储,即根据该预存关系确定该阶码作为索引值时对应的存储位置,从而根据该存储位置存储该拼接浮点数。
[0071]
示例性的,结合图5,假设该多个浮点数的数量为8个且分别表示为fp16_1至fp16_8,该预存关系中的多个索引值分别为0至7,若这8个浮点数中的fp16_1至fp16_3的阶码所表示的数值均为2、fp16_5和fp16_8的阶码所表示的数值均为3、fp16_4和fp16_7的阶码所表示的数值均为4、fp16_6的阶码所表示的数值为7,则fp16_1至fp16_3对应的拼接浮点数存储在add_2对应存储位置中,fp16_5和fp16_8对应的拼接浮点数存储在add_3对应存储位置中,fp16_4和fp16_7存储在add_4对应存储位置中,fp16_6存储在add_7对应存储位置中。
[0072]
s302:根据第一存储位置和第二存储位置分别获取第一浮点数和第二浮点数。
[0073]
其中,该预存关系中每个索引值可以对应多个存储位置,每个存储位置均可用于存储一个浮点数,从而每个索引值下可用于存储多个浮点数,每个存储位置的位宽可以大于或等于一个浮点数所占用的比特数量。比如,每个存储位置可用于存储一个包括符号位和尾数位的浮点数,从而该存储位置的位宽可以大于或等于该符号位和该尾数位的位宽之和,以fp16表示的浮点数为例,则该存储位置的位宽可以大于或等于11(即1bit的符号位和10bits的尾数位的位宽之和)。
[0074]
另外,每个索引值对应的一个或者多个存储位置中可以存储有至少一个浮点数,即该一个或者多个存储位置中可以存储有一个或者多个浮点数。该至少一个浮点数可以包括经过拆分得到的拼接浮点数,即将浮点数的符号位和尾数位拆分出来并拼接得到的拼接浮点数;和/或,该至少一个浮点数包括多个拼接浮点数经过浮点数运算得到的浮点数运算结果。这里的多个拼接浮点数未经拆分时的浮点数可以是fp16格式的浮点数、fp32格式的浮点数或者fp64格式的浮点数等,本技术实施例对此不作具体限制。
[0075]
具体的,当确定第一存储位置和第二存储位置时,该处理器可以从第一存储位置中获取第一浮点数,从第二存储位置中获取第二浮点数,这里的第一浮点数和第二浮点数可以是上文中的拼接浮点数。
[0076]
可选的,该处理器可以通过一次读取操作来同时获取第一浮点数和第二浮点数,也可以通过两次读取操作、每次读取一个浮点数的方式来获取第一浮点数和第二浮点数。
[0077]
在一种可能的实施例中,每个存储位置设置有一个标志位,该标志位可用于表示
该存储位置上存储的浮点数的有效性。比如,该标志位为1bit,若该1bit的值为第一数值,则可以用于指示该存储位置上存储的浮点数有效,若该1bit的值为第二数值,则可以用于指示该存储位置上存储的浮点数无效。其中,第一数值可以为1、第二数值为0,或者第一数值为0、第二数值可以为1。
[0078]
可选的,每个浮点数可以通过如下表2所示的格式存储在每个存储位置中。在表2中,每个存储位置可以包括符号位、尾数位和标志位三部分。其中,符号位和标志位可以均占用1bit,尾数位可以占用多个bits,比如,尾数位可以占用10bits、23bits或者52bits等。
[0079]
表2
[0080]
符号位尾数位标志位1bit5bits1bits
[0081]
相应的,当获取第一浮点数和第二浮点数之后,该处理器还可以将第一存储位置的标志位和第二存储位置的标志位均设置为无效。比如,当标志位的1bit的值为“0”时表示无效时,该处理器可以将第一存储位置的标志位和第二存储位置的标志位均设置为“0”。同理,在上述s300中,该处理器还可以在存储多个浮点数之后,将上述多个浮点数对应的拼接浮点数所在的存储位置的标志位设置为有效。
[0082]
s303:根据浮点数运算的类型,完成第一浮点数和第二浮点数的运算处理,得到第一运算结果。
[0083]
当该处理器获取到第一浮点数和第二浮点数时,由于第一浮点数和第二浮点数对应的阶码是相同的,则该处理器无需执行阶码对齐操作,可直接根据第一浮点数和第二浮点数进行浮点数运算,以得到第一运算结果,进而降低因为阶码对齐操作而导致的精度损失。
[0084]
具体的,当该述浮点数运算的类型为加法时,该处理器可以将第一浮点数的符号位和尾数位与第二浮点数的符号位和尾数位相加,以得到第一运算结果;当该述浮点数运算的类型为乘法时,该处理器可以将第一浮点数的阶码和第二浮点数的阶码相加,以及将第一浮点数的符号位和尾数位与第二浮点数的符号位和尾数位相加,以得到第一运算结果。之后,该处理器可以将第一运算结果存储在寄存器中,用于与其他的浮点数或者运算结果进行计算;或者,该处理器按照上述s300的方式将第一运算结果存储在预存关系中(具体参见下文中的s304-s305),之后在使用第一运算结果时可从该预存关系中对应获取第一运算结果。
[0085]
可选的,对于多个索引值中的每个索引值,该处理器均可以按照上述s301-s303对每个索引值对应的存储位置中的浮点数进行计算,且该处理器可以按照索引值从小到大的顺序依次进行计算,即按照阶码从小到大的顺序依次进行计算,图4中标记为306。由于同一索引值对应的多个存储位置中存储的浮点数对应的阶码是相同的,该处理器无需执行阶码对齐操作,从而降低了因为阶码位对齐操作而导致的精度损失。
[0086]
进一步的,参见图4,在s303之后,该方法还包括:s304,或者s304-s305。
[0087]
s304:根据第一运算结果和第一阶码,确定第二阶码和第二运算结果,第二阶码大于第一阶码。
[0088]
具体的,当该处理器得到第一运算结果、且第一运算结果和第一阶码所表示的计算结果是上述多个浮点数的中间计算结果时,该处理器还可以将第一运算结果和第一阶码
所表示的计算结果进行拆分,以得到第二阶码和第二运算结果,第二运算结果可以包括符号位和尾数位。其中,第二阶码可以是第一阶码所表示的数值加1,第二运算结果中的尾数位可以由第一运算结果的尾数位右移一位得到。
[0089]
s305:根据该预存关系确定第二阶码作为索引值时对应的存储位置,并根据该存储位置存储第二运算结果。
[0090]
当确定第二阶码和第二运算结果时,该处理器可以查询该预存关系,以确定第二阶码作为索引值时对应的存储位置,从而将第二运算结果存储在第二阶码作为索引值时对应的存储位置中。可选的,该处理器可以将第二运算结果存储在第二阶码作为索引值时对应的多个存储位置中的首次出现标志位为无效的存储位置,并将第二运算结果所在的存储位置的标志位设置为有效。
[0091]
示例性的,结合图5,如图6所示,假设第二阶码所表示的数值为2,第二阶码作为索引值时对应的存储位置为add_2,且add_2对应的多个存储位置中的第3个存储位置和第5个存储位置的标志位均为无效,由于第3个存储位置是首个出现标志位为无效的存储位置,则该处理器可以将第二运算结果存储在第3个存储位置中,并将第3个存储位置的标志位设置为有效。
[0092]
进一步的,对于该多个索引值中的每个索引值,该处理器均可以按照索引值从小到大的顺序,即按照阶码从小到大的顺序依次(图4中标记为s306),根据本文所描述的方法依次对每个索引值下存储的浮点数进行计算。当得到最大索引值对应的存储位置中的浮点数的计算结果时,即得到上述多个浮点数的最终计算结果,上述最大索引值可以是该多个索引值中的最大索引值,也可以是存储有浮点数的存储为孩子对应的最大索引值。
[0093]
为便于理解,下面以图7所示的处理器的结构框图为例,对本技术所提供的技术方案进行举例说明。如图7所示,该处理器包括:fscu 401、存储单元402和运算单元403。假设多个浮点数的数量为16且分别表示为a0至a15,多个索引值包括0至7、且对应的存储地址集合分别为add0至add7,则该方法具体可以包括以下步骤。
[0094]
步骤1.对于a0至a15中每个浮点数,fscu 401确定每个浮点数的阶码和拼接浮点数。具体的,如图8所示,fscu 401可以包括浮点数拆分子单元、拼接子单元、选择器和对应关系生成器,浮点数拆分子单元具体用于将浮点数的符号位、阶码和尾数位拆分开,拼接子单元用于将该浮点数拆分得到的符号位和尾数位拼接为拼接浮点数,选择器用于输出将同一阶码对应的拼接浮点数通过同一接口输出至对应关系生成器,该对应关系生成器用于生成上文中预存关系。比如,如图7所示,a2、a5和a15的阶码均为0,a3和a12的阶码均为1,a1的阶码为2,a8、a9和a13的阶码均为3,a4和a6的阶码均为4,a10的阶码为5,a7、a11和a14的阶码均为6,a0的阶码为7,a0至a15对应的拼接浮点数分别表示为a0’至a15’。
[0095]
步骤2.fscu 401将每个浮点数的阶码作为索引值,以将该浮点数的拼接浮点数存储在存储单元402中对应的存储位置。具体的,将a2’、a5’和a15’存储在add_0对应的存储位置,将a3’和a12’存储在add_1对应的存储位置,将a1’存储在add_2对应的存储位置,将a8’、a9’和a13’存储在add_3对应的存储位置,将a4’和a6’存储在add_4对应的存储位置,将a10’存储在add_5对应的存储位置,将a7’、a11’和a14’存储在add_6对应的存储位置,将a0’存储在add_7对应的存储位置。
[0096]
步骤3.运算单元403按照多个索引值从小到大的顺序,依次计算每个索引值对应
的存储位置中存储的拼接浮点数。具体的,运算单元403首先获取最小索引值对应的存储地集合址add_0,根据add_0获取a2’、a5’和a15’并计算以得到计算结果r1;之后,运算单元403获取次小索引值对应的存储地集合址add_1,根据add_1获取a3’和a12’,并计算r1、a3’和a12’以得到计算结果r2。类似的,运算单元403再按照类似的方式依次计算索引值为2至7对应的存储位置中存储的拼接浮点数,当得到索引值为7时的计算结果时,即得到a0至a15的浮点数运算的最终结果。
[0097]
在本实施例中,该处理器通过确定多个浮点数中每个浮点数的阶码以得到多个阶码,并按照多个阶码从小到大或从大到小的顺序,分别存储多个阶码中每个阶码对应的浮点数,以得到多个浮点数排序结果,这样在进行浮点数运算时,可以按照阶码从小到大的顺序,依次对阶码相同的两个浮点数或者阶码相差在预设值范围内的两个浮点数进行计算。其中,上述预设值可以是根据处理器计算不同阶码的浮点数运算的速度、功耗和效率等因素确定,也可以根据历史数据的统计值确定,还可以根据人为经验确定。由于这两个浮点数对应的阶码相同或者相差较小,处理器无需执行阶码对齐操作或者可以减少浮点数的尾数右移的比特数量,从而减少了因为阶码对齐操作而导致的精度损失,同时也加快了计算效率。此外,该方法在保证一定精度的情况下,还可以有效降低尾数计算的缓存位宽,从而节省硬件成本。该方案具体是在多个浮点数的存储过程中进行排序,从而可以提升性能,又减少计算时排序的额外开销(即功耗降低),同时还能保证计算的精度。
[0098]
上述主要从计算设备的角度对本实施例提供的浮点数运算方法进行了介绍。可以理解的是,该计算设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的网元及算法步骤,本技术能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0099]
本技术实施例可以根据上述方法示例对浮点数运算装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本技术实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0100]
在采用对应各个功能划分各个功能模块的情况下,图9示出了上述实施例中所涉及的浮点数运算装置的一种可能的结构示意图。其中,该装置可以为pcie卡、soc、处理器,以及包括上述硬件的服务器等;或者,该装置可以如软件形式实现,并被存储在存储介质中。
[0101]
参见图9,该装置包括:获取单元501和运算单元502。其中,获取单元501用于支持该装置执行方法实施例中的s301和s302;运算单元502用于支持该装置执行方法实施例中的s303,和/或用于本文所描述的技术的其他过程。可选地,该装置还包括:排序单元503。其中,排序单元503用于支持该装置执行方法实施例中的s300、s304或者s305等。
[0102]
上面从模块化功能实体的角度对本技术实施例中的一种浮点数运算装置进行描述,下面从硬件处理的角度对本技术实施例中的一种浮点数运算装置进行描述。
[0103]
本技术实施例提供一种浮点数运算装置,该装置的结构可以如图2所示,该装置具体可以为pcie卡、soc、处理器,以及包括上述硬件的服务器等。参见图2,该装置包括:存储器201、处理器202、通信接口203和总线204。其中,通信接口203可以包括输入接口和输出接口。
[0104]
其中,处理器202可以被配置为执行上述方法实施例中的s300-s305中的一个或者多个步骤。在一些可行的实施例中,处理器202可以包括fscu,该fscu可用于支持该处理器执行上述方法实施例中的一个或者多个步骤。本技术方法实施例中的预存关系可以存储在该fscu中,也可以存储在存储器201中,或者通过单独的寄存器存储等。在实际应用中,该fscu可以是asic、fpga或者逻辑电路等,当然该fscu也可以通过软件实现,本技术实施例对此不作具体限制。
[0105]
需要说的是,本技术实施例提供的上述浮点数运算装置的各组成部分分别用于实现相对应的前述方法实施例的各步骤的功能,由于在前述的方法实施例中,已经对各步骤进行了详细说明,在此不再赘述。
[0106]
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,ssd)。
[0107]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何在本技术揭露的技术范围内的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献