CN116700665B - 一种确定浮点数平方根倒数的方法及装置 - Google Patents
一种确定浮点数平方根倒数的方法及装置 Download PDFInfo
- Publication number
- CN116700665B CN116700665B CN202210174708.3A CN202210174708A CN116700665B CN 116700665 B CN116700665 B CN 116700665B CN 202210174708 A CN202210174708 A CN 202210174708A CN 116700665 B CN116700665 B CN 116700665B
- Authority
- CN
- China
- Prior art keywords
- floating point
- point number
- precision floating
- square root
- value
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 69
- 238000012545 processing Methods 0.000 claims abstract description 100
- 238000004088 simulation Methods 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 9
- 238000009877 rendering Methods 0.000 description 6
- 238000007792 addition Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 3
- 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
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)
- Complex Calculations (AREA)
Abstract
本公开提供了一种确定浮点数平方根倒数的方法,包括:中央处理器对第一精度浮点数进行识别,基于识别结果生成处理指令,将所述处理指令发送至硬件加速器;硬件加速器基于接收到的处理指令执行:对第一精度浮点数进行处理得到第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;采用对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对所述第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数;根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种确定浮点数平方根倒数的方法及装置。
背景技术
目前,为了满足各类应用需求,如为了追求更极致的渲染画面,需要硬件加速器具备对高精度浮点数进行计算的能力。
然而,目前市面上的硬件加速器,通常只具有对低精度浮点数进行计算的ALU单元,或者对整数进行计算的ALU单元,如果想要实现计算高精度浮点数的平方根倒数,则需要开发硬件即需要设计和开发用于对高精度浮点数求平方根倒数的ALU,这种方式增加了硬件的设计复杂度,同时也需要较长的研发周期。
发明内容
针对上述技术问题,本公开提供一种确定浮点数平方根倒数的方法及装置,技术方案如下。
根据本公开的第一方面,提供一种确定浮点数平方根倒数的方法,包括:
中央处理器对第一精度浮点数进行识别,基于识别结果生成处理指令,将所述处理指令发送至硬件加速器;
硬件加速器基于接收到的处理指令执行:
对第一精度浮点数进行处理得到第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
采用对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对所述第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数;
根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
在一个实施例中,所述对第一精度浮点数进行处理得到第二精度浮点数,包括:
对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数,用于作为第二精度浮点数的尾数;
对所述第一精度浮点数的指数进行拆分,以得到满足第二精度浮点数指数范围要求的第一指数,用于作为为第二精度浮点数的指数。
在一个实施例中,所述对所述第一精度浮点数的指数进行拆分,包括:
将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
在一个实施例中,所述根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数,包括:
以第二精度浮点数的平方根倒数的尾数为牛顿迭代初始值,以第一精度浮点数的尾数为目标值,调用整数算数逻辑单元ALU模拟牛顿迭代法进行迭代得到输出值;
将输出值、第一数值以及第二数值的乘积作为第一精度浮点数的平方根倒数;其中,第一数值为以2为底,以第二精度浮点数的平方根倒数的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果。
在一个实施例中,所述根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数,包括:
以所述第二精度浮点数的平方根倒数对应的整数数值以及第二数值的乘积作为牛顿迭代初始值,以第一精度浮点数对应的整数数值为目标值,模拟求平方根倒数的牛顿迭代法进行迭代得到输出值;其中,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;所述第二精度浮点数对应的整数数值为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
将该输出值作为第一精度浮点数的平方根倒数。
根据本公开的第二方面,提供一种确定浮点数平方根倒数的装置,包括:中央处理器以及硬件加速器;
所述中央处理器,用于对第一精度浮点数进行识别,基于识别结果生成处理指令,将所述处理指令发送至硬件加速器;
所述硬件加速器,用于基于接收到的处理指令执行:
对第一精度浮点数进行处理得到第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
采用对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对所述第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数;
根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
在一个实施例中,所述硬件加速器,具体用于对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数,用于作为第二精度浮点数的尾数;
对所述第一精度浮点数的指数进行拆分,以得到满足第二精度浮点数指数范围要求的第一指数,用于作为第二精度浮点数的指数。
在一个实施例中,所述硬件加速器,具体用于将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
在一个实施例中,所述硬件加速器,具体用于以第二精度浮点数的平方根倒数的尾数为牛顿迭代初始值,以第一精度浮点数的尾数为目标值,调用整数算数逻辑单元ALU模拟牛顿迭代法进行迭代得到输出值;
将输出值、第一数值以及第二数值的乘积作为第一精度浮点数的平方根倒数;其中,第一数值为以2为底,以第二精度浮点数的平方根倒数的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果。
在一个实施例中,所述硬件加速器,具体用于以所述第二精度浮点数的平方根倒数对应的整数数值以及第二数值的乘积作为牛顿迭代初始值,以第一精度浮点数对应的整数数值为目标值,模拟求平方根倒数的牛顿迭代法进行迭代得到输出值;其中,第二数值为以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对得到的低精度浮点数进行求平方根倒数,以得到的平方根倒数确定牛顿迭代初始值,采用牛顿迭代法确定该高精度浮点数的平方根。
为了便于对本公开的技术方案进行描述,下面先对浮点数说明:
浮点数是一种数字表示方式,采用浮点数可以表达各种实数,在计算机***的发展过程中曾经提出过多种方法来表达实数,例如相对于浮点数的定点数,在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。比如,货币的表达就可以采用这种方式,如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以及整数ALU,即硬件加速器可以对FP16、FP32以及整数进行计算处理,而第一精度浮点数为FP64,即64位浮点数,硬件加速器无法直接对64位浮点数进行识别和计算。
本步骤中,中央处理器在获取待开方计算的第一精度浮点数后,对第一精度浮点数进行识别,并基于识别的第一精度浮点数生成处理指令,将生成的处理指令发送至硬件加速器。通常情况下,中央处理器与硬件加速器相比其可以识别各种精度的浮点数,因此其可以识别高精度浮点数的精度类型以及浮点数的大小,并根据识别结果生成处理指令。
基于识别的第一精度浮点数生成处理指令时,具体可以生成包括对第一精度浮点数转化为第二精度浮点数的处理指令,以及后续基于第二精度浮点数进行牛顿迭代计算的处理指令。第二精度浮点数具体是硬件加速器可以直接进行计算的浮点数,以便硬件加速器可以对第二精度浮点数进行识别和计算。沿用上述例子,若硬件加速器具有FP16(16位浮点数)的ALU、FP32(32位浮点数)的ALU,则第二精度浮点数可以是16位的浮点数或32位的浮点数。为了便于描述,在无特殊说明的情况下,下文中均以第一精度浮点数为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,对第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数。例如利用本地32位浮点数的求平方根倒数ALU对32位浮点数进行处理,得到平方根倒数a*2Y,其在计算机中是以浮点数形式存储的,这里仅是为了便于说明将其展示为上述格式。
S403,根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
牛顿迭代法又称为牛顿-拉弗森法,思想是利用切线是曲线的线性逼近来对多项式进行求解,具体可以参照相关技术,本公开在此不进行详述。本公开中,具体是利用牛顿迭代法的方式确定第一精度浮点数的平方根倒数。
相关技术中,牛顿迭代公式为xn+1=xn-f(xn)/f′(xn),其中,f(xn)为计算平方根倒数的公式,即f(x)=1/x2-y,其中,y为待计算平方根倒数的目标值,x为目标值y的平方根倒数。f′(xn)为对f(x)求导的结果,即f′(xn)=-2x-3,将f(x)与f′(xn)带入牛顿迭代公式xn+1=xn-f(xn)/f′(xn),即得到xn+1=1.5xn-0.5y xn 3。
即先确定一个迭代初始值x0,开始进行迭代,每次迭代后,得到的值xn比xn-1更接近目标值y的平方根倒数,在迭代到达预设停止条件后,即可以得到结果,预设停止条件可以是得到的xn的平方的倒数与目标值y的差值小于预设值、迭代后的xn与xn-1相比差值小于预设值。
在本步骤中,一种具体实施方式可以是:
以第二精度浮点数的平方根倒数的尾数为牛顿迭代初始值,以第一精度浮点数的尾数为目标值,模拟求平方根倒数的牛顿迭代法进行迭代得到输出值;将该输出值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根倒数,其中,第一数值为以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对第二精度浮点数的平方根倒数的整数数值和第二数值进行处理,得到乘积。在确定第二精度浮点数的平方根倒数的整数数值时,可以确定其为第二精度浮点数的尾数与第四数值的乘积,第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果。上述得到第二精度浮点数的平方根倒数的整数数值过程中所涉及到的计算均可以使用整数ALU进行处理。
以第一精度浮点数对应的整数数值为目标值y,利用本地ALU模拟求平方根倒数的牛顿迭代法进行迭代得到输出值,即模拟上述xn+1=1.5xn-0.5y xn 3,进行迭代,例如迭代结束后,得到输出值为Z,则确定Z为第一精度浮点数的平方根倒数。在本实施例中,在确定第一精度浮点数的整数数值时,可以是先确定第一精度浮点数的指数对应的第三数值,即确定以2为底,以第一精度浮点数指数为指数的乘方结果,由于该第三数值为整数,因此可以利用本地整数乘法ALU计算该第三数值和第一精度浮点数的尾数的乘积,得到第一精度浮点数对应的整数数值。其中,计算第一精度浮点数的过程可以是硬件加速器接收到第一精度浮点数时开始执行,也可以是在本步骤中需要利用第一精度浮点数对应的整数数值时,开始执行,同理可以是在得到第二指数时,即开始计算第二数值,也可以是在需要利用第二数值进行计算时才开始计算第二数值,本实施例对此不进行限定。
本实施方式中,以第二精度浮点数的平方根倒数对应的整数数值以及第二数值的乘积作为牛顿迭代初始值,以第一精度浮点数对应的整数数值为目标值,由于乘积和第一精度浮点数对应的整数数值均为整数,因此,硬件加速器可以利用本地整数ALU执行上述迭代计算过程。如需要实现形如xn+1=1.5xn-0.5y xn 3的计算时,其中涉及到的乘法、加法均可以采用整数乘法ALU以及整数加法ALU实现。另外,采用第二精度浮点数的平方根倒数对应的整数数值以及第二数值的平方根倒数的乘积作为迭代初始值,相对于随机选取迭代初始值,可以大大减少迭代次数,可以使迭代结果尽可能快的收敛,整体处理效率较高。
上述两种具体实施方式中,均需要计算和利用第二指数的二分之一,因此,在对第一精度浮点数的指数进行拆分时,需要保证拆分出的第二指数为偶数。
如图5所示,硬件加速器在基于牛顿迭代法进行处理时,具体可以调用本地多种已有的ALU进行计算,从而模拟实现牛顿迭代法。上述牛顿迭代的过程中并未用到除法,由于目前大多数硬件加速器中都不具备除法ALU,因此上述计算方式适用于市面上大多数硬件加速器。图5所示出的第二精度浮点数求平方根倒数ALU、整数加法ALU以及整数乘法ALU,仅仅为目前通用的硬件加速器中ALU的示例,目前通用的硬件加速器中往往还具有其他ALU。
可以理解的是,虽然上述均是以第一精度浮点数为64位浮点数,第二精度浮点数为32位浮点数进行举例说明,但是第二精度浮点数可以是任意硬件加速器具备直接处理能力的浮点数,第一精度浮点数可以是任意硬件加速器不具备处理能力、且精度高于第二精度的浮点数,本领域技术人员可以根据本公开公开的内容,灵活运用以对实际问题进行处理。例如第一精度浮点数可以是扩展双精度浮点数,第二精度浮点数可以是16位浮点数等等。上述第一精度浮点数为64位浮点数,第二精度浮点数为32位浮点数不应为对本公开的限制。
采用上述方式,不需要对高精度浮点数的ALU进行硬件开发,而是利用硬件加速器已有的ALU就可以得到高精度浮点数的平方根,同时采用第二精度浮点数的平方根作为牛顿迭代初始值的参考,而非采用随机值作为迭代初始值可以使迭代初始值大概率更接近最终值,大大减少迭代次数,提升计算效率。另外,由于目前大多数ALU不具备除法计算的能力,采用上述牛顿迭代法确定平方根倒数的方式可以避免使用除法进行计算,因此上述方式适用于目前市面上大多数硬件加速器。
如图3所示,与前述一种确定浮点数平方根倒数的方法相对应,本公开还提供了一种确定浮点数平方根倒数的装置,其特征在于,包括中央处理器CPU 310以及硬件加速器320;
所述中央处理器CPU 310,用于对第一精度浮点数进行识别,基于识别结果生成处理指令,将所述处理指令发送至硬件加速器;
所述硬件加速器320,用于基于接收到的处理指令执行:
对第一精度浮点数进行处理得到第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
采用对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对所述第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数;
根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
在一个实施例中,所述硬件加速器320,具体用于对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数,用于作为第二精度浮点数的尾数;
对所述第一精度浮点数的指数进行拆分,以得到满足第二精度浮点数指数范围要求的第一指数,用于作为第二精度浮点数的指数。
在一个实施例中,所述硬件加速器320,具体用于将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
在一个实施例中,所述硬件加速器320,具体用于以第二精度浮点数的平方根倒数的尾数为牛顿迭代初始值,以第一精度浮点数的尾数为目标值,调用整数算数逻辑单元ALU模拟牛顿迭代法进行迭代得到输出值;
将输出值、第一数值以及第二数值的乘积作为第一精度浮点数的平方根倒数;其中,第一数值为以2为底,以第二精度浮点数的平方根倒数的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果。
在一个实施例中,所述硬件加速器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 (9)
1.一种确定浮点数平方根倒数的方法,包括:
中央处理器对第一精度浮点数进行识别,基于识别结果生成处理指令,将所述处理指令发送至硬件加速器;
硬件加速器基于接收到的处理指令执行:
对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数,用于作为第二精度浮点数的尾数;
将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数,第一指数用于作为第二精度浮点数的指数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
采用对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对所述第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数;
根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
2.根据权利要求1所述的方法,所述根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数,包括:
以第二精度浮点数的平方根倒数的尾数为牛顿迭代初始值,以第一精度浮点数的尾数为目标值,调用整数算数逻辑单元ALU模拟牛顿迭代法进行迭代得到输出值;
将输出值、第一数值以及第二数值的乘积作为第一精度浮点数的平方根倒数;其中,第一数值为以2为底,以第二精度浮点数的平方根倒数的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果。
3.根据权利要求1所述的方法,所述根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数,包括:
以所述第二精度浮点数的平方根倒数对应的整数数值以及第二数值的乘积作为牛顿迭代初始值,以第一精度浮点数对应的整数数值为目标值,模拟求平方根倒数的牛顿迭代法进行迭代得到输出值;其中,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;所述第二精度浮点数对应的整数数值为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
将该输出值作为第一精度浮点数的平方根倒数。
4.一种确定浮点数平方根倒数的装置,包括中央处理器以及硬件加速器;
所述中央处理器,用于对第一精度浮点数进行识别,基于识别结果生成处理指令,将所述处理指令发送至硬件加速器;
所述硬件加速器,用于基于接收到的处理指令执行:
对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数,用于作为第二精度浮点数的尾数;
将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数,第一指数用于作为第二精度浮点数的指数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
采用对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对所述第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数;
根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
5.根据权利要求4所述的装置,
所述硬件加速器,具体用于以第二精度浮点数的平方根倒数的尾数为牛顿迭代初始值,以第一精度浮点数的尾数为目标值,调用整数算数逻辑单元ALU模拟牛顿迭代法进行迭代得到输出值;
将输出值、第一数值以及第二数值的乘积作为第一精度浮点数的平方根倒数;其中,第一数值为以2为底,以第二精度浮点数的平方根倒数的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果。
6.根据权利要求4所述的装置,
所述硬件加速器,具体用于以所述第二精度浮点数的平方根倒数对应的整数数值以及第二数值的乘积作为牛顿迭代初始值,以第一精度浮点数对应的整数数值为目标值,模拟求平方根倒数的牛顿迭代法进行迭代得到输出值;其中,第二数值为以2为底,以第二指数的二分之一的相反数为指数的乘方结果;所述第一精度浮点数对应的整数数值为所述第一精度浮点数的尾数与第三数值的乘积,所述第三数值为以2为底,以所述第一精度浮点数的指数为指数的乘方结果;所述第二精度浮点数对应的整数数值,为所述第二精度浮点数的尾数与第四数值的乘积,所述第四数值为以2为底,以所述第二精度浮点数的指数为指数的乘方结果;
将该输出值作为第一精度浮点数的平方根倒数。
7.一种电子设备,包括上述权利要求4-6任一项所述的装置。
8.一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
对第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数,用于作为第二精度浮点数的尾数;
将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数,第一指数用于作为第二精度浮点数的指数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
采用对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对所述第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数;
根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
9.一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:对第一精度浮点数进行识别,基于识别结果生成处理指令,将所述处理指令发送至硬件加速器,以使硬件加速器对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数,用于作为第二精度浮点数的尾数;将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数,第一指数用于作为第二精度浮点数的指数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;采用对应于第二精度浮点数的求平方根倒数算数逻辑单元ALU,对所述第二精度浮点数进行计算,得到所述第二精度浮点数的平方根倒数;根据第二精度浮点数的平方根倒数确定牛顿迭代初始值,调用整数算数逻辑单元ALU模拟牛顿迭代法确定所述第一精度浮点数的平方根倒数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210174708.3A CN116700665B (zh) | 2022-02-24 | 2022-02-24 | 一种确定浮点数平方根倒数的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210174708.3A CN116700665B (zh) | 2022-02-24 | 2022-02-24 | 一种确定浮点数平方根倒数的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116700665A CN116700665A (zh) | 2023-09-05 |
CN116700665B true CN116700665B (zh) | 2024-06-21 |
Family
ID=87839785
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210174708.3A Active CN116700665B (zh) | 2022-02-24 | 2022-02-24 | 一种确定浮点数平方根倒数的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116700665B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116700664A (zh) * | 2022-02-24 | 2023-09-05 | 象帝先计算技术(重庆)有限公司 | 一种确定浮点数平方根的方法及装置 |
CN116700666A (zh) * | 2022-02-24 | 2023-09-05 | 象帝先计算技术(重庆)有限公司 | 一种浮点数处理方法及装置 |
CN116700663A (zh) * | 2022-02-24 | 2023-09-05 | 象帝先计算技术(重庆)有限公司 | 一种浮点数处理方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070055723A1 (en) * | 2005-09-07 | 2007-03-08 | Marius Cornea-Hasegan | Method and system for performing quad precision floating-point operations in microprocessors |
US7689642B1 (en) * | 2005-11-03 | 2010-03-30 | Sun Microsystems, Inc. | Efficient accuracy check for Newton-Raphson divide and square-root operations |
US9829956B2 (en) * | 2012-11-21 | 2017-11-28 | Nvidia Corporation | Approach to power reduction in floating-point operations |
CN104598197B (zh) * | 2015-01-26 | 2017-05-31 | 中国科学院自动化研究所 | 一种浮点倒数和/或平方根倒数运算方法及其装置 |
GB2582146B (en) * | 2019-03-11 | 2021-08-18 | Graphcore Ltd | Execution Unit for Evaluating Functions Using Newton Raphson Iterations |
CN112732220A (zh) * | 2019-10-14 | 2021-04-30 | 安徽寒武纪信息科技有限公司 | 用于浮点运算的乘法器、方法、集成电路芯片和计算装置 |
-
2022
- 2022-02-24 CN CN202210174708.3A patent/CN116700665B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116700664A (zh) * | 2022-02-24 | 2023-09-05 | 象帝先计算技术(重庆)有限公司 | 一种确定浮点数平方根的方法及装置 |
CN116700666A (zh) * | 2022-02-24 | 2023-09-05 | 象帝先计算技术(重庆)有限公司 | 一种浮点数处理方法及装置 |
CN116700663A (zh) * | 2022-02-24 | 2023-09-05 | 象帝先计算技术(重庆)有限公司 | 一种浮点数处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116700665A (zh) | 2023-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11797303B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
US11698772B2 (en) | Prepare for shorter precision (round for reround) mode in a decimal floating-point instruction | |
CN106990937B (zh) | 一种浮点数处理装置和处理方法 | |
US11816482B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
JP5111377B2 (ja) | 浮動小数点パイプラインに係る装置、方法およびシステム | |
US8745111B2 (en) | Methods and apparatuses for converting floating point representations | |
US7385611B1 (en) | Decompression of block encoded texture data | |
CN106575214B (zh) | 融合乘加运算的模拟 | |
CN116700663A (zh) | 一种浮点数处理方法及装置 | |
CN103180820A (zh) | 用于执行浮点除法的方法和装置 | |
CN114461176B (zh) | 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 | |
CN112130805B (zh) | 包括浮点加法器的芯片、设备及浮点运算的控制方法 | |
KR100919236B1 (ko) | 병렬 프로세서를 이용한 3차원 그래픽 기하 변환 방법 | |
CN116700664B (zh) | 一种确定浮点数平方根的方法及装置 | |
US6298365B1 (en) | Method and system for bounds comparator | |
KR100847934B1 (ko) | 스케일링된 정수를 사용하는 부동 소수점 연산 | |
CN116700666A (zh) | 一种浮点数处理方法及装置 | |
CN116795324A (zh) | 混合精度浮点乘法装置和混合精度浮点数处理方法 | |
CN116700665B (zh) | 一种确定浮点数平方根倒数的方法及装置 | |
US20220113943A1 (en) | Method for multiply-add operations for neural network | |
CN115269003A (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
Hsiao et al. | Design of a low-cost floating-point programmable vertex processor for mobile graphics applications based on hybrid number system | |
CN115718586A (zh) | 像素颜色混合操作方法、图形绘制方法、装置和设备 | |
CN118312130A (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
US9304739B1 (en) | Optimized 3D lighting computations using a logarithmic 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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |