CN116700664A - 一种确定浮点数平方根的方法及装置 - Google Patents

一种确定浮点数平方根的方法及装置 Download PDF

Info

Publication number
CN116700664A
CN116700664A CN202210174293.XA CN202210174293A CN116700664A CN 116700664 A CN116700664 A CN 116700664A CN 202210174293 A CN202210174293 A CN 202210174293A CN 116700664 A CN116700664 A CN 116700664A
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
Application number
CN202210174293.XA
Other languages
English (en)
Inventor
唐志敏
王海洋
姜莹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xiangdixian Computing Technology Chongqing Co ltd
Original Assignee
Xiangdixian Computing Technology Chongqing Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xiangdixian Computing Technology Chongqing Co ltd filed Critical Xiangdixian Computing Technology Chongqing Co ltd
Priority to CN202210174293.XA priority Critical patent/CN116700664A/zh
Publication of CN116700664A publication Critical patent/CN116700664A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本公开提供了一种确定浮点数平方根的方法及装置,包括,中央处理器识别第一精度浮点数,基于识别的第一精度浮点数生成处理指令,将生成的处理指令发送至硬件加速器;硬件加速器基于接收到的处理指令执行:将第一精度浮点数转化为第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。

Description

一种确定浮点数平方根的方法及装置
技术领域
本公开涉及计算机技术领域,尤其涉及一种确定浮点数平方根的方法及装置。
背景技术
目前,为了满足各类应用需求,如为了追求更极致的渲染画面,需要硬件加速器具备对高精度浮点数进行开方的能力。
然而,目前市面上的硬件加速器,通常只具有对低精度浮点数进行计算的ALU单元,或者对整数进行计算的ALU单元,如果想要实现对高精度浮点数进行开方计算,则需要开发硬件即需要设计和开发用于对高精度浮点数进行开方计算的ALU,这种方式增加了硬件的设计复杂度,同时也需要较长的研发周期。
发明内容
针对上述技术问题,本公开提供一种确定浮点数平方根的方法及装置,技术方案如下。
根据本公开的第一方面,提供一种确定浮点数平方根的方法,包括:
中央处理器识别第一精度浮点数,基于识别的第一精度浮点数生成处理指令,将生成的处理指令发送至硬件加速器;
硬件加速器基于接收到的处理指令执行:
将第一精度浮点数转化为第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。
在一个实施例中,将第一精度浮点数转化为第二精度浮点数,具体可以为:
对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数;所述第一尾数为第二精度浮点数的尾数;
对所述第一精度浮点数的指数进行拆分,以得到满足第二精度浮点数指数范围要求的第一指数;所述第一指数为第二精度浮点数的指数。
在一个实施例中,对第一精度浮点数的指数进行拆分,包括:
将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
在一个实施例中,所述根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根,包括:根据所述第二精度浮点数的平方根尾数确定二分法迭代初始的最大值以及最小值;
循环执行以下步骤,直到达到预设停止条件:
以当前最大值和当前最小值的平均值为目标值;
对所述目标值进行平方计算得到计算结果;
将所述计算结果与第一精度浮点数的尾数进行比较;
若所述计算结果大于所述第一精度浮点数的尾数,则将所述目标值作为最大值;
若所述计算结果小于所述第一精度浮点数的尾数,则将所述目标值作为最小值;
在循环结束后,将当前目标值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
在一个实施例中,所述预设停止条件包括:所述计算结果与所述第一精度浮点数的尾数相等、循环执行预设次数和/或当前最大值与最小值的差小于预设值。
在一个实施例中,所述根据所述第二精度浮点数平方根的尾数确定二分法迭代初始的最大值以及最小值,包括:利用整数加法算数逻辑单元ALU进行如下处理:将所述第二精度浮点数平方根的尾数加上预设数值得到二分法迭代初始的最大值,将所述第二精度浮点数平方根的尾数减去所述预设数值得到二分法迭代初始的最小值。
在一个实施例中,所述以当前最大值以及当前最小值的平均值为目标值,包括:利用整数加法算数逻辑单元ALU计算当前最大值以及当前最小值的和,并利用整数乘法算数逻辑单元ALU计算所述和的二分之一得到目标值;
所述对所述目标值进行平方计算得到第二尾数,包括:
利用整数乘法算数逻辑单元ALU对所述目标值进行平方计算得到第二尾数。
所述将所述计算结果与第一精度浮点数的尾数进行比较,包括:
利用整数算数逻辑单元ALU将所述计算结果与第一精度浮点数的尾数进行比较;
所述将当前目标值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根,包括:利用整数乘法算数逻辑单元ALU计算目标值、第一数值以及第二数值的乘积。
根据本公开实施例的第二个方面,提供了一种确定浮点数平方根的装置,包括:中央处理器以及硬件加速器;
所述中央处理器,用于识别第一精度浮点数,基于识别的第一精度浮点数生成处理指令,将生成的处理指令发送至硬件加速器;
硬件加速器,用于基于接收到的指令执行:
将第一精度浮点数转化为第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
硬件加速器,用于利用对应于第二精度浮点数的求平方根算数逻辑单元ALU对所述第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。
在一个实施例中,所述硬件加速器,具体用于对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数;所述第一尾数为第二精度浮点数的尾数;对所述第一精度浮点数的指数进行拆分,以得到满足第二精度浮点数指数范围要求的第一指数;所述第一指数为第二精度浮点数的指数。
在一个实施例中,所述硬件加速器,具体用于将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
在一个实施例中,所述硬件加速器,具体用于根据所述第二精度浮点数的平方根尾数确定二分法迭代初始的最大值以及最小值;
循环执行以下步骤,直到达到预设停止条件:
以当前最大值和当前最小值的平均值为目标值;
对所述目标值进行平方计算得到计算结果;
将所述计算结果与第一精度浮点数的尾数进行比较;
若所述计算结果大于所述第一精度浮点数的尾数,则将所述目标值作为最大值;
若所述计算结果小于所述第一精度浮点数的尾数,则将所述目标值作为最小值;
在循环结束后,将当前目标值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
在一个实施例中,所述预设停止条件包括:
所述计算结果与所述第一精度浮点数的尾数相等、循环执行预设次数和/或当前最大值与最小值的差小于预设值。
在一个实施例中,所述硬件加速器,具体用于利用整数加法算数逻辑单元ALU进行如下处理:将所述第二精度浮点数平方根的尾数加上预设数值得到二分法迭代初始的最大值,将所述第二精度浮点数平方根的尾数减去所述预设数值得到二分法迭代初始的最小值。
在一个实施例中,所述硬件加速器,具体用于利用整数加法算数逻辑单元ALU计算当前最大值以及当前最小值的和,并利用整数乘法算数逻辑单元ALU计算所述和的二分之一得到目标值;利用整数乘法算数逻辑单元ALU对所述目标值进行平方计算。
在一个实施例中,所述硬件加速器,具体用于利用整数算数逻辑单元ALU将所述计算结果与第一精度浮点数的尾数进行比较;利用整数乘法算数逻辑单元ALU计算目标值、第一数值以及第二数值的乘积。
根据本公开实施例的第三个方面,提供了一种电子设备,包括上述确定浮点数平方根的装置。
根据本公开实施例的第四个方面,提供了一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
将第一精度浮点数转化为第二精度浮点数,其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
利用对应于第二精度浮点数的求平方根算数逻辑单元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组合为1111_0101_1010_1101_1110_111*2X,其中,可以理解的是,第二精度浮点数具体是以标准的浮点数形式存储在计算机中的,前述的组合形式只是为了便于说明和描述而展示的。
S402,硬件加速器利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;
由于第二精度浮点数是硬件加速器可以直接进行处理的浮点数,因此硬件加速器可以利用本地对应于第二精度浮点数的求平方根算术逻辑单元ALU对第二精度浮点数进行开方处理,得到第二精度浮点数的平方根,例如利用本地32位浮点数的求平方根ALU对32位浮点数进行开方处理,得到平方根a*2X/2,其在计算机中是以浮点数形式存储的,这里仅是为了便于说明将其展示为该格式。
S403,根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。
利用二分法确定一个值w的平方根,具体是首先随机确定一个最大值high以及一个最小值low,然后确定最大值high以及最小值low的平均值mid,对mid进行平方,比较mid的平方与w的大小,如果mid的平方比w小则重新确定mid为low,或者,如果mid的平方比w大则重新确定mid为high,并重新迭代计算,直到找到w的平方根。可以理解的是,迭代初始值与w的平方根越接近,则迭代的次数越少。
在本步骤中,硬件加速器可以是根据第二精度浮点数的平方根的尾数确定二分法迭代初始的最大值以及最小值;
其中,具体可以是利用本地的整数加法算数逻辑单元ALU,对所述第二精度浮点数平方根的尾数加上预设数值得到二分法迭代初始的最大值,将所述第二精度浮点数平方根的尾数减去所述预设数值得到二分法迭代初始的最小值。例如,沿用上述例子,第二精度浮点数平方根为a*2X/2,则尾数为a,可以是用尾数a+1作为最大值high,尾数a-1作为最小值low,当然该值需要大于0。另外,也可以是以第二精度浮点数平方根的尾数乘某个大于1的数值得到二分法迭代初始的最大值,以第二精度浮点数平方根的尾数除该数值得到二分法迭代初始的最小值。采用上述方式可以得到二分法迭代初始值。
在得到初始值后,循环执行以下步骤,直到达到预设停止条件:
以当前最大值和当前最小值的平均值为目标值;
对所述目标值进行平方计算得到计算结果;
将计算结果与第一精度浮点数的尾数进行比较;
若所述计算结果大于所述第一精度浮点数的尾数,则将目标值作为最大值;
若所述计算结果小于所述第一精度浮点数的尾数,则将目标值作为最小值;
在循环结束后,将当前目标值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根。其中,第一数值为以2为底,以第二精度浮点数平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
例如,沿用上述例子,第二精度浮点数平方根为a*2X/2,a+1作为最大值high,尾数a-1作为最小值low,则确定(a+1+a-1)/2为目标值mid;
比较mid*mid与第一精度浮点数的尾数的大小;需要知晓的是,虽然硬件加速器无法识别第一精度浮点数,也无法对第一精度浮点数进行计算,但是硬件加速器可以基于中央处理器发送的指令确定第一精度浮点数的尾数部分,并将该尾数部分作为整数,调用整数ALU进行比较。
如果mid*mid比第一精度浮点数的尾数小,则将目标值mid作为最小值,仍以该high为最大值,再次进行迭代计算。
相反,如果mid*mid比第一精度浮点数的尾数大,则将当前值mid作为最大值,仍以该low为最小值,再次进行迭代计算,直到达到预设停止条件则停止迭代过程。
其中,预设停止条件可以是计算结果与所述第一精度浮点数的尾数相等、循环执行预设次数和/或当前最大值与最小值的差小于预设值。
在循环结束后,将目标值mid、第一数值2X/2,第二数值2Y/2的乘积mid*2Y/2+X/2作为第一精度浮点数的平方根。由于需要得到第二指数的二分之一,用于得到最终结果,因此在上述S401中,在对第一精度浮点数的指数进行拆分时,需要保证拆分出的第二指数为偶数。其中,第一数值以及第二数值,可以在循环结束后通过计算得到,也可以是在确定了第二精度浮点数平方根后,即计算得到第一数值以及第二数值。
如图5所示,硬件加速器在基于二分法进行处理时,具体可以调用本地多种已有的ALU进行计算,从而模拟实现二分法。
例如,硬件加速器在计算当前最大值以及当前最小值的平均值时,可以是利用整数加法算数逻辑单元ALU计算当前最大值以及当前最小值的和,并利用整数算数逻辑单元ALU计算该和的二分之一得到目标值,即对和进行移位;
在对目标值进行平方计算时,可以是利用整数乘法ALU对两个目标值进行相乘,其中,由于目标值只包括浮点数的尾数部分,因此其为整数。
将计算结果与第一精度浮点数对应尾数进行比较时,可以采用整数逻辑ALU进行比较。
在循环结束后,计算目标值、第一数值以及第二数值的乘积时,可以是利用整数乘法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,具体用于根据所述第二精度浮点数的平方根尾数确定二分法迭代初始的最大值以及最小值;
循环执行以下步骤,直到达到预设停止条件:
以当前最大值和当前最小值的平均值为目标值;
对所述目标值进行平方计算得到计算结果;
将所述计算结果与第一精度浮点数的尾数进行比较;
若所述计算结果大于所述第一精度浮点数的尾数,则将所述目标值作为最大值;
若所述计算结果小于所述第一精度浮点数的尾数,则将所述目标值作为最小值;
在循环结束后,将当前目标值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
在一个实施例中,所述预设停止条件包括:
所述计算结果与所述第一精度浮点数的尾数相等、循环执行预设次数和/或当前最大值与最小值的差小于预设值。
在一个实施例中,所述硬件加速器320,具体用于利用整数加法算数逻辑单元ALU进行如下处理:将所述第二精度浮点数平方根的尾数加上预设数值得到二分法迭代初始的最大值,将所述第二精度浮点数平方根的尾数减去所述预设数值得到二分法迭代初始的最小值。
在一个实施例中,所述硬件加速器320,具体用于利用整数加法算数逻辑单元ALU计算当前最大值以及当前最小值的和,并利用整数乘法算数逻辑单元ALU计算所述和的二分之一得到目标值;利用整数乘法算数逻辑单元ALU对所述目标值进行平方计算。
在一个实施例中,所述硬件加速器320,具体用于利用整数算数逻辑单元ALU将所述计算结果与第一精度浮点数的尾数进行比较;利用整数乘法算数逻辑单元ALU计算目标值、第一数值以及第二数值的乘积。
本公开实施例还提供一种电子设备,该电子设备包括上述的电子装置。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
本公开实施例还提供一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:识别第一精度浮点数,基于识别的第一精度浮点数生成处理指令,将生成的处理指令发送至硬件加速器,以使硬件加速器根据该处理指令将第一精度浮点数转化为第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。
本公开实施例还提供一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
将第一精度浮点数转化为第二精度浮点数,其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。
可以理解的是,中央处理器CPU和硬件加速器除了包括存储器以及控制器外,通常还包括如运算器等其他处理单元,本公开对此不进行详述。
在一个具体的实施例中,本公开中所描述的硬件加速器可以是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所述的方法,所述将第一精度浮点数转化为第二精度浮点数,包括:
对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数;所述第一尾数为第二精度浮点数的尾数;
对所述第一精度浮点数的指数进行拆分,以得到满足第二精度浮点数指数范围要求的第一指数;所述第一指数为第二精度浮点数的指数。
3.根据权利要求2所述的方法,对所述第一精度浮点数的指数进行拆分,包括:
将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
4.根据权利要求3所述的方法,所述根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根,包括:
根据所述第二精度浮点数的平方根尾数确定二分法迭代初始的最大值以及最小值;
循环执行以下步骤,直到达到预设停止条件:
以当前最大值和当前最小值的平均值为目标值;
对所述目标值进行平方计算得到计算结果;
将所述计算结果与第一精度浮点数的尾数进行比较;
若所述计算结果大于所述第一精度浮点数的尾数,则将所述目标值作为最大值;
若所述计算结果小于所述第一精度浮点数的尾数,则将所述目标值作为最小值;
在循环结束后,将当前目标值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
5.根据权利要求4所述的方法,所述预设停止条件包括:
所述计算结果与所述第一精度浮点数的尾数相等、循环执行预设次数和/或当前最大值与最小值的差小于预设值。
6.根据权利要求4所述的方法,所述根据所述第二精度浮点数平方根的尾数确定二分法迭代初始的最大值以及最小值,包括:
利用整数加法算数逻辑单元ALU进行如下处理:将所述第二精度浮点数平方根的尾数加上预设数值得到二分法迭代初始的最大值,将所述第二精度浮点数平方根的尾数减去所述预设数值得到二分法迭代初始的最小值。
7.根据权利要求4所述的方法,所述以当前最大值以及当前最小值的平均值为目标值,包括:
利用整数加法算数逻辑单元ALU计算当前最大值以及当前最小值的和,并利用整数乘法算数逻辑单元ALU计算所述和的二分之一得到目标值;
所述对所述目标值进行平方计算得到第二尾数,包括:
利用整数乘法算数逻辑单元ALU对所述目标值进行平方计算得到第二尾数。
8.根据权利要求7所述的方法,所述将所述计算结果与第一精度浮点数的尾数进行比较,包括:
利用整数算数逻辑单元ALU将所述计算结果与第一精度浮点数的尾数进行比较;
所述将当前目标值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根,包括:
利用整数乘法算数逻辑单元ALU计算目标值、第一数值以及第二数值的乘积。
9.一种确定浮点数平方根的装置,包括中央处理器以及硬件加速器;
所述中央处理器,用于识别第一精度浮点数,基于识别的第一精度浮点数生成处理指令,将生成的处理指令发送至硬件加速器;
硬件加速器,用于基于接收到的指令执行:
将第一精度浮点数转化为第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
硬件加速器,用于利用对应于第二精度浮点数的求平方根算数逻辑单元ALU对所述第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。
10.根据权利要求9所述的装置,
所述硬件加速器,具体用于对所述第一精度浮点数的尾数进行截取,以得到满足第二精度浮点数尾数位宽要求的第一尾数;所述第一尾数为第二精度浮点数的尾数;对所述第一精度浮点数的指数进行拆分,以得到满足第二精度浮点数指数范围要求的第一指数;所述第一指数为第二精度浮点数的指数。
11.根据权利要求10所述的装置,
所述硬件加速器,具体用于将所述第一精度浮点数的指数拆分为第一指数与第二指数相加;其中,所述第一指数满足第二精度浮点数的指数范围要求,第二指数为偶数。
12.根据权利要求11所述的装置,
所述硬件加速器,具体用于根据所述第二精度浮点数的平方根尾数确定二分法迭代初始的最大值以及最小值;
循环执行以下步骤,直到达到预设停止条件:
以当前最大值和当前最小值的平均值为目标值;
对所述目标值进行平方计算得到计算结果;
将所述计算结果与第一精度浮点数的尾数进行比较;
若所述计算结果大于所述第一精度浮点数的尾数,则将所述目标值作为最大值;
若所述计算结果小于所述第一精度浮点数的尾数,则将所述目标值作为最小值;
在循环结束后,将当前目标值、第一数值以及第二数值的乘积,作为第一精度浮点数的平方根;其中,第一数值为以2为底,以第二精度浮点数平方根的指数为指数的乘方结果,第二数值为以2为底,以第二指数的二分之一为指数的乘方结果。
13.根据权利要求12所述的装置,所述预设停止条件包括:
所述计算结果与所述第一精度浮点数的尾数相等、循环执行预设次数和/或当前最大值与最小值的差小于预设值。
14.根据权利要求11所述的装置,
所述硬件加速器,具体用于利用整数加法算数逻辑单元ALU进行如下处理:将所述第二精度浮点数平方根的尾数加上预设数值得到二分法迭代初始的最大值,将所述第二精度浮点数平方根的尾数减去所述预设数值得到二分法迭代初始的最小值。
15.根据权利要求11所述的装置,
所述硬件加速器,具体用于利用整数加法算数逻辑单元ALU计算当前最大值以及当前最小值的和,并利用整数乘法算数逻辑单元ALU计算所述和的二分之一得到目标值;利用整数乘法算数逻辑单元ALU对所述目标值进行平方计算。
16.据权利要求15所述的装置,
所述硬件加速器,具体用于利用整数算数逻辑单元ALU将所述计算结果与第一精度浮点数的尾数进行比较;利用整数乘法算数逻辑单元ALU计算目标值、第一数值以及第二数值的乘积。
17.一种电子设备,包括上述权利要求9-16任一项所述的装置。
18.一种硬件加速器,包括:
存储器,用于存储中央处理器发送的处理指令;
控制器,用于读取存储器中的处理指令以执行:
将第一精度浮点数转化为第二精度浮点数,其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;
利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;
根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。
19.一种中央处理器,包括:
存储器,用于存储处理程序;
控制器,用于读取所述处理程序以执行:识别第一精度浮点数,基于识别的第一精度浮点数生成处理指令,将生成的处理指令发送至硬件加速器,以使硬件加速器根据该处理指令将第一精度浮点数转化为第二精度浮点数;其中,所述第二精度浮点数的精度小于所述第一精度浮点数的精度;利用对应于第二精度浮点数的求平方根算数逻辑单元ALU,对所述第二精度浮点数进行开方处理,得到所述第二精度浮点数的平方根;根据第二精度浮点数的平方根确定二分法迭代初始值,调用整数算数逻辑单元ALU模拟二分法确定所述第一精度浮点数的平方根。
CN202210174293.XA 2022-02-24 2022-02-24 一种确定浮点数平方根的方法及装置 Pending CN116700664A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210174293.XA CN116700664A (zh) 2022-02-24 2022-02-24 一种确定浮点数平方根的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210174293.XA CN116700664A (zh) 2022-02-24 2022-02-24 一种确定浮点数平方根的方法及装置

Publications (1)

Publication Number Publication Date
CN116700664A true CN116700664A (zh) 2023-09-05

Family

ID=87824445

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210174293.XA Pending CN116700664A (zh) 2022-02-24 2022-02-24 一种确定浮点数平方根的方法及装置

Country Status (1)

Country Link
CN (1) CN116700664A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5293558A (en) * 1988-11-04 1994-03-08 Hitachi, Ltd Multiplication, division and square root extraction apparatus
US20040268324A1 (en) * 2003-06-28 2004-12-30 Paul Walker Method and apparatus for the emulation of high precision floating point instructions
US20050122330A1 (en) * 2003-11-14 2005-06-09 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
CN113126954A (zh) * 2019-12-31 2021-07-16 华为技术有限公司 浮点数乘法计算的方法、装置和算术逻辑单元

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5293558A (en) * 1988-11-04 1994-03-08 Hitachi, Ltd Multiplication, division and square root extraction apparatus
US20040268324A1 (en) * 2003-06-28 2004-12-30 Paul Walker Method and apparatus for the emulation of high precision floating point instructions
US20050122330A1 (en) * 2003-11-14 2005-06-09 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
CN113126954A (zh) * 2019-12-31 2021-07-16 华为技术有限公司 浮点数乘法计算的方法、装置和算术逻辑单元

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
DONG WANG: "Disign of High-throughput Fixed-Point Complex Reciprocal/Square-Root Unit", 《IEEE TRANSACTION ON CIRCUITS AND SYSTEM II: EXPRESS BRIEFS》, vol. 57, no. 8, 3 August 2010 (2010-08-03), pages 627 - 631 *
李大鹏: "高性能浮点除法和平方根的设计和实现", 《中国优秀博硕士学位论文全文数据库 (硕士) 信息科技辑》, no. 07, 15 July 2006 (2006-07-15), pages 138 - 46 *
王培康;: "快速高精度的二进制浮点数开平方算法", 自动化与仪表, no. 03, 1 October 1993 (1993-10-01), pages 57 - 58 *
申伯纯: "应用逐次递进二分法在DSP上快速计算平方根", 《电子工程师》, no. 04, 15 April 2007 (2007-04-15), pages 59 - 61 *

Similar Documents

Publication Publication Date Title
US11797303B2 (en) Generalized acceleration of matrix multiply accumulate operations
CN106990937B (zh) 一种浮点数处理装置和处理方法
US20230342112A1 (en) Decimal floating-point round-for-reround instruction
KR100947138B1 (ko) 명령어에 응답하여 라운딩 연산을 수행하는 방법, 장치, 시스템 및 머신-판독가능 매체
US11656845B2 (en) Dot product calculators and methods of operating the same
US11816482B2 (en) Generalized acceleration of matrix multiply accumulate operations
US9645792B2 (en) Emulation of fused multiply-add operations
CN116700663A (zh) 一种浮点数处理方法及装置
CN114461176B (zh) 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备
KR100919236B1 (ko) 병렬 프로세서를 이용한 3차원 그래픽 기하 변환 방법
KR100847934B1 (ko) 스케일링된 정수를 사용하는 부동 소수점 연산
CN116700664A (zh) 一种确定浮点数平方根的方法及装置
CN116700665A (zh) 一种确定浮点数平方根倒数的方法及装置
CN116700666A (zh) 一种浮点数处理方法及装置
CN115268832A (zh) 浮点数取整的方法、装置以及电子设备
US9304739B1 (en) Optimized 3D lighting computations using a logarithmic number system
CN117973470A (zh) 数据处理装置、方法、芯片、设备和存储介质
CN116974513A (zh) 数据处理方法、装置、芯片、计算机设备及存储介质
CN115718586A (zh) 像素颜色混合操作方法、图形绘制方法、装置和设备
CN116795324A (zh) 混合精度浮点乘法装置和混合精度浮点数处理方法
KR20220054248A (ko) 산술 및/또는 비트 유닛에 의한 조건문의 실행
CN116957013A (zh) 浮点型卷积算子加速方法、装置、电子设备及存储介质
CN115658004A (zh) 用于执行浮点型数据运算的方法和装置
CN117648959A (zh) 支持神经网络运算的多精度操作数运算装置
CN116974517A (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