CN116700663A - 一种浮点数处理方法及装置 - Google Patents
一种浮点数处理方法及装置 Download PDFInfo
- Publication number
- CN116700663A CN116700663A CN202210174281.7A CN202210174281A CN116700663A CN 116700663 A CN116700663 A CN 116700663A CN 202210174281 A CN202210174281 A CN 202210174281A CN 116700663 A CN116700663 A CN 116700663A
- Authority
- CN
- China
- Prior art keywords
- floating point
- point number
- precision floating
- value
- square root
- 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 9
- 238000012545 processing Methods 0.000 claims abstract description 147
- 238000000034 method Methods 0.000 claims abstract description 82
- 230000008569 process Effects 0.000 claims description 22
- 238000004364 calculation method Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 8
- 238000009877 rendering Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 5
- 238000004088 simulation Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000004075 alteration Effects 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
- 239000002674 ointment Substances 0.000 description 1
- 238000012805 post-processing 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本公开提供了一种浮点数处理方法及装置,该方法包括,中央处理器获取第一精度浮点数,基于所述第一精度浮点数生成处理指令,并将处理指令发送至硬件加速器;硬件加速器基于接收到的处理指令执行:对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果;根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种浮点数处理方法及装置。
背景技术
目前,为了满足各类应用需求,如为了追求更极致的渲染画面,需要硬件加速器具备对高精度浮点数进行计算的能力。
然而,目前市面上的硬件加速器,通常只具有对低精度浮点数进行计算的ALU单元,或者对整数进行计算的ALU单元,如果想要实现对高精度浮点数进行计算,则需要开发硬件即需要设计和开发用于对高精度浮点数进行计算的ALU,这种方式增加了硬件的设计复杂度,同时也需要较长的研发周期。
发明内容
针对上述技术问题,本公开提供一种浮点数处理方法及装置,技术方案如下。
根据本公开的第一方面,提供一种浮点数处理方法,包括:
中央处理器获取第一精度浮点数,基于所述第一精度浮点数生成处理指令,并将处理指令发送至硬件加速器;
硬件加速器基于接收到的处理指令执行:
对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果;
根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数。
在一个实施例中,所述利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果,包括:
利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根;
所述根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数,包括:
根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
在一个实施例中,该方法还包括:硬件加速器利用整数除法算数逻辑单元ALU对所述第一精度浮点数的平方根进行处理,得到第一精度浮点数的平方根倒数。
在一个实施例中,所述对第一精度浮点数进行调整得到第二精度浮点数,包括:
对所述第一精度浮点数的尾数进行截取,得到满足第二精度浮点数尾数位宽要求的第一尾数;
对所述第一精度浮点数的指数进行拆分,得到满足第二精度浮点数指数范围要求的第一指数。
在一个实施例中,对所述第一精度浮点数的指数进行拆分,包括:将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
在一个实施例中,所述根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根,包括:
将第二精度浮点数的平方根的尾数作为迭代初始值;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数尾数与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;
循环结束后,将当前迭代值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数的平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
在一个实施例中,所述确定第一精度浮点数尾数与当前迭代值的商,包括:
利用整数除法ALU确定第一精度浮点数尾数与当前迭代值的商;
所述将迭代值的取值确定为所述商与当前迭代值的平均值,包括:
利用整数加法ALU确定所述商与当前迭代值的和,利用整数除法ALU或移位ALU对所述和进行处理,得到所述商与当前迭代值的平均值。
在一个实施例中,所述根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根,包括:
将第二精度浮点数的平方根对应的整数数值与第二数值的乘积,作为迭代初始值;其中,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果;所述第二精度浮点数对应的整数数值为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数对应的整数数值与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;
循环结束后,将当前迭代值作为第一精度浮点数的平方根。
根据本公开实施例的第二个方面,提供了一种浮点数处理装置,包括中央处理器以及硬件加速器;
所述中央处理器,用于获取第一精度浮点数,确定所述第一精度浮点数的精度,基于所述精度生成处理指令,并将处理指令发送至硬件加速器;
硬件加速器,用于基于接收到的处理指令执行:
对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果;
根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数。
在一个实施例中,所述硬件加速器,具体用于利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
在一个实施例中,所述硬件加速器,还用于利用整数除法算数逻辑单元ALU对所述第一精度浮点数的平方根进行处理,得到第一精度浮点数的平方根倒数。
在一个实施例中,所述硬件加速器,具体用于对所述第一精度浮点数的尾数进行截取,得到满足第二精度浮点数尾数位宽要求的第一尾数;对所述第一精度浮点数的指数进行拆分,得到满足第二精度浮点数指数范围要求的第一指数。
在一个实施例中,所述硬件加速器,具体用于将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
在一个实施例中,所述硬件加速器,具体用于将第二精度浮点数的平方根的尾数作为迭代初始值;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数尾数与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;
循环结束后,将当前迭代值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数的平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
在一个实施例中,所述硬件加速器,具体用于利用整数除法ALU确定第一精度浮点数尾数与当前迭代值的商;利用整数加法ALU确定所述商与当前迭代值的和,利用整数除法ALU或移位ALU对所述和进行处理,得到所述商与当前迭代值的平均值。
在一个实施例中,所述硬件加速器,具体用于将将第二精度浮点数的平方根对应的整数数值与第二数值的乘积,作为迭代初始值;其中,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果;所述第二精度浮点数对应的整数数值为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数对应的整数数值与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;
循环结束后,将当前迭代值作为第一精度浮点数的平方根。
根据本公开实施例的第三个方面,提供了一种电子设备,包括上述浮点数处理装置。
根据本公开实施例的第四个方面,提供了一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
根据本公开实施例的第五个方面,提供了一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:获取第一精度浮点数,确定所述第一精度浮点数的精度,基于所述精度生成处理指令,并将处理指令发送至硬件加速器,以使硬件加速器对第一精度浮点数进行调整得到第二精度浮点数,所述第一精度浮点数的精度大于所述第二精度浮点数的精度,利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根,根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,此处所说明的附图用来提供对本公开的进一步理解,构成本公开的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本公开实施例的一种单精度浮点数组成示意图;
图2为本公开实施例的一种双精度浮点数组成示意图;
图3为本公开实施例的一种浮点数处理装置的结构示意图;
图4为本公开实施例的一种浮点数处理方法的流程示意图;
图5为本公开实施例的一种浮点数处理方法的逻辑示意图;
图6为本公开实施例的一种硬件加速器的结构示意图。
具体实施方式
为了使本公开实施例中的技术方案及优点更加清楚明白,下面将结合附图对本公开实施例中的技术方案及优点进一步详细的说明,显然,所描述的实施例仅仅是本公开的一部分实施例,而不是全部的实施例,需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合,基于本公开中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
在本公开中使用的术语是仅仅是为了描述特定实施例,而非为了限制申请的保护范围。在本公开中,除非上下文清楚地表示其他含义,否则所使用的单数形式的“一种”、“所述”和“该”也包括复数形式。还应当理解,本文中使用的术语“和/或”包括列出的多个相关联项目的任意或所有可能组合。
应当理解,尽管在本公开可能采用术语“第一”、“第二”等等来描述各种信息,但是这些信息不应当受这些术语限制。这些术语仅用来将一种类型的信息与另一种类型的信息区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果、例如”可以被解释成为“在……时”或“当……时”或“响应于确定”。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
图形处理、机器学习等技术在不断迭代更新,随之而来的,这类技术对计算机设备的计算要求越来越高,计算机设备中的中央处理器CPU的计算压力也越来越大,因此,目前业界会采用硬件加速器来分担中央处理器的计算压力,硬件加速器可以理解为专门用于进行计算的硬件产品,其会接收中央处理器发送的指令,并根据指令进行相应的计算,并将计算结果返回给中央处理器,常见的硬件加速器包括GPU(Graphics Processing Unit,图形处理器)、TBU(Tensor Processing Unit,张量处理器)等,本公开对此不进行限定。
在硬件加速器中通常会以硬件形式预先配置多种算术逻辑单元(arithmetic andlogic unit),即实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU,用于对不同数据进行计算。其中,一种ALU只能专用于处理某种数据的计算,例如,用于对单精度浮点数进行计算的ALU无法对双精度浮点数进行计算,同理,用于对双精度浮点数进行计算的ALU也无法对单精度浮点数进行计算。
如上述描述的内容,为了满足各类应用需求,如为了追求更极致的渲染画面,目前需要硬件加速器具备对高精度浮点数(如64位浮点数)进行计算的能力。然而,目前市面上的硬件加速器,通常仅具有对低精度(如小于64位)浮点数进行计算的ALU,或者对整数进行计算的ALU,如果想要实现对高精度浮点数进行计算,如想要实现计算高精度浮点数的平方根或者平方根倒数,则需要开发硬件即需要设计和开发用于对高精度浮点数求平方根的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位。
如图2所示,为双精度浮点数(64位浮点数)在计算机中存储时的示意图,其中,该双精度浮点数在计算机中共占用64位(8字节),其中该连续的64位中,分为三个域,包括:符号占1位、指数占11位,尾数占52位。根据上述内容可知,不同精度的浮点数在计算机中存储的形式不同。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
如图3所示,为本公开提出的一种浮点数处理装置的结构示意图,其中包括中央处理器CPU 310以及硬件加速器320。
基于该装置,中央处理器在获取了待处理的第一精度浮点数后,可以识别第一精度浮点数的精度,可以理解的是,通常情况下,中央处理器与硬件加速器相比,其可以识别各种精度的浮点数,因此其可以识别高精度浮点数的精度类型以及浮点数的大小,并根据识别结果生成处理指令。
基于第一精度浮点数生成处理指令时,具体可以生成包括对第一精度浮点数调整为第二精度浮点数的处理指令,以及后续基于第二精度浮点数进行牛顿迭代计算的处理指令。
第二精度浮点数具体是硬件加速器可以直接进行计算的浮点数,以便硬件加速器可以对第二精度浮点数进行识别和计算。沿用上述例子,若硬件加速器具备FP16(16位浮点数)的ALU、FP32(32位浮点数)的ALU,则第二精度浮点数可以是16位的浮点数或32位的浮点数,中央处理器可以根据硬件加速器具备的ALU,以及第一精度浮点数的精度类型和大小确定具体的处理指令,可以理解的是,基于不同精度类型以及不同大小的第一精度浮点数,会生成不同的处理指令。为了便于描述,在无特殊说明的情况下,下文中均以第一精度浮点数为64位浮点数,第二精度浮点数为32位浮点数进行举例说明。
在本步骤中,中央处理器识别出了第一精度浮点数后,可以基于预设软件处理逻辑确定对第一精度浮点数的处理方式,并将该处理方式编译为硬件加速器可以执行的硬件处理指令。
具体的,中央处理器可以是识别出第一精度浮点数的尾数域和指数域,针对第一精度浮点数的尾数以及指数分别确定不同的处理方式。
对于第一精度浮点数的尾数的处理方式可以是:对所述第一精度浮点数的尾数进行截取,得到满足第二精度浮点数尾数位宽要求的第一尾数;例如,第一精度浮点数为64位浮点数,其尾数位宽为52位,第二精度浮点数为32位浮点数,其尾数位宽为23位,因此可以以第一精度浮点数的尾数的最高位为起点向后截取23位尾数得到第一尾数,该第一尾数即为第二精度浮点数的尾数。
例如,64位浮点数的尾数为:
1111_0101_1010_1101_1110_1110_1110_1111_1110_0000_1111_1110_1110。对其进行截取,得到第一尾数为1111_0101_1010_1101_1110_111。
对第一精度浮点数的指数的处理方式可以是:对指数进行拆分,以得到满足第二精度浮点数指数范围要求的第一指数。
具体的,可以是将第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。该第一指数即为第二精度浮点数的指数。
由于高精度浮点数的指数表示范围大于低精度浮点数的指数表示范围,因此,第一精度浮点数的指数有可能不在第二精度浮点数的指数表达范围内,需要先判断第一精度浮点数的指数是否在第二精度浮点数指数范围内。
例如,64位浮点数的指数范围为[-1023,1024],而32位浮点数的指数范围为[-127,128],由于IEEE标准中规定指数域中的值是指数实际值加上偏差,因此,如果第一精度浮点数在指数域中的值为e,则第一精度浮点数的指数实际值为e-1023(对于64位浮点数而言偏差为1023),进一步需要判断e-1023是否属于[-127,128],如果属于,则直接确定e-1023为第一指数的实际值,同样,由于IEEE标准的要求,确定第二精度浮点数在指数域中存储的第一指数为e-1203+127(对于32位浮点数而言偏差为127)。在本步骤中,如果第一精度浮点数的指数在第二精度浮点数指数范围内,可以理解为将第一精度的浮点数的指数拆分为第一指数,以及第二指数,其中第二指数具体为0。
在第一精度浮点数的指数不在第二精度浮点数指数范围内时,要保证拆分出的第一指数在第二精度浮点数指数范围内,第二指数是非零偶数。
沿用上述例子,第一精度浮点数的指数实际值为e-1023,如果其不在[-127,128]中,则将该指数拆分为X+Y,其中,第一指数X为一个[-127,128]范围内的数,可以用8bit来表示,X+127作为第二精度浮点数的指数域中的值,第二指数Y具体为一个偶数,具体为何拆分为偶数,可以参照下文,这里先不进行详述。
在本步骤中,中央处理器在确定X与Y时,一种具体的实施方式可以如下:
即如果第一精度浮点数的指数实际值为e-1023且大于128,则确定e-1023是奇数还是偶数,如果是偶数,则X取128,Y取e-1023-128;如果是奇数,则X取127,Y取e-1023-127。
另外,如果e-1023小于-127,则确定e-1023是奇数还是偶数,如果是偶数,则X取-126,Y取e-1023+126;如果是奇数,则X取-127,y取e-1023+127。
可以理解的是,上述拆分过程仅为一个具体的实施方式,还可以基于其他拆分方式得到第一尾数以及第二尾数,以使第一尾数满足第二精度浮点数的指数范围要求,且第二指数为偶数。
本步骤中,中央处理器在确定对第一精度浮点数的处理方式后,可以生成硬件加速器可以执行的硬件处理指令,并将处理指令以及第一精度浮点数发送至硬件加速器的存储器,例如RAM中,硬件加速器基于接收到的指令进行处理。
如图5所述,为本公开示出的中央处理器以及硬件加速器执行的逻辑示意图,中央处理器CPU识别出高精度的64位浮点数后,基于软件处理逻辑确定针对指数和尾数的处理方式,以及后续对第二精度浮点数的处理方式后,生成硬件加速器需要执行的指令,通过编译器编译为硬件加速器所支持的硬件指令格式,并将编译后的指令、第一精度浮点数写入硬件加速器的存储器如RAM(Random Access Memory,随机存取存储器)中。硬件加速器从本地RAM中读取指令和数据后,执行如图4所示的方法。图4示出的为本公开提出的一种浮点数处理方法的流程示意图,该方法由硬件加速器执行,该方法包括:
S401,对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
在本步骤中,硬件加速器基于中央处理器发送的处理指令对第一精度浮点数进行处理,处理方式可以参照上文描述,如对指数进行拆分以及对尾数进行截取,这里不在进行赘述。
硬件加速器根据指令对第一精度浮点数的尾数和指数分别进行处理,得到第一尾数与第一指数后,即得到第二精度浮点数。
沿用上述例子,得到的第一尾数1111_0101_1010_1101_1110_111,得到的第一指数X为2X,则第二精度浮点数即为1111_0101_1010_1101_1110_111*2X,其中,可以理解的是,第二精度浮点数具体是以标准的浮点数形式存储在计算机中的,前述的组合形式只是为了便于说明和描述而展示的。
S402,利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果;
由于第二精度浮点数是硬件加速器可以直接进行计算处理的浮点数,因此硬件加速器可以利用本地的对应于第二精度浮点数的算数逻辑单元ALU,对第二精度浮点数进行处理,得到处理结果。例如,如果采用的是对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对第二精度浮点数进行计算处理,则会得到第二精度浮点数的平方根倒数;如果采用的是对应于第二精度浮点数的求平方根算数逻辑单元ALU,对第二精度浮点数进行计算处理,则会得到第二精度浮点数的平方根。即上述得到的处理结果,可以为第二精度浮点数的平方根或平方根倒数。例如利用本地32位浮点数的求平方根倒数ALU或求平方根ALU对32位浮点数(第二精度浮点数)进行计算处理,得到平方根倒数或平方根为a*2b,其在计算机中是以浮点数形式存储的,这里仅是为了便于说明将其展示为上述格式。
S403,根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数。
牛顿迭代法又称为牛顿-拉弗森法,思想是利用切线是曲线的线性逼近来对多项式进行求解,具体可以参照相关技术,本公开在此不进行详述。
在本步骤中,如果处理结果为第二精度浮点数的平方根,利用该第二精度浮点数的平方根确定牛顿迭代初始值,则通过模拟牛顿迭代法可以确定第一精度浮点数的平方根;同理,如果处理结果为第二精度浮点数的平方根倒数,利用该第二精度浮点数的平方根倒数确定牛顿迭代初始值,则通过模拟牛顿迭代法可以确定第一精度浮点数的平方根倒数。本步骤的具体内容,可以参照下文,这里不进行详述。
在确定了第一精度浮点数的平方根后,可以利用整数除法ALU确定第一精度浮点数的平方根倒数;同理,在确定了第一精度浮点数的平方根倒数后,可以利用整数除法ALU确定第一精度浮点数的平方根。
采用上述方式,不需要对高精度浮点数的ALU进行硬件开发,而是利用硬件加速器已有的ALU就可以得到高精度浮点数的平方根或平方根倒数,同时采用第二精度浮点数对应的处理结果作为牛顿迭代初始值的参考,而非采用随机值作为迭代初始值可以使迭代初始值大概率更接近最终值,大大减少迭代次数,提升计算效率。
下面对上述S403中的过程进行详细描述:
在相关技术中,牛顿迭代公式为xn+1=xn-f(xn)/f′(xn),其中,f(xn)为计算平方根倒数的公式即f(x)=1/x2-y,其中,y为待计算平方根倒数的值,x为y的平方根倒数;或者,f(xn)为计算平方根的公式即f(x)=x2-y,其中,y为待计算平方根的值,x为y的平方根。f′(xn)为对f(x)求导的结果。
对于求平方根倒数的牛顿迭代公式而言,f(x)=1/x2-y,f′(xn)=-2x-3,将f(x)与f′(xn)带入牛顿迭代公式xn+1=xn-f(xn)/f′(xn),即得到xn+1=1.5xn-0.5y xn 3。
对于求平方根的牛顿迭代公式而言,f(x)=x2-y,f′(xn)=2x,将f(x)与f′(xn)带入牛顿迭代公式xn+1=xn-f(xn)/f′(xn),即得到xn+1=(xn+y/xn)/2。
即牛顿迭代法为先确定一个迭代初始值x0,然后开始进行迭代,每次迭代后,得到的值xn+1比xn更接近y的平方根倒数或平方根,在到达预设停止条件后,即可以得到输出结果,预设停止条件可以是迭代后的xn+1与xn相比差值小于预设值等,本公开对此不进行限定。
下面以S402中得到的处理结果为第二精度浮点数的平方根为例,将S403中根据该第二精度浮点数的平方根确定迭代初始值、模拟牛顿迭代法确定第一精度浮点数的平方根的过程进行说明:
一种可行的实施方式为:
可以是将第二精度浮点数的平方根的尾数作为迭代初始值;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数尾数与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;
循环结束后,将当前迭代值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数的平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
例如,沿用上述例子,如果第二精度浮点数的平方根为a*2b,第二指数为Y,则第一数值为2b,第二数值为2-Y/2,可以理解的是,由于Y为整数,因此硬件加速器可以利用整数ALU计算得到-Y/2,且由于Y为偶数,因此-Y/2也为整数。可以是在得到第二指数时,即开始计算第二数值,也可以是在需要利用第二数值进行计算时才开始计算第二数值,同理可以是在得到第二精度浮点数的平方根时,开始计算第一数值,也可以是在本步骤中计算第一数值。本实施例中对此不进行限定。
如果,第一精度浮点数是c*2d,则将第二精度浮点数的平方根的尾数a作为牛顿迭代初始值,即x0=a,确定第一精度浮点数尾数c与当前迭代值x的商,将迭代值x的取值更新为所述商与当前迭代值的平均值x=(x+c/x)/2;利用本地ALU模拟求平方根倒数的牛顿迭代法进行迭代得到输出值,即模拟上述x=(x+c/x)/2,进行迭代,迭代结束后得到输出值为Z,则确定Z*2b*2-Y/2为第一精度浮点数的平方根。
本实施方式中,以第二精度浮点数的平方根的尾数作为牛顿迭代初始值,以第一精度浮点数的尾数作为目标值,由于第二精度浮点数的平方根的尾数和第一精度浮点数的尾数均为整数,因此,硬件加速器可以利用本地整数ALU执行上述迭代计算过程。如需要实现形如xn+1=(xn+y/xn)/2的计算时,其中涉及到的乘法、加法、除法均可以采用整数乘法ALU、整数加法ALU、整数除法ALU实现。另外,采用第二精度浮点数平方根的尾数作为迭代初始值,相对于随机选取迭代初始值,可以大大减少迭代次数,可以使迭代结果尽可能快的收敛,整体处理效率较高。
另一种可行的实施方式为:
将第二精度浮点数的平方根对应的整数数值与第二数值的乘积,作为迭代初始值;其中,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果;所述第二精度浮点数对应的整数数值为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数对应的整数数值与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;
循环结束后,将当前迭代值作为第一精度浮点数的平方根。
例如,沿用上述例子,如果第二精度浮点数的平方根为a*2b,第二指数为Y,则第二数值为2-Y/2,将第二精度浮点数的平方根的a*2b对应的整数数值作为牛顿迭代初始值,第二精度浮点数的平方根是以浮点数格式存储的,可以调用本地整数ALU计算其整数数值,即先计算以2为底,以所述第二精度浮点数的指数为指数的乘方结果,即确定2b的数值为第四数值,然后确定第四数值与第二精度浮点数的尾数相乘的乘积a*2b的数值,为第二精度浮点数的平方根对应的整数数值。
如果,第一精度浮点数是c*2d,则可以调用本地整数ALU计算第一精度浮点数对应的整数数值,即先计算以2为底,以所述第一精度浮点数的指数为指数的乘方结果,即确定2d的数值为第三数值,然后确定第三数值与第一精度浮点数的尾数相乘的乘积c*2d的数值,为第一精度浮点数的平方根对应的整数数值。
在确定了第一精度浮点数的平方根对应的整数数值,以及二精度浮点数的平方根对应的整数数值,即可以进行牛顿迭代,可以是将二精度浮点数的平方根对应的整数数值与第二数值的乘积作为迭代初始值x0,即x0=a*2b*2-Y/2。确定第一精度浮点数对应的整数数值c*2d与当前迭代值x的商,将迭代值x的取值更新为所述商与当前迭代值的平均值x=(x+(c*2d)/x)/2;利用本地ALU模拟求平方根倒数的牛顿迭代法进行迭代得到输出值,即模拟上述x=(x+c/x)/2,进行迭代,迭代结束后得到输出值为Z,则确定Z为第一精度浮点数的平方根。
本实施方式中,以第二精度浮点数的平方根对应的整数数值与第二数值的乘积作为迭代初始值,以第一精度浮点数对应的整数数值作为目标值,由于上述两个数值均为整数,因此,硬件加速器可以利用本地整数ALU执行上述迭代计算过程。如需要实现形如xn+1=(xn+y/xn)/2的计算时,其中涉及到的乘法、加法、除法均可以采用整数乘法ALU、整数加法ALU、整数除法ALU实现。另外,采用第二精度浮点数的平方根作为迭代初始值的参考,相对于随机选取迭代初始值,可以大大减少迭代次数,可以使迭代结果尽可能快的收敛,整体处理效率较高。
上述两个具体的实施方式均可以通过牛顿迭代得到第一精度浮点数的平方根,硬件加速器可以利用整数除法ALU对第一精度浮点数的平方根进行处理,从而得到第一精度浮点数的平方根倒数。
可以理解的是,上述两个具体的实施方式,均是先计算第一精度浮点数的平方根,进一步基于第一精度浮点数的平方根得到第一精度浮点数的平方根倒数。还可以是先计算第一精度浮点数的平方根倒数,进一步基于第一精度浮点数的平方根倒数得到第一精度浮点数的平方根。
下面以S402中得到的处理结果为第二精度浮点数的平方根倒数为例,将S403中根据该第二精度浮点数的平方根倒数确定迭代初始值、模拟牛顿迭代法确定第一精度浮点数的平方根倒数的过程进行说明:
一种可行的实施方式为:
以第二精度浮点数的平方根倒数的尾数为牛顿迭代初始值,以第一精度浮点数的尾数为目标值,模拟求平方根倒数的牛顿迭代法进行迭代得到输出值;将该输出值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根倒数,其中,第一数值为以2为底,以第二精度浮点数的平方根倒数的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果。
沿用上述例子,第二精度浮点数的平方根倒数是a*2b,第二指数为Y,则第二数值为2-Y/2,可以理解的是,由于Y为整数,因此硬件加速器可以利用整数ALU计算得到-Y/2。如果,第一精度浮点数是c*2d,则将a作为牛顿迭代初始值x0,将c作为目标值y,利用本地ALU模拟求平方根倒数的牛顿迭代法进行迭代得到输出值,即模拟上述xn+1=1.5xn-0.5y xn 3,进行迭代,例如迭代结束后,得到输出值为Z,则确定Z*2b*2-Y/2为第一精度浮点数的平方根倒数。
本实施方式中,以第二精度浮点数的平方根倒数的尾数作为牛顿迭代初始值,以第一精度浮点数的尾数作为目标值,由于第二精度浮点数的平方根倒数的尾数和第一精度浮点数的尾数均为整数,因此,硬件加速器可以利用本地整数ALU执行上述迭代计算过程。如需要实现形如xn+1=1.5xn-0.5y xn 3的计算时,其中涉及到的乘法、加法均可以采用整数乘法ALU以及整数加法ALU实现。另外,采用第二精度浮点数的尾数作为迭代初始值,相对于随机选取迭代初始值,可以大大减少迭代次数,可以使迭代结果尽可能快的收敛,整体处理效率较高。
另一种可行的实施方式为:
以第二精度浮点数的平方根倒数对应的整数数值以及第二数值的乘积作为牛顿迭代初始值,以第一精度浮点数对应的整数数值为目标值,模拟求平方根倒数的牛顿迭代法进行迭代得到输出值;将该输出值作为第一精度浮点数的平方根倒数。
沿用上述例子,例如,第二精度浮点数的平方根倒数是a*2b,第二数值为2-Y/2,则将a*2b*2-Y/2作为牛顿迭代初始值,其中,在计算第二精度浮点数的平方根倒数与第二数值的乘积时,需要确定第二精度浮点数的平方根倒数的整数数值,用整数ALU对第二精度浮点数的平方根倒数的整数数值和第二数值进行处理,得到乘积。得到第二精度浮点数的平方根倒数的整数数值过程中所涉及到的计算均可以使用整数ALU进行处理。
以第一精度浮点数对应的整数数值为目标值y,利用本地ALU模拟求平方根倒数的牛顿迭代法进行迭代得到输出值,即模拟上述xn+1=1.5xn-0.5y xn 3,进行迭代,例如迭代结束后,得到输出值为Z,则确定Z为第一精度浮点数的平方根倒数。在本实施例中,可以利用本地整ALU得到第一精度浮点数对应的整数数值。
本实施方式中,以第二精度浮点数的平方根倒数对应的整数数值以及第二数值的乘积作为牛顿迭代初始值,以第一精度浮点数对应的整数数值为目标值,由于乘积和第一精度浮点数对应的整数数值均为整数,因此,硬件加速器可以利用本地整数ALU执行上述迭代计算过程。如需要实现形如xn+1=1.5xn-0.5y xn 3的计算时,其中涉及到的乘法、加法均可以采用整数乘法ALU以及整数加法ALU实现。另外,采用第二精度浮点数的平方根倒数对应的整数数值以及第二数值的平方根倒数的乘积作为迭代初始值,相对于随机选取迭代初始值,可以大大减少迭代次数,可以使迭代结果尽可能快的收敛,整体处理效率较高。
上述两个具体的实施方式均可以通过牛顿迭代得到第一精度浮点数的平方根倒数,硬件加速器可以利用整数除法ALU对第一精度浮点数的平方根倒数进行处理,从而得到第一精度浮点数的平方根。
上述四种具体实施方式中,均需要计算和利用第二指数的二分之一,因此,在对第一精度浮点数的指数进行拆分时,需要保证拆分出的第二指数为偶数。
如图5所示,硬件加速器在基于牛顿迭代法进行处理时,具体可以调用本地多种已有的ALU进行计算,从而模拟实现牛顿迭代法。图5所示出的第二精度浮点数求平方根倒数ALU、第二精度浮点数求平方根ALU、整数加法ALU、整数乘法ALU,整数除法ALU仅仅为目前通用的硬件加速器中ALU的示例,目前通用的硬件加速器中往往还具有其他ALU。
可以理解的是,虽然上述均是以第一精度浮点数为64位浮点数,第二精度浮点数为32位浮点数进行举例说明,但是第二精度浮点数可以是任意硬件加速器具备直接处理能力的浮点数,第一精度浮点数可以是任意硬件加速器不具备处理能力、且精度高于第二精度的浮点数,本领域技术人员可以根据本公开公开的内容,灵活运用以对实际问题进行处理。例如第一精度浮点数可以是扩展双精度浮点数,第二精度浮点数可以是16位浮点数等等。上述第一精度浮点数为64位浮点数,第二精度浮点数为32位浮点数不应为对本公开的限制。
采用上述方式,不需要对高精度浮点数的ALU进行硬件开发,而是利用硬件加速器已有的ALU就可以得到高精度浮点数的平方根,以及高精度浮点数的平方根倒数,同时采用第二精度浮点数的平方根或第二精度浮点数的平方根倒数作为牛顿迭代初始值的参考,而非采用随机值作为迭代初始值可以使迭代初始值大概率更接近最终值,大大减少迭代次数,提升计算效率。
如图3所示,与前述一种确定浮点数处理方法相对应,本公开还提供了一种确定浮点数处理装置,其特征在于,包括中央处理器CPU 310以及硬件加速器320;
所述中央处理器310,用于获取第一精度浮点数,确定所述第一精度浮点数的精度,基于所述精度生成处理指令,并将处理指令发送至硬件加速器;
硬件加速器320,用于基于接收到的处理指令执行:
对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果;
根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数。
在一个实施例中,所述硬件加速器320,具体用于利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
在一个实施例中,所述硬件加速器320,还用于利用整数除法算数逻辑单元ALU对所述第一精度浮点数的平方根进行处理,得到第一精度浮点数的平方根倒数。
在一个实施例中,所述硬件加速器320,具体用于对所述第一精度浮点数的尾数进行截取,得到满足第二精度浮点数尾数位宽要求的第一尾数;对所述第一精度浮点数的指数进行拆分,得到满足第二精度浮点数指数范围要求的第一指数。
在一个实施例中,所述硬件加速器320,具体用于将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
在一个实施例中,所述硬件加速器320,具体用于将第二精度浮点数的平方根的尾数作为迭代初始值;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数尾数与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;
循环结束后,将当前迭代值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数的平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
在一个实施例中,所述硬件加速器320,具体用于利用整数除法ALU确定第一精度浮点数尾数与当前迭代值的商;利用整数加法ALU确定所述商与当前迭代值的和,利用整数除法ALU或移位ALU对所述和进行处理,得到所述商与当前迭代值的平均值。
在一个实施例中,所述硬件加速器320,具体用于将将第二精度浮点数的平方根对应的整数数值与第二数值的乘积,作为迭代初始值;其中,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果;所述第二精度浮点数对应的整数数值为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数对应的整数数值与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;
循环结束后,将当前迭代值作为第一精度浮点数的平方根。
本公开实施例还提供一种电子设备,该电子设备包括上述浮点数处理装置。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
本公开实施例还提供一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
本公开实施例还提供一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:获取第一精度浮点数,确定所述第一精度浮点数的精度,基于所述精度生成处理指令,并将处理指令发送至硬件加速器,以使硬件加速器对第一精度浮点数进行调整得到第二精度浮点数,所述第一精度浮点数的精度大于所述第二精度浮点数的精度,利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根,根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
在一个具体的实施例中,本公开中所描述的硬件加速器可以是GPU,如图6所示,其至少包括:
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 (19)
1.一种浮点数处理方法,包括:
中央处理器获取第一精度浮点数,基于所述第一精度浮点数生成处理指令,并将处理指令发送至硬件加速器;
硬件加速器基于接收到的处理指令执行:
对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果;
根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数。
2.根据权利要求1所述的方法,所述利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果,包括:
利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根;
所述根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数,包括:
根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
3.根据权利要求2所述的方法,还包括:
硬件加速器利用整数除法算数逻辑单元ALU对所述第一精度浮点数的平方根进行处理,得到第一精度浮点数的平方根倒数。
4.根据权利要求2所述的方法,所述对第一精度浮点数进行调整得到第二精度浮点数,包括:
对所述第一精度浮点数的尾数进行截取,得到满足第二精度浮点数尾数位宽要求的第一尾数;
对所述第一精度浮点数的指数进行拆分,得到满足第二精度浮点数指数范围要求的第一指数。
5.根据权利要求4所述的方法,对所述第一精度浮点数的指数进行拆分,包括:
将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
6.根据权利要求5所述的方法,所述根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根,包括:
将第二精度浮点数的平方根的尾数作为迭代初始值;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数尾数与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;
循环结束后,将当前迭代值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数的平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
7.根据权利要求6所述的方法,所述确定第一精度浮点数尾数与当前迭代值的商,包括:
利用整数除法ALU确定第一精度浮点数尾数与当前迭代值的商;
所述将迭代值的取值确定为所述商与当前迭代值的平均值,包括:
利用整数加法ALU确定所述商与当前迭代值的和,利用整数除法ALU或移位ALU对所述和进行处理,得到所述商与当前迭代值的平均值。
8.根据权利要求5所述的方法,所述根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根,包括:
将第二精度浮点数的平方根对应的整数数值与第二数值的乘积,作为迭代初始值;其中,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果;所述第二精度浮点数对应的整数数值为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数对应的整数数值与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;
循环结束后,将当前迭代值作为第一精度浮点数的平方根。
9.一种浮点数处理装置,包括:包括中央处理器以及硬件加速器;
所述中央处理器,用于获取第一精度浮点数,确定所述第一精度浮点数的精度,基于所述精度生成处理指令,并将处理指令发送至硬件加速器;
硬件加速器,用于基于接收到的处理指令执行:
对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
利用对应于第二精度浮点数的算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数对应的处理结果;
根据处理结果确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根或平方根倒数。
10.根据权利要求9所述的装置,
所述硬件加速器,具体用于利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
11.根据权利要求10所述的装置,
所述硬件加速器,还用于利用整数除法算数逻辑单元ALU对所述第一精度浮点数的平方根进行处理,得到第一精度浮点数的平方根倒数。
12.根据权利要求9所述的装置,
所述硬件加速器,具体用于对所述第一精度浮点数的尾数进行截取,得到满足第二精度浮点数尾数位宽要求的第一尾数;对所述第一精度浮点数的指数进行拆分,得到满足第二精度浮点数指数范围要求的第一指数。
13.根据权利要求12所述的装置,
所述硬件加速器,具体用于将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
14.根据权利要求10所述的装置,
所述硬件加速器,具体用于将第二精度浮点数的平方根的尾数作为迭代初始值;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数尾数与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;
循环结束后,将当前迭代值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数的平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
15.根据权利要求14所述的装置,
所述硬件加速器,具体用于利用整数除法ALU确定第一精度浮点数尾数与当前迭代值的商;利用整数加法ALU确定所述商与当前迭代值的和,利用整数除法ALU或移位ALU对所述和进行处理,得到所述商与当前迭代值的平均值。
16.根据权利要求11所述的装置,
所述硬件加速器,具体用于将将第二精度浮点数的平方根对应的整数数值与第二数值的乘积,作为迭代初始值;其中,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果;所述第二精度浮点数对应的整数数值为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
循环执行以下步骤,直到达到预设停止条件:
确定第一精度浮点数对应的整数数值与当前迭代值的商,将迭代值的取值更新为所述商与当前迭代值的平均值;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;
循环结束后,将当前迭代值作为第一精度浮点数的平方根。
17.一种电子设备,包括上述权利要求9-16任一项所述的装置。
18.一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
对第一精度浮点数进行调整得到第二精度浮点数;其中,所述第一精度浮点数的精度大于所述第二精度浮点数的精度;
利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
19.一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:获取第一精度浮点数,确定所述第一精度浮点数的精度,基于所述精度生成处理指令,并将处理指令发送至硬件加速器,以使硬件加速器对第一精度浮点数进行调整得到第二精度浮点数,所述第一精度浮点数的精度大于所述第二精度浮点数的精度,利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行处理,得到所述第二精度浮点数的平方根,根据第二精度浮点数的平方根确定牛顿迭代初始值,调用本地整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210174281.7A CN116700663A (zh) | 2022-02-24 | 2022-02-24 | 一种浮点数处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210174281.7A CN116700663A (zh) | 2022-02-24 | 2022-02-24 | 一种浮点数处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116700663A true CN116700663A (zh) | 2023-09-05 |
Family
ID=87824454
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210174281.7A Pending CN116700663A (zh) | 2022-02-24 | 2022-02-24 | 一种浮点数处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116700663A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389512A (zh) * | 2023-12-06 | 2024-01-12 | 摩尔线程智能科技(北京)有限责任公司 | 一种算术逻辑单元alu系统、电子设备和存储介质 |
-
2022
- 2022-02-24 CN CN202210174281.7A patent/CN116700663A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389512A (zh) * | 2023-12-06 | 2024-01-12 | 摩尔线程智能科技(北京)有限责任公司 | 一种算术逻辑单元alu系统、电子设备和存储介质 |
CN117389512B (zh) * | 2023-12-06 | 2024-02-23 | 摩尔线程智能科技(北京)有限责任公司 | 一种算术逻辑单元alu系统、电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11797303B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
CN106990937B (zh) | 一种浮点数处理装置和处理方法 | |
JP5851536B2 (ja) | 命令に応じた丸め処理の実行 | |
US8745111B2 (en) | Methods and apparatuses for converting floating point representations | |
US11656845B2 (en) | Dot product calculators and methods of operating the same | |
CN106575214B (zh) | 融合乘加运算的模拟 | |
US11816482B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
US8914430B2 (en) | Multiply add functional unit capable of executing scale, round, GETEXP, round, GETMANT, reduce, range and class instructions | |
JP4635087B2 (ja) | 拡張関数のための向上した浮動小数点演算部 | |
US9264066B2 (en) | Type conversion using floating-point unit | |
CN108229648B (zh) | 匹配存储器中数据位宽的卷积计算方法和装置、设备、介质 | |
US9477477B2 (en) | System, method, and computer program product for executing casting-arithmetic instructions | |
CN103180820A (zh) | 用于执行浮点除法的方法和装置 | |
CN114461176B (zh) | 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 | |
CN116700663A (zh) | 一种浮点数处理方法及装置 | |
KR100919236B1 (ko) | 병렬 프로세서를 이용한 3차원 그래픽 기하 변환 방법 | |
KR100847934B1 (ko) | 스케일링된 정수를 사용하는 부동 소수점 연산 | |
US8140608B1 (en) | Pipelined integer division using floating-point reciprocal | |
CN116795324A (zh) | 混合精度浮点乘法装置和混合精度浮点数处理方法 | |
CN116700665A (zh) | 一种确定浮点数平方根倒数的方法及装置 | |
CN116700664A (zh) | 一种确定浮点数平方根的方法及装置 | |
CN115269003A (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
CN116700666A (zh) | 一种浮点数处理方法及装置 | |
US9875084B2 (en) | Calculating trigonometric functions using a four input dot product circuit | |
Hsiao et al. | Design of a low-cost floating-point programmable vertex processor for mobile graphics applications based on hybrid number system |
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 |