CN116700666A - 一种浮点数处理方法及装置 - Google Patents
一种浮点数处理方法及装置 Download PDFInfo
- Publication number
- CN116700666A CN116700666A CN202210174714.9A CN202210174714A CN116700666A CN 116700666 A CN116700666 A CN 116700666A CN 202210174714 A CN202210174714 A CN 202210174714A CN 116700666 A CN116700666 A CN 116700666A
- Authority
- CN
- China
- Prior art keywords
- floating point
- processing
- result
- mantissa
- exponent
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 10
- 238000012545 processing Methods 0.000 claims abstract description 293
- 238000004364 calculation method Methods 0.000 claims abstract description 162
- 238000000034 method Methods 0.000 claims abstract description 28
- 230000008569 process Effects 0.000 claims abstract description 16
- 238000007781 pre-processing Methods 0.000 claims description 98
- 238000006243 chemical reaction Methods 0.000 claims description 11
- 239000000654 additive Substances 0.000 claims description 5
- 230000000996 additive effect Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 5
- 238000009877 rendering Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 1
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 239000002674 ointment Substances 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Nonlinear Science (AREA)
- General Engineering & Computer Science (AREA)
- Advance Control (AREA)
Abstract
本公开提供了一种浮点数处理方法,包括:中央处理器识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令发送至硬件加速器;硬件加速器将根据该处理指令将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种浮点数处理方法及装置。
背景技术
为了满足各类应用需求,需要硬件加速器具备对浮点数进行加法计算或者乘法计算的能力。然而,目前市面上的硬件加速器,通常只具有对部分精度浮点数进行计算的ALU(算数逻辑单元),或者对整数进行计算的ALU,如果想要硬件加速器实现对全部精度的浮点数进行加法计算或者乘法计算,则需要设计和开发用于对各种精度浮点数进行计算的ALU,这种方式增加了硬件的设计复杂度,同时也需要较长的研发周期。
发明内容
针对上述技术问题,本公开提供一种浮点数处理方法及装置,技术方案如下。
根据本公开的第一方面,提供一种浮点数处理方法,包括:
中央处理器识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令发送至硬件加速器;
硬件加速器根据所述处理指令执行:
将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;
将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;
根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
在一个实施例中,所述中央处理器识别待执行预定计算的两个浮点数,基于识别结果生成处理指令时,具体是识别待执行预定计算的两个浮点数,针对每个浮点数确定对其尾数和指数的预处理方式,以及对预处理结果进行处理的方式,针对确定的两类处理方式生成处理指令。
在一个实施例中,所述预定计算为乘法计算;所述将所述两个浮点数的指数分别作为整数进行对应于所述预定计算的处理,得到指数处理结果,包括:
对每个浮点数的指数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的指数的预处理结果进行相加,得到指数处理结果;
所述将所述两个浮点数的尾数分别作为整数进行对应于所述预定计算的处理,得到尾数处理结果,包括:
对每个浮点数的尾数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的尾数的预处理结果进行相乘,得到尾数处理结果。
在一个实施例中,所述预定计算为加法计算;
所述将所述两个浮点数的指数分别作为整数进行对应于所述预定计算的处理,得到指数处理结果,包括:
针对所述两个浮点数,调用整数算数逻辑单元ALU对所述两个浮点数的指数进行比较,将指数较小的浮点数确定为第一浮点数,将指数较大的浮点数确定为第二浮点数;
将第一浮点数的指数进行预处理调整为第二浮点数的指数,并确定调整后的指数为指数处理结果;
所述将所述两个浮点数的尾数分别作为整数进行对应于所述预定计算的处理,得到尾数处理结果,包括:
根据对第一浮点数的指数的调整对第一浮点数的尾数进行移位;
针对移位后的第一浮点数的尾数,以及第二浮点数的尾数分别进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对两个尾数的预处理结果进行相加,得到尾数处理结果。
在一个实施例中,所述根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果,包括:
将所述尾数处理结果作为所述两个浮点数执行所述预定计算的结果的尾数,将所述指数处理结果作为所述两个浮点数执行所述预定计算的结果的指数。
根据本公开实施例的第二个方面,提供了一种浮点数处理装置,包括中央处理器以及硬件加速器;
所述中央处理器,用于识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令以及所述两个浮点数发送至硬件加速器;
硬件加速器,用于根据所述处理指令执行:
将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;
将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;
根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
在一个实施例中,所述中央处理器,具备用于识别待执行预定计算的两个浮点数,针对每个浮点数确定对其尾数和指数的预处理方式,以及对预处理结果进行处理的方式,针对确定的两类处理方式生成处理指令。
在一个实施例中,所述预定计算为乘法计算;
所述硬件加速器,具体用于对每个浮点数的指数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的指数的预处理结果进行相加,得到指数处理结果。
在一个实施例中,所述硬件加速器,具体用于对每个浮点数的尾数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的尾数的预处理结果进行相乘,得到尾数处理结果。
在一个实施例中,所述预定计算为加法计算;
所述硬件加速器,具体用于针对所述两个浮点数,调用整数算数逻辑单元ALU对所述两个浮点数的指数进行比较,将指数较小的浮点数确定为第一浮点数,将指数较大的浮点数确定为第二浮点数;将第一浮点数的指数进行预处理,调整为第二浮点数的指数,并确定调整后的指数为指数处理结果。
在一个实施例中,所述硬件加速器,具体用于根据对第一浮点数的指数的调整对第一浮点数的尾数进行移位;针对移位后的第一浮点数的尾数,以及第二浮点数的尾数分别进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对两个尾数的预处理结果进行相加,得到尾数处理结果。
在一个实施例中,所述硬件加速器,具体用于将所述尾数处理结果作为所述两个浮点数执行所述预定计算的结果的尾数,将所述指数处理结果作为所述两个浮点数执行所述预定计算的结果的指数。
根据本公开实施例的第三个方面,提供了一种电子设备,包括上述浮点数处理装置。
根据本公开实施例的第四个方面,提供了一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
根据本公开实施例的第五个方面,提供了一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令发送至硬件加速器,以使硬件加速器将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,此处所说明的附图用来提供对本公开的进一步理解,构成本公开的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本公开实施例的一种单精度浮点数组成示意图;
图2为本公开实施例的一种确定浮点数平方根的装置的结构示意图;
图3为本公开实施例的一种对浮点数尾数进行预处理的示意图;
图4为本公开实施例的另一种对浮点数尾数进行预处理的示意图;
图5为本公开实施例的一种浮点数处理方法的流程示意图;
图6为本公开实施例的一种浮点数处理方法的逻辑示意图;
图7为本公开实施例的一种硬件加速器的结构示意图。
具体实施方式
为了使本公开实施例中的技术方案及优点更加清楚明白,下面将结合附图对本公开实施例中的技术方案及优点进一步详细的说明,显然,所描述的实施例仅仅是本公开的一部分实施例,而不是全部的实施例,需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合,基于本公开中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
在本公开中使用的术语是仅仅是为了描述特定实施例,而非为了限制申请的保护范围。在本公开中,除非上下文清楚地表示其他含义,否则所使用的单数形式的“一种”、“所述”和“该”也包括复数形式。还应当理解,本文中使用的术语“和/或”包括列出的多个相关联项目的任意或所有可能组合。
应当理解,尽管在本公开可能采用术语“第一”、“第二”等等来描述各种信息,但是这些信息不应当受这些术语限制。这些术语仅用来将一种类型的信息与另一种类型的信息区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果、例如”可以被解释成为“在……时”或“当……时”或“响应于确定”。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
图形处理、机器学习等技术在不断迭代更新,随之而来的,这类技术对计算机设备的计算要求越来越高,计算机设备中的中央处理器CPU的计算压力也越来越大,因此,目前业界会采用硬件加速器来分担中央处理器的计算压力,硬件加速器可以理解为专门用于计算的硬件产品,其会接收中央处理器发送的指令,并根据指令进行相应的计算,并将计算结果返回给中央处理器,常见的硬件加速器包括GPU(Graphics Processing Unit,图形处理器)、TBU(Tensor Processing Unit,张量处理器)等,本公开对此不进行限定。
在硬件加速器中通常会以硬件形式预先配置多种算术逻辑单元(arithmetic andlogic unit),即实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU,用于对不同数据进行计算。其中,一种ALU只能专用于处理某种数据的计算,例如,用于对单精度浮点数进行计算的ALU无法对双精度浮点数进行计算,用于对整数进行计算的ALU,无法对浮点数进行计算等。
如上述描述的内容,为了满足各类应用需求,如为了追求更极致的渲染画面,目前需要硬件加速器具备对浮点数(如64位浮点数)进行乘法计算或者加法计算的能力,即需要计算两个浮点数的积或者计算两个浮点数的和。然而,目前市面上的硬件加速器,通常仅具有对部分浮点数进行计算的ALU,尤其是仅具备对低精度浮点数(如精度低于64位的浮点数)进行计算的ALU,以及具备对整数进行计算的ALU,如果想要实现对高精度浮点数进行乘法计算或者加法计算,则需要开发硬件即需要设计和开发用于对高精度浮点数进行加法计算以及进行乘法计算的ALU,这种方式增加了硬件的设计复杂度,同时也增加了产品的研发周期。
为了解决上述问题,本公开提出中央处理器对待计算的两个浮点数进行识别,并基于识别结果生成处理指令发送至硬件加速器,硬件加速器可以根据处理指令将浮点数的尾数部分和指数部分,分别作为整数进行计算处理,得到尾数处理结果以及指数处理结果,并根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
为了便于对本公开中的技术方案进行描述,下面先对浮点数进行说明:
浮点数是一种数字表示方式,采用浮点数可以表达各种实数,在计算机***的发展过程中曾经提出过多种方法来表达实数,例如相对于浮点数的定点数,在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。比如,货币的表达就可以采用这种方式,如99.00或00.99可以用于表达具有小数点后有两位的货币。但是由于在定点数中,小数点的位置固定,不利于表达特别大或特别小的数,因此目前绝大多数计算机***采用了浮点数的表达方式来表达实数。
在浮点数中,用一个尾数(Mantissa),一个基数(Base),一个指数(Exponent),以及一个表示正负的符号来表达实数。比如,121.1可以表达为1.211*102,其中,1.211为尾数,10为基数,2为指数,浮点数利用指数表达了浮动小数点的效果,从而可以表达更大范围的实数。
由于在计算机中数值的表达都是基于二进制的,因此在计算机中,浮点数的基数默认为2,另外,尾数的位数被称为浮点数的精度。例如浮点数1.001101×24的精度为7。
在IEEE(美国电气和电子工程师学会)中规定了多种浮点格式,常见的包括单精度浮点数、双精度浮点数、扩展双精度浮点数等。其中,单精度浮点数是32位的,即一个单精度浮点数需要占用连续的32位,其中符号占1位,指数占8位,尾数占23位,还有一个隐含位。双精度浮点数是64位的,其中,符号占1位,指数占11位,尾数占52位,还有一个隐含位。扩展双精度浮点数是80位的,其中符号占1位,指数占15位,尾数占64位。IEEE754标准规定一个实数V可以用:V=(-1)s×M×2E的形式表示,其中S为符号,其可以为0表示浮点数为正数,可以为1表示浮点数为负数,M为尾数,E为指数。
如图1所示,为单精度浮点数(32位浮点数)在计算机中存储时的示意图,其中,该单精度浮点数在计算机中共占用32位(4字节),其中该连续的32位中,分为三个域,包括:符号域、指数域以及尾数域,其中保存的值分别用于表示给定单精度浮点数中的符号,指数和尾数,因此通过尾数以及可以调节的指数就可以表达给定的数值了。
如图1所示,符号域位宽为1位,0代表正,1代表负。指数也称为阶码,指数域位宽为8位。存储值为0—255,为了应对负数的情况,需要将实际的指数加上一个偏差值(Bias)作为保存在指数域中的值,偏差值为2(指数位数-1)-1,单精度的偏差值为2(8-1)-1=127,因此,在指数域中的值为指数的实际值加上127,因此,该8位的指数可以表示的实际值是-127—128。比如,单精度的实际指数值0在指数域中将保存为127;而保存在指数域中的64则表示实际的指数值-63。
尾数域位宽为23位,包括小数点右侧的23个小数位,即尾数的小数部分,尾数还包括一个隐藏的整数位,即尾数的整数部分,因此虽然只有23个小数位的尾数被存储,但是尾数位的总精度为24位。
同理,双精度浮点数(64位浮点数)在计算机中存储时共占用64位(8字节),其中该连续的64位中,分为三个域,包括:符号占1位、指数占11位,尾数占52位。根据上述内容可知,不同精度的浮点数在计算机中存储的形式不同。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
如图2所示,为本公开提出的一种浮点数处理装置的结构示意图,其中包括中央处理器CPU 210以及硬件加速器220。
中央处理器在获取待执行预定计算的两个浮点数后,可以对两个浮点数进行识别,其中,该两个浮点数为相同精度的浮点数,且具体为硬件加速器不具备直接处理能力的浮点数,例如目前硬件加速器通常具有FP16(16位浮点数)的ALU以及整数ALU,即硬件加速器可以对FP16以及整数进行计算处理,而待执行预定计算的两个浮点数均为FP64,即64位浮点数,硬件加速器无法直接对64位浮点数进行识别和计算。
因此,在本步骤中,中央处理器在获取待执行预定计算的两个浮点数后,对两个浮点数进行识别,并基于识别结果以及预定计算的类型生成处理指令,将生成的处理指令发送至硬件加速器。通常情况下,中央处理器与硬件加速器相比其可以识别各种精度的浮点数,因此其可以识别两个浮点数的精度类型以及浮点数的大小。
在本步骤中,中央处理器识别出了两个浮点数后,可以基于预设软件处理逻辑确定针对每个浮点数尾数和指数的预处理方式,以及对预处理结果进一步进行处理的方式,并将确定出的两类处理方式编译为硬件加速器可以执行的硬件处理指令。
具体的,中央处理器可以是识别出两个浮点数的尾数域、指数域和符号域,并预定计算的类型确定对每个浮点数的尾数以及指数的预处理方式。
下面以预定计算的类型为乘法,中央处理器确定的对浮点数的预处理方式进行说明,以两个浮点数均为FP64即64位浮点数为例进行举例说明,其尾数为52位,指数为11位,如无特殊说明,下文中均以浮点数为64位浮点数为例。
在预定计算的类型为乘法计算时:
中央处理器针对每个浮点数的尾数确定的预处理方式可以是:对每个浮点数的尾数进行拆分或转化处理,以得到满足所要调用的整数ALU计算要求的预处理结果,其中,该预处理结果为整数。
具体的,中央处理器可以是根据硬件加速器所要调用的整数ALU的类型,确定对尾数进行拆分或转化的具体方式,以使后续能够调用该整数ALU对预处理的结果即得到的整数,进行计算处理。
可以理解的是,中央处理器可以知晓硬件加速器所具有的全部整数ALU的类型,其可以将硬件加速器所拥有的任一整数ALU作为后续需要调用的ALU。
例如,如果后续硬件加速器采用INT32的ALU,即采用32位整数的ALU对预处理结果进行计算处理,由于浮点数的尾数为52位(64位浮点数),无法直接调用INT32的ALU对尾数进行计算,因此,中央处理器确定需要对该浮点数的尾数进行拆分,即将52位的尾数拆分为两个32位的整数。
如浮点数的尾数为:
1111_0101_1010_1101_1110_1110_1110_1111_1110_0000_1111_1110_1110。
可以将其拆分为(1110_1110_1111_1110_0000_1111_1110_1110)以及(0000_0000_0000_1111_0101_1010_1101_1110),即尾数的后32位为拆分出的一个整数,尾数的前20位(52-32)为拆分出的另一个整数,在其前面补12个0,形成32位的整数,将拆分出的预处理结果进行存储。如图3所示,为上述拆分过程的示意图,即将浮点数的尾数分别拆分为两个32位的整数。
如果后续采用INT64的ALU,即采用64位整数的ALU对预处理结果进行计算,由于浮点数的尾数为52位,INT64的ALU可以直接对64位的整数进行计算,因此,中央处理器确定不需要对尾数进行拆分,而是直接将尾数转化为满足该整数ALU计算要求的整数。
沿用上述例子,浮点数尾数为:
1111_0101_1010_1101_1110_1110_1110_1111_1110_0000_1111_1110_1110。
可以将其转化为:
0000_0000_0000_1111_0101_1010_1101_1110_1110_1110_1111_1110_0000_1111_1110_1110,即将其转化为64位的整数。
如图4所示,为上述转化过程的示意图,即将浮点数的尾数作为64位整数的后52位,并在其前面补12位0。
另外,需要说明的是,由于浮点数还有符号,因此可以将符号也携带在对应尾数的预处理结果中。
以上是在预定计算为乘法时,中央处理器针对每个浮点数的尾数确定的预处理方式,下面介绍中央处理器针对每个浮点数的指数确定的预处理方式:
对每个浮点数的指数进行拆分或转化处理,以得到满足所要调用的整数ALU的计算要求的预处理结果,其中,该预处理结果为整数。
具体的,中央处理器可以是根据硬件加速器所要调用的整数ALU的类型,确定对指数进行拆分或转化的具体方式,以使后续能够调用该整数ALU对预处理的结果进行计算处理。
对每个浮点数的指数的处理方式与对尾数的处理方式类似,例如,FP64的指数是11位,如果后续调用INT8的整数ALU对指数进行计算时,需要将FP64的指数位拆分为2个8位的整数,例如,指数为1111_0101_101,可以将其拆分为1010_1101,以及0000_0111两个整数。如果后续调用高于11位的整数ALU进行计算,则不需要对FP64的指数位进行拆分,而是需要将其转化为满足该整数ALU计算要求的整数,具体拆分和转化过程可以参照上述对于尾数的处理,这里不在进行赘述。
以上内容是在预定计算为乘法时,中央处理器针对每个浮点数的尾数和指数分别确定的预处理方式,另外,中央处理器除了需要确定预处理方式外,还需要确定硬件加速器对预处理结果进一步进行处理的方式,在确定了两类处理方式后,中央处理器基于两类处理方式生成硬件加速器可以执行的硬件处理指令,并将硬件处理指令以及待执行预定计算的两个浮点数发送至硬件加速器的存储器,例如RAM中,硬件加速器执行该处理指令。
硬件加速器基于该处理指令可以执行:
对每个浮点数的指数进行拆分或转化处理,以得到满足所要调用的整数ALU计算要求的预处理结果;调用整数算数逻辑单元ALU,对所述两个浮点数的指数的预处理结果进行相加,得到指数处理结果;
对每个浮点数的尾数进行拆分或转化处理,以得到满足所要调用的整数ALU计算要求的预处理结果;调用整数算数逻辑单元ALU,对所述两个浮点数的尾数的预处理结果进行相乘,得到尾数处理结果;
根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
硬件加速器对每个浮点数的尾数和指数进行预处理的方式,可以参照上文,这里不再进行详述,上文中,中央处理器确定的预处理方式,即为硬件加速器所要执行的预处理方式。
硬件加速器调用整数算数逻辑单元ALU对预处理结果进行计算处理的过程,具体如下:
由于对于浮点数而言,乘法意味着指数相加以及尾数相乘。
因此,对于两个浮点数的尾数的预处理结果,可以进行相乘。
以两个浮点数分别为a*2c以及b*2d为例,两个浮点数的尾数分别为a与b,在预处理过程中,如果是对将两个浮点数的尾数进行了转化,转化即上文中对于图4的描述,如转化后得到的预处理结果为a’和b’,其中,a’和b’均为整数,因此,可以调用整数乘法算数逻辑单元ALU对a’和b’进行相乘。
另外,在预处理过程中,如果是将两个浮点数的尾数进行了拆分,如将a拆分为了a1和a2,将b拆分为了b1和b2,则a=(a1*2X+a2),b=(b1*2X+b2),其中,a2是a的后x位的数值,a1是a中除去后x位的数值。
沿用上述例子,如果a为:
1111_0101_1010_1101_1110_1110_1110_1111_1110_0000_1111_1110_1110,将其拆分为两个32位的整数即x=32,即拆分为:
1110_1110_1111_1110_0000_1111_1110_1110,
以及0000_0000_0000_1111_0101_1010_1101_1110。
其中,1110_1110_1111_1110_0000_1111_1110_1110是a的后32位,即为a2,0000_0000_0000_1111_0101_1010_1101_1110为a除了后32位的前20位。
即a=(a1*232+a2),同理,b=(b1*232+b2),可以调用整数算数逻辑单元ALU对(a1*232+a2)和(b1*232+b2)进行相乘。
即计算a1*232*b1*232+a1*232*b2+a2*b1*232+a2*b2。
其中,a1、a2、b1以及b2均为整数,因此上面涉及到的乘法计算以及加法计算均可以采用整数乘法ALU以及整数加法ALU进行计算处理,最终得到尾数处理结果,例如为W。
可以理解的是,由于预处理结果中也携带符号,因此尾数处理结果为也携带有符号。
以上是对两个浮点数的尾数的预处理结果进行计算处理的过程,下面介绍对于两个浮点数的指数的预处理结果进行计算处理的过程:
由于对于浮点数而言,乘法意味着指数相加以及尾数相乘。
因此,对于两个浮点数的指数的预处理结果,可以进行相加。例如,如果两个浮点数的指数分别为c与d,将两个浮点数的指数经过预处理后,转化为c’和d’,其中,c’和d’均为整数,因此,可以利用整数算数逻辑单元ALU对c’和d’进行相加。
另外,如果是对指数进行了拆分,如将c拆分为了c1和c2,将d拆分为了d1和d2,则c=(c1*2Y+c2),d=(d1*2Y+d2),其中,c2是c的后Y位的数值,c2是c中除去后Y位的数值。沿用上述例子,如果c为:1111_0101_101,将其拆分为两个8位的整数即Y=8,即拆分为:
1010_1101,以及0000_0111。
其中,0000_0111是c的后8位,即为c2,0000_0111为c除了后8位的前3位。
即c=(c1*28+c2),同理,d=(d1*28+d2),可以利用整数算数逻辑单元ALU对(c1*28+c2)和(d1*28+d2)进行相加。
即计算c1*28+c2+d1*28+d2。
其中,c1、c2、d1以及d2均为整数,因此上面涉及到的乘法计算以及加法计算均可以采用整数乘法ALU以及整数加法ALU进行计算处理,最终得到指数处理结果,例如为Z。
在得到了尾数处理结果以及指数处理结果后,即可以根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。可以是将尾数处理结果以及指数处理结果按照浮点数的格式,即如图1所示的浮点数的存储格式进行组合,得到针对两个浮点数进行乘法计算的结果,即将尾数处理结果作为两个浮点数预定计算结果的尾数,将指数处理结果作为两个浮点数预定计算结果的指数,沿用上述例子,两个浮点数为a*2c以及b*2d,最终得到的结果为W*2Z,即为a*2c与b*2d相乘的结果。
上面介绍了在预定计算为乘法时,中央处理器以及硬件加速器所执行的方法。下面介绍在预定计算为加法时中央处理器以及硬件加速器所执行的方法:
在预定计算的类型为加法计算时:
中央处理器针对每个浮点数的指数确定的预处理方式可以是:
针对该两个浮点数,调用整数算数逻辑单元ALU对所述两个浮点数的指数进行比较,将指数较小的浮点数确定为第一浮点数,将指数较大的浮点数确定为第二浮点数;将第一浮点数的指数调整为第二浮点数指数。
沿用上述例子,两个浮点数分别为a*2c以及b*2d,可以调用整数ALU对c和d进行比较,确定c与d的大小关系,可以理解的是这里虽然是以英文字母表示两个浮点数的指数,但其实际上是二进制数字,这里仅为了表示清楚所以以英文字母进行说明。本步骤中,将两个浮点数的指数分别作为整数,可以调用整数ALU对两个指数的大小进行比较。如,将c与d的比较后,发现c比d小,则确定a*2c为第一浮点数,b*2d为第二浮点数,并将a*2c转化为a*2d。
中央处理器针对每个浮点数的尾数确定的预处理方式可以是:
根据对第一浮点数指数的调整对第一浮点数的尾数进行移位;
针对移位后的尾数,以及第二浮点数的尾数分别进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果,该预处理结果为整数。
具体的,由于对第一浮点数的指数进行了转化,因此为了保证第一浮点数的数值不变,需要对第一浮点数的尾数进行移位,即将第一浮点数的尾数做相同倍数的缩小(尾数向右移对应的位数,在尾数最高位前面加对应数量的0,然后原尾数最后的对应位数直接丢弃,移了多少位就丢弃多少位,以使尾数的位数不变)。
沿用上述例子,第一浮点数是a*2c,由于将指数c转化为了d,因此需要将a进行移位,变为a’,在得到a’后,中央处理器可以是根据硬件加速器所要调用的整数ALU的类型,确定对尾数进行拆分或转化的具体方式,以使后续能够调用该整数ALU对预处理的结果即得到的整数,进行计算处理。
沿用上述例子,如果两个浮点数均为64位浮点数,尾数均为52位,如果后续硬件加速器采用INT32的ALU,即采用32位整数的ALU对预处理结果进行计算处理,由于浮点数的尾数为52位(64位浮点数),无法直接作为整数调用INT32的ALU进行计算,因此,中央处理器确定需要对该浮点数的尾数进行拆分,即将52位的尾数拆分为两个32位的整数。
如,第二浮点数的尾数或者第一浮点数的尾数移位后得到的a’为:
1111_0101_1010_1101_1110_1110_1110_1111_1110_0000_1111_1110_1110。
可以将其拆分为(1110_1110_1111_1110_0000_1111_1110_1110)以及(0000_0000_0000_1111_0101_1010_1101_1110),即尾数的后32位为拆分出的一个整数,尾数的前20位(52-32)为拆分出的另一个整数,在其前面补12个0,形成32位的整数。
如果后续采用INT64的ALU,即采用64位整数的ALU对预处理结果进行计算,由于浮点数的尾数为52位,INT64的ALU可以直接对64位的整数进行计算,因此,中央处理器确定不需要对尾数进行拆分,而是直接将尾数转化为满足该整数ALU计算要求的整数。即本步骤中,对于尾数的拆分和转化可以参照上述预定计算为乘法时的方式,这里不在进行赘述。同样,浮点数的符号也携带在对于尾数的预处理结果中。
以上内容是在预定计算为加法时,中央处理器针对每个浮点数的尾数和指数分别确定的预处理方式,另外,中央处理器除了需要确定预处理方式外,还需要确定硬件加速器对预处理结果进行计算处理的方式,在确定了两类处理方式后,中央处理器基于两类处理方式生成硬件加速器可以执行的硬件处理指令,并将硬件处理指令以及待执行预定计算的两个浮点数发送至硬件加速器的存储器,例如RAM中,硬件加速器执行该处理指令。
硬件加速器从本地RAM中读取指令和数据后,可以执行如下处理:
针对所述两个浮点数,调用整数算数逻辑单元ALU对所述两个浮点数的指数进行比较,将指数较小的浮点数确定为第一浮点数,将指数较大的浮点数确定为第二浮点数;将第一浮点数的指数调整为第二浮点数指数,并确定调整后的指数为指数处理结果;
根据对第一浮点数指数的调整对第一浮点数的尾数进行移位;
针对移位后的尾数,以及第二浮点数的尾数分别进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用整数算数逻辑单元ALU,对所述两个尾数的预处理结果进行相加,得到尾数处理结果。
根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
硬件加速器对每个浮点数的尾数和指数进行预处理的方式,可以参照上文,这里不再进行详述。
调用整数算数逻辑单元ALU对预处理结果进行计算处理的过程,具体如下:
由于对于浮点数而言,加法意味着指数对齐以及尾数相加。沿用上述例子,预处理后第一浮点数为a’*2d,第二浮点数为b*2d,即将第一浮点数的指数调整为了第二浮点数的指数,因此,可以直接以第二浮点数的指数d为最终得到指数处理结果,例如为Z。
对于尾数而言,如果对a’或者b进行了转化,由于转化后的预处理结果均为整数,因此可以直接使用整数算数逻辑单元ALU对预处理结果进行相加。
另外,如果是对尾数进行了拆分,如将a’拆分为了a1’和a2’,将b拆分为了b1和b2,则a’=(a1’*2X+a2’),b=(b1*2X+b2),其中,a2’是a’的后x位到的数值,a1’是a’中除去后x位的数值。
沿用上述例子,如果a’为:
1111_0101_1010_1101_1110_1110_1110_1111_1110_0000_1111_1110_1110,使用将其拆分为两个32位的整数即x=32,即拆分为:
1110_1110_1111_1110_0000_1111_1110_1110,
以及0000_0000_0000_1111_0101_1010_1101_1110。
其中,1110_1110_1111_1110_0000_1111_1110_1110是a’的后32位,即为a2’,0000_0000_0000_1111_0101_1010_1101_1110为a’除了后32位的前20位,即a1’。
即a’=(a1’*232+a2’),同理,b=(b1*232+b2),可以调用整数算数逻辑单元ALU对(a1’*232+a2’)和(b1*232+b2)进行相加。
即计算a1’*232+a2’+b1*232+b2。
其中,a1’、a2’、b1以及b2均为整数,因此上面涉及到的乘法计算以及加法计算均可以采用整数乘法ALU以及整数加法ALU进行计算处理,最终得到尾数处理结果,例如为W。可以理解的是,由于预处理结果中也携带符号,因此尾数处理结果为也携带有符号。
在得到了尾数处理结果以及指数处理结果后,即根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。可以是将尾数处理结果以及指数处理结果按照浮点数的格式,即如图1所示的浮点数的存储格式进行组合,得到针对两个浮点数进行乘法计算的结果,即将所述尾数处理结果作为所述两个浮点数预定计算结果的尾数,将所述指数计算结果作为所述两个浮点数预定计算结果的指数,沿用上述例子,两个浮点数为a*2c以及b*2d,最终得到的结果为W*2d,即为a*2c以及b*2d的加和。
可以理解的是,虽然上述均是以浮点数为64位浮点数进行举例说明,但是浮点数可以是任意硬件加速器不具备直接处理能力的浮点数,本领域技术人员可以根据本公开公开的内容,灵活运用以对实际问题进行处理。例如两个浮点数可以是扩展双精度浮点数或其他精度的浮点数等等。上述浮点数为64位浮点数不应为对本公开的限制。
基于上述描述,如图5所示,本公开提出了一种浮点数处理方法,该方法由硬件加速器执行,该方法包括:
S501,将所述两个浮点数的指数分别作为整数进行对应于预定计算的处理,得到指数处理结果;
S502,将所述两个浮点数的尾数分别作为整数进行对应于预定计算的处理,得到尾数处理结果;
这两个步骤中,即在预定计算为乘法时,对两个浮点数的尾数和指数分别进行拆分或转化预处理,得到的预处理结果为整数,并调用整数ALU对指数预处理结果进行相加得到指数处理结果,对尾数预处理结果进行相乘得到尾数处理结果。在预定计算为加法时,在预处理时,对两个浮点数的指数作为整数进行比较,将较小的指数调整为较大的指数,并确定调整后的指数为指数处理结果,在预处理时对经过指数调整的浮点数的尾数进行移位,并对两个浮点数的尾数分别进行拆分或转化,调用整数ALU对尾数预处理结果进行相加得到尾数处理结果。具体内容可以参照上文描述的内容,这里不进行详述。
S503,根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
本步骤中,具体可以是将尾数处理结果作为所述两个浮点数预定计算结果的尾数,将指数处理结果作为所述两个浮点数预定计算结果的指数。
采用上述方案,由中央处理器对待计算的两个浮点数进行识别,并生成处理指令,硬件加速器根据处理指令将两个浮点数的计算调整为指数的计算以及尾数的计算,即将指数和尾数均作为整数进行计算处理,因此可以调用本地的已有的整数ALU就可以计算出两个浮点数的加和或乘积,不需要对浮点数的ALU进行硬件开发,因此大大降低了硬件的设计复杂度,也不需要较长的研发周期。
如图6所示,为本公开示出的中央处理器以及硬件加速器执行的逻辑示意图,中央处理器CPU识别出两个浮点数后,基于软件处理逻辑确定针对处理预处理方式,以及后续对预处理结果的处理方式后,生成硬件加速器需要执行的指令,通过编译器编译为硬件加速器所支持的硬件指令格式,并将编译后的指令、两个浮点数写入硬件加速器的存储器如RAM(Random Access Memory,随机存取存储器)中。硬件加速器从本地RAM中读取指令和数据后,可以对指令进行解析并调用整数ALU执行上述过程,最终得到两个浮点数的和或积。
如图2所示,本公开还提供的一种确定浮点数平方根的装置,包括中央处理器CPU210以及硬件加速器220;在一些使用场景下,该电子装置的产品形式体现为显卡;在另一些使用场景下,该电子装置的产品形式体现为CPU主板。
所述中央处理器210,用于识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令以及所述两个浮点数发送至硬件加速器;
硬件加速器220,用于根据所述处理指令执行:
将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;
将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;
根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
在一个实施例中,所述中央处理器210,具备用于识别待执行预定计算的两个浮点数,针对每个浮点数确定对其尾数和指数的预处理方式,以及对预处理结果进行处理的方式,针对确定的两类处理方式生成处理指令。
在一个实施例中,所述预定计算为乘法计算;所述硬件加速器220,具体用于对每个浮点数的指数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的指数的预处理结果进行相加,得到指数处理结果。
在本实施例中,所述硬件加速器220,具体用于对每个浮点数的尾数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的尾数的预处理结果进行相乘,得到尾数处理结果。
在一个实施例中,所述预定计算为加法计算;
所述硬件加速器220,具体用于针对所述两个浮点数,调用整数算数逻辑单元ALU对所述两个浮点数的指数进行比较,将指数较小的浮点数确定为第一浮点数,将指数较大的浮点数确定为第二浮点数;
将第一浮点数的指数进行预处理,调整为第二浮点数的指数,并确定调整后的指数为指数处理结果。
在本实施例中,所述硬件加速器220,具体用于根据对第一浮点数的指数的调整对第一浮点数的尾数进行移位;针对移位后的第一浮点数的尾数,以及第二浮点数的尾数分别进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对两个尾数的预处理结果进行相加,得到尾数处理结果。
在一个实施例中,所述硬件加速器220,具体用于将所述尾数处理结果作为所述两个浮点数执行所述预定计算的结果的尾数,将所述指数处理结果作为所述两个浮点数执行所述预定计算的结果的指数。
本公开实施例还提供一种电子设备,该电子设备包括上述的电子装置。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
本公开实施例还提供一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令发送至硬件加速器,以使硬件加速器将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
本公开实施例还提供一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;
将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;
根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
在一个具体的实施例中,本公开中所描述的硬件加速器可以是GPU,如图7所示,其至少包括:
GPU core,用来处理命令,例如处理画图的命令,根据画图命令,执行图像渲染的Pipeline。其中,GPU core里面主要包含了计算单元,用于执行shader编译后的指令,属于可编程模块,由大量的ALU组成;Cache(存储器),用于缓存GPU core的数据,以减少对内存的访问;控制器(图中未示出)另外,GPU core还具有多种功能模块,例如光栅化(3D渲染管线的一个固定的阶段)、Tilling(TBR和TBDR GPU架构中对一帧进行划片处理)、裁剪(3D渲染管线的一个固定的阶段,裁剪掉观察范围外,或者背面不显示的图元)、后处理(对画完的图进行缩放,裁剪,旋转等操作)等。
通用DMA,用于执行主机内存到GPU显卡内存之间的数据搬移,例如,用于3D画图的vertex数据,通用DMA将vertex数据从主机内存搬到GPU显卡内存;
片上网络,用于SOC上各个master和salve之间的数据交换;
应用处理器,用于SOC上各个模块任务的调度,例如GPU渲染完一帧图后通知应用处理器,应用处理器再启动显示控制器将GPU画完的图显示到屏幕上;
PCIe控制器,用于和主机通信的接口,实现PCIe协议,使GPU显卡通过PCIe接口连接到主机上。主机上运行了图形API,以及显卡的驱动等程序;
内存控制器,用于连接内存设备,用于保存SOC上的数据;
显示控制器,用于控制将内存里的frame buffer以显示接口(HDMI,DP等)输出到显示器上;
视频解码器,用于将主机硬盘上的编码的视频解码成能显示的画面。
视频编码器,用于将主机硬盘上原始的视频码流编码成指定的格式返回给主机。
如图所示,主机即为中央处理器,其生成处理指令后,将指令发送至GPU芯片GPUcore中的存储器中,GPU core中的控制器根据处理指令执行上述处理流程,得到所述两个浮点数执行所述预定计算的结果,将结果返回给主机。
以上尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改,本领域的技术人员在不脱离本公开的精神和范围的前提下,做出的变更和修改也应视为本公开实施例的保护范围。
Claims (17)
1.一种浮点数处理方法,包括:
中央处理器识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令发送至硬件加速器;
硬件加速器根据所述处理指令执行:
将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;
将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;
根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
2.根据权利要求1所述的方法,
所述中央处理器识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,包括:
中央处理器识别待执行预定计算的两个浮点数,针对每个浮点数确定对其尾数和指数的预处理方式,以及对预处理结果进行处理的方式,针对确定的两类处理方式生成处理指令。
3.根据权利要求2所述的方法,所述预定计算为乘法计算;
所述将所述两个浮点数的指数分别作为整数进行对应于所述预定计算的处理,得到指数处理结果,包括:
对每个浮点数的指数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的指数的预处理结果进行相加,得到指数处理结果。
4.根据权利要求3所述的方法,所述将所述两个浮点数的尾数分别作为整数进行对应于所述预定计算的处理,得到尾数处理结果,包括:
对每个浮点数的尾数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的尾数的预处理结果进行相乘,得到尾数处理结果。
5.根据权利要求2所述的方法,所述预定计算为加法计算;
所述将所述两个浮点数的指数分别作为整数进行对应于所述预定计算的处理,得到指数处理结果,包括:
针对所述两个浮点数,调用整数算数逻辑单元ALU对所述两个浮点数的指数进行比较,将指数较小的浮点数确定为第一浮点数,将指数较大的浮点数确定为第二浮点数;
将第一浮点数的指数进行预处理调整为第二浮点数的指数,并确定调整后的指数为指数处理结果。
6.根据权利要求5所述的方法,所述将所述两个浮点数的尾数分别作为整数进行对应于所述预定计算的处理,得到尾数处理结果,包括:
根据对第一浮点数的指数的调整对第一浮点数的尾数进行移位;
针对移位后的第一浮点数的尾数,以及第二浮点数的尾数分别进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对两个尾数的预处理结果进行相加,得到尾数处理结果。
7.根据权利要求1所述的方法,所述根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果,包括:
将所述尾数处理结果作为所述两个浮点数执行所述预定计算的结果的尾数,将所述指数处理结果作为所述两个浮点数执行所述预定计算的结果的指数。
8.一种浮点数处理装置,包括中央处理器以及硬件加速器;
所述中央处理器,用于识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令以及所述两个浮点数发送至硬件加速器;
硬件加速器,用于根据所述处理指令执行:
将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;
将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;
根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
9.根据权利要求8所述的装置,
所述中央处理器,具备用于识别待执行预定计算的两个浮点数,针对每个浮点数确定对其尾数和指数的预处理方式,以及对预处理结果进行处理的方式,针对确定的两类处理方式生成处理指令。
10.根据权利要求8所述的装置,所述预定计算为乘法计算;
所述硬件加速器,具体用于对每个浮点数的指数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的指数的预处理结果进行相加,得到指数处理结果。
11.根据权利要求10所述的装置,
所述硬件加速器,具体用于对每个浮点数的尾数进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对所述两个浮点数的尾数的预处理结果进行相乘,得到尾数处理结果。
12.根据权利要求8所述的装置,所述预定计算为加法计算;
所述硬件加速器,具体用于针对所述两个浮点数,调用整数算数逻辑单元ALU对所述两个浮点数的指数进行比较,将指数较小的浮点数确定为第一浮点数,将指数较大的浮点数确定为第二浮点数;
将第一浮点数的指数进行预处理调整为第二浮点数的指数,并确定调整后的指数为指数处理结果。
13.根据权利要求12所述的装置,
所述硬件加速器,具体用于根据对第一浮点数的指数的调整对第一浮点数的尾数进行移位;针对移位后的第一浮点数的尾数,以及第二浮点数的尾数分别进行拆分或转化的预处理,得到满足所要调用的整数ALU计算要求的预处理结果;调用所述整数算数逻辑单元ALU,对两个尾数的预处理结果进行相加,得到尾数处理结果。
14.根据权利要求8所述的装置,
所述硬件加速器,具体用于将所述尾数处理结果作为所述两个浮点数执行所述预定计算的结果的尾数,将所述指数处理结果作为所述两个浮点数执行所述预定计算的结果的指数。
15.一种电子设备,包括上述权利要求8-14任一项所述的装置。
16.一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果;将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果;根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
17.一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:识别待执行预定计算的两个浮点数,基于识别结果生成处理指令,将生成的处理指令发送至硬件加速器,以使硬件加速器将所述两个浮点数的指数作为整数进行对应于所述预定计算的处理,得到指数处理结果,将所述两个浮点数的尾数作为整数进行对应于所述预定计算的处理,得到尾数处理结果,根据所述尾数处理结果与所述指数处理结果,得到所述两个浮点数执行所述预定计算的结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210174714.9A CN116700666A (zh) | 2022-02-24 | 2022-02-24 | 一种浮点数处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210174714.9A CN116700666A (zh) | 2022-02-24 | 2022-02-24 | 一种浮点数处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116700666A true CN116700666A (zh) | 2023-09-05 |
Family
ID=87839783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210174714.9A Pending CN116700666A (zh) | 2022-02-24 | 2022-02-24 | 一种浮点数处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116700666A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116700665A (zh) * | 2022-02-24 | 2023-09-05 | 象帝先计算技术(重庆)有限公司 | 一种确定浮点数平方根倒数的方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104991757A (zh) * | 2015-06-26 | 2015-10-21 | 浪潮(北京)电子信息产业有限公司 | 一种浮点处理方法及浮点处理器 |
CN107305485A (zh) * | 2016-04-25 | 2017-10-31 | 北京中科寒武纪科技有限公司 | 一种用于执行多个浮点数相加的装置及方法 |
CN109643228A (zh) * | 2016-10-01 | 2019-04-16 | 英特尔公司 | 用于浮点乘加运算的低能耗尾数乘法 |
CN111538472A (zh) * | 2020-04-27 | 2020-08-14 | 西安交通大学 | 一种Posit浮点数的运算处理器以及运算处理*** |
CN111813371A (zh) * | 2020-07-28 | 2020-10-23 | 上海赛昉科技有限公司 | 数字信号处理的浮点除法运算方法、***及可读介质 |
CN112732221A (zh) * | 2019-10-14 | 2021-04-30 | 安徽寒武纪信息科技有限公司 | 用于浮点运算的乘法器、方法、集成电路芯片和计算装置 |
-
2022
- 2022-02-24 CN CN202210174714.9A patent/CN116700666A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104991757A (zh) * | 2015-06-26 | 2015-10-21 | 浪潮(北京)电子信息产业有限公司 | 一种浮点处理方法及浮点处理器 |
CN107305485A (zh) * | 2016-04-25 | 2017-10-31 | 北京中科寒武纪科技有限公司 | 一种用于执行多个浮点数相加的装置及方法 |
CN109643228A (zh) * | 2016-10-01 | 2019-04-16 | 英特尔公司 | 用于浮点乘加运算的低能耗尾数乘法 |
CN112732221A (zh) * | 2019-10-14 | 2021-04-30 | 安徽寒武纪信息科技有限公司 | 用于浮点运算的乘法器、方法、集成电路芯片和计算装置 |
CN111538472A (zh) * | 2020-04-27 | 2020-08-14 | 西安交通大学 | 一种Posit浮点数的运算处理器以及运算处理*** |
CN111813371A (zh) * | 2020-07-28 | 2020-10-23 | 上海赛昉科技有限公司 | 数字信号处理的浮点除法运算方法、***及可读介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116700665A (zh) * | 2022-02-24 | 2023-09-05 | 象帝先计算技术(重庆)有限公司 | 一种确定浮点数平方根倒数的方法及装置 |
CN116700665B (zh) * | 2022-02-24 | 2024-06-21 | 象帝先计算技术(重庆)有限公司 | 一种确定浮点数平方根倒数的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11698772B2 (en) | Prepare for shorter precision (round for reround) mode in a decimal floating-point instruction | |
CN106990937B (zh) | 一种浮点数处理装置和处理方法 | |
US20220405098A1 (en) | Generalized acceleration of matrix multiply accumulate operations | |
CN108229648B (zh) | 匹配存储器中数据位宽的卷积计算方法和装置、设备、介质 | |
CN106575214B (zh) | 融合乘加运算的模拟 | |
US20150039661A1 (en) | Type conversion using floating-point unit | |
US10297001B2 (en) | Reduced power implementation of computer instructions | |
CN114461176B (zh) | 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 | |
CN116700663A (zh) | 一种浮点数处理方法及装置 | |
CN116700664B (zh) | 一种确定浮点数平方根的方法及装置 | |
CN116700666A (zh) | 一种浮点数处理方法及装置 | |
US6298365B1 (en) | Method and system for bounds comparator | |
KR100847934B1 (ko) | 스케일링된 정수를 사용하는 부동 소수점 연산 | |
US20230305803A1 (en) | Method for Processing Floating Point Number and Related Device | |
US20030069912A1 (en) | Apparatus and method for precision binary numbers and numerical operations | |
CN116795324A (zh) | 混合精度浮点乘法装置和混合精度浮点数处理方法 | |
CN116700665B (zh) | 一种确定浮点数平方根倒数的方法及装置 | |
US20220113943A1 (en) | Method for multiply-add operations for neural network | |
CN115269003A (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
US9292285B2 (en) | Interpolation implementation | |
RU2276805C2 (ru) | Способ и устройство для выделения целой и дробных компонент из данных с плавающей точкой | |
CN118312130A (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
US9304739B1 (en) | Optimized 3D lighting computations using a logarithmic number system | |
CN115718586A (zh) | 像素颜色混合操作方法、图形绘制方法、装置和设备 | |
CN118151885A (zh) | 模型转换方法、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |