CN113377334B - 一种浮点数据处理方法、装置及存储介质 - Google Patents

一种浮点数据处理方法、装置及存储介质 Download PDF

Info

Publication number
CN113377334B
CN113377334B CN202110938937.3A CN202110938937A CN113377334B CN 113377334 B CN113377334 B CN 113377334B CN 202110938937 A CN202110938937 A CN 202110938937A CN 113377334 B CN113377334 B CN 113377334B
Authority
CN
China
Prior art keywords
floating point
floating
code
format
bit
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
Application number
CN202110938937.3A
Other languages
English (en)
Other versions
CN113377334A (zh
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.)
Beijing Micro Core Technology Co ltd
Original Assignee
Beijing Micro Core Technology 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 Beijing Micro Core Technology Co ltd filed Critical Beijing Micro Core Technology Co ltd
Priority to CN202110938937.3A priority Critical patent/CN113377334B/zh
Publication of CN113377334A publication Critical patent/CN113377334A/zh
Application granted granted Critical
Publication of CN113377334B publication Critical patent/CN113377334B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations

Abstract

本申请提出一种浮点数据处理方法及装置,方法包括:当浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件时,对所述浮点数据进行拆分处理以将所述浮点数据的格式由浮点原始格式转换为浮点内部格式;其中,浮点内部格式下浮点数据所指示的数值与浮点原始格式下浮点数据所指示的数值相等;利用浮点运算部件对浮点寄存器堆部件中格式为浮点内部格式的浮点数据进行浮点运算以得到运算结果,所述运算结果的格式为浮点内部格式,以及,所述浮点运算部件在对浮点数据进行运算时,所述浮点数据的格式均为浮点内部格式。本申请提供的方法效率较高、成本较低、复杂度较低、且可兼容多种浮点格式、处理效率也较高。

Description

一种浮点数据处理方法、装置及存储介质
技术领域
本申请涉及计算机处理器领域,尤其涉及一种浮点数据处理方法及装置。
背景技术
随着人工智能、物联网、区块链、数字信号处理等技术的发展,对处理器的计算能力的要求越来越高,在从移动设备、笔记本电脑、台式机到服务器的所有计算机系统中,浮点数的计算都是一个非常重要的组成部分。高性能处理器中通常会设置浮点运算部件以对浮点数进行浮点运算。其中,浮点数主要由符号位S、阶码Exp、以及尾数Mantissa三个部分组成,符号位用于表示浮点数的正负,阶码用于表示小数点在该数中的位置,它是一个带符号的整数,尾数用于表示数的有效数值。以及,浮点数据包括多种格式,例如包括IEEE 754标准数据格式、BF16数据格式(16位脑浮点,brain floating point)等。
其中,由于不同格式之间的浮点数据很难统一计算,因此现有的处理器通常在硬件上一般只支持一种特定的浮点数据格式。则当利用现有处理器处理不同格式的浮点数据时,处理效率较低,复杂度较高、耗时长。
发明内容
本申请提供一种浮点数据处理方法及浮点数据处理装置,以至少解决相关技术中的浮点数据处理效率低、耗时长、复杂度高的技术问题。
本申请第一方面实施例提出一种浮点数据处理方法,包括:
当浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件时,对所述浮点数据进行拆分处理以将所述浮点数据的格式由浮点原始格式转换为浮点内部格式;其中,浮点内部格式下浮点数据所指示的数值与浮点原始格式下浮点数据所指示的数值相等;
利用浮点运算部件对浮点寄存器堆部件中格式为浮点内部格式的浮点数据进行浮点运算以得到运算结果,所述运算结果的格式为浮点内部格式,以及,所述浮点运算部件在对浮点数据进行运算时,所述浮点数据的格式均为浮点内部格式;
其中,当所述浮点原始格式为规格化数时,所述拆分处理包括:从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,并对所述阶码增加一位数,且增加一位后的阶码与增加一位前的阶码所指示的数值相等,以及将所述阶码转换为原码。
本申请第二方面实施例提出一种浮点数据处理装置,包括:
拆分模块,用于当将浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件时,对所述浮点数据进行拆分处理以将所述浮点数据的格式由浮点原始格式转换为浮点内部格式;其中,浮点内部格式下浮点数据所指示的数值与浮点原始格式下浮点数据所指示的数值相等;
浮点寄存器堆部件,与所述拆分模块连接,用于存储浮点内部格式的浮点数据;
浮点运算部件,与所述浮点寄存器堆部件连接,用于对浮点寄存器堆部件中存储的浮点数据进行浮点运算以得到运算结果,并将运算结果输入至浮点寄存器堆部件中存储,其中,所述运算结果的格式为浮点内部格式,所述浮点运算部件在对浮点数据进行运算时,所述浮点数据的格式均为浮点内部格式;以及,当运算结果由浮点运算部件传输至浮点寄存器堆部件存储时,所述运算结果的格式不进行转换;
其中,所述拆分模块用于:当所述浮点原始格式为规格化数时,从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,并对所述阶码增加一位数,且增加一位后的阶码与增加一位前的阶码所指示的数值相等,以及将所述阶码转换为原码;
以及,所述浮点寄存器堆部件还用于:利用不同域分别存储经所述拆分模块拆分得到的浮点数符号位、浮点数阶码原码、浮点数尾数原码。
本申请的实施例提供的技术方案至少带来以下有益效果:
第一、本申请提供的兼容多种浮点数据格式的处理方法中,在将浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件之前,会将浮点数据拆分成浮点数符号位、浮点数阶码原码和浮点数尾数原码分别存储,以及在将浮点寄存器堆部件中的浮点数据输出至除浮点运算部件和浮点寄存器堆部件之外的部件时,将浮点数据的浮点数符号位、浮点数阶码原码、浮点数尾数原码进行合并,转换成目标浮点数据要求的格式。由此,使得浮点寄存器堆部件中的浮点数据以及浮点运算部件中的浮点数据的格式一直为浮点数符号位、浮点数阶码原码、浮点数尾数原码分开存储的格式,从而实现对于不同浮点数据格式在浮点运算部件中都可以统一处理,不需要在浮点运算部件中额外进行格式转换,从而可以提高浮点运算的效率。
第二、本申请中在将浮点原始格式的数据拆分为浮点数符号位、浮点数阶码原码、浮点数尾数原码以转换为浮点内部格式的数据,以及在将浮点内部格式的数据由浮点数符号位、浮点数阶码原码、浮点数尾数原码分开的格式合并为浮点原始格式的数据时,均不需要阻塞流水线,从而可以减少执行时间,且可以实现全流水处理,降低了控制复杂度,提高了浮点运算的效率。
第三、本申请中仅需在进出浮点寄存器堆部件的时候进行浮点数的格式拆分处理或合并处理,以及对于存在规格化数与非规格化数的浮点格式,仅需在进出浮点寄存器堆部件进行拆分处理或合并处理的同时进行规格化或非规格化,而由于浮点寄存器堆部件内部和浮点运算部件内部的浮点数据的格式一直为浮点数符号位、浮点数阶码原码和浮点数尾数原码分开,无需进行格式转换以及进行浮点数的符号位、阶码、尾数的拆分和合并,从而无需在各个浮点运算部件的出入端设置格式转换模块,而仅需在浮点寄存器堆的出入端设置拆分和合并模块即可,则提高了性能、减小了功耗和硬件面积,降低了实现资源和成本。
第四、本申请中支持浮点数据用不同的浮点格式(即浮点原始格式和浮点内部格式)存储,而且浮点原始格式也可以支持多种浮点格式,并且支持浮点运算部件运算前做拆分的浮点原始格式,与运算后合并成的浮点原始格式不是同一种浮点格式,从而在处理器中灵活实现对多种浮点数据格式的支持和处理。
第五、本申请提供的兼容多种浮点数据格式的处理方法中,对于存在规格化数和非规格化数的浮点格式,在将浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件之前进行拆分,浮点数据的符号位和尾数位的位数都不变,会将浮点数据的阶码增加一位,其中浮点符号位不变,浮点阶码和尾数变为原码,以及在将浮点寄存器堆部件中的浮点数据输出至除浮点运算部件和浮点寄存器堆部件之外的部件时进行合并,合并后的浮点数据的符号位和尾数位的位数都不变,会将浮点数据的阶码去除一位,其中浮点符号位不变,浮点阶码和尾数从原码变为需要的浮点数据格式的阶码和尾数要求的格式,从而合并成需要格式的浮点数据。由于在拆分时浮点数据的阶码增加了一位,从而其所能指示的值的范围较大,则即使浮点运算部件基于浮点寄存器堆部件中的浮点数据符号位、阶码原码和尾数原码运算所得的运算结果数值较小,同样可以利用符号位、阶码原码和尾数原码分离的格式来表示该运算结果,无需再转换该运算结果的格式,从而可以提高浮点运算的效率。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为根据本申请一个实施例提供的浮点数据处理方法的流程示意图;
图2为根据本申请一个实施例提供的一种浮点数据处理装置的结构示意图;
图3为根据本申请一个实施例提供的另一种浮点数据处理装置的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
本申请的兼容多种浮点数据格式的处理方法中,当浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件时,会对所述浮点数据进行拆分处理,以将所述浮点数据的格式拆分为浮点数符号位、浮点数阶码原码和浮点数尾数原码,以实现后续多种格式浮点数据统一处理;
在浮点数的拆分处理中,对于IEEE754和BF16等具有规格化数和非规格化数的浮点格式,从浮点运算部件和浮点寄存器堆部件外的部件输入至浮点寄存器堆部件进行拆分处理时,对浮点数进行规格化,浮点数的阶码和浮点数的尾数为规格化后的阶码原码和尾数原码;
之后,会利用浮点运算部件对浮点寄存器堆部件中已拆分为浮点数符号位、浮点数阶码原码和浮点数尾数原码的数据进行浮点运算以得到运算结果,所述运算结果的格式为浮点数符号位、浮点数阶码原码和浮点数尾数原码分离,以及,所述浮点运算部件在对浮点数据进行运算时,所述浮点数据的格式均为浮点数符号位、浮点数阶码原码和浮点数尾数原码分离。
由此,本申请的实施例中,当在浮点运算部件中对浮点数据进行浮点运算时,浮点数据总为浮点数符号位、浮点数阶码原码和浮点数尾数原码分离,则无需转换格式和拆分、合并,也无需进行规格化处理,因此可以提高浮点运算的效率。并且,也无需在各个浮点运算部件的输入输出端口设置格式转换和拆分、合并模块,则提高了性能、减小了功耗、节省了面积、降低了实现资源和成本。
下面参考附图具体描述本申请实施例的兼容多种浮点数据格式的处理方法及装置。
实施例一
图1为根据本申请一个实施例提供的兼容多种浮点数据格式的处理方法的流程示意图,如图1所示,所述方法可以包括:
步骤100、向浮点寄存器堆部件输入浮点数据。
其中,所述浮点数据可以是从存储器部件或者定点寄存器堆部件或者向量寄存器堆部件等除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件的。
所述浮点数据可以为IEEE 754标准数据格式、BF16数据格式(16位脑浮点,brainfloating point)等多种数据格式。
可选的,所述浮点数据格式为IEEE754标准数据格式,浮点数据具体可以由符号位S、阶码Exp、以及尾数Mantissa三个部分组成,符号位用于表示浮点数的正负,阶码用于表示小数点在该数中的位置,它是一个带符号的整数,尾数用于表示数的有效数值。以及,在IEEE754标准中,符号位用于表示浮点数的正负,当符号位S为1时表示负数,为0时表示正数;阶码采用移码的形式表示,尾数采用原码表示。
以及,IEEE754标准浮点数包括规格化数和非规格化数。非规格化数的阶码为全0且尾数不为0;其余情况表示规格化数。其中,对于规格化数而言其对应的十进制数值Value1可表示为:Value1=(-1)s×1.Mantissa×2Exp-Bias;对于非规格化数其对应的十进制数值Value2可表示为:Value2=(-1)s×0.Mantissa×2Exp-Bias+1;Bias主要指示阶码偏移。
可选的,所述浮点格式为BF16数据格式包括1位符号位,然后8位指数位,接着是7位尾数位(共16位数)。其中,表a为本公开实施例提供的BF16数据格式的浮点数的数据表示形式的示意表。
Figure 259317DEST_PATH_IMAGE001
以及,BF16数据格式同样也包括规格化数和非规格化数。非规格化数的阶码为全0且尾数不为0;其余情况表示规格化数。BF16浮点格式的十进制数值的计算方法跟IEEE 754标准数据格式相同,BF16数据格式通过降低精度来增大数的表示范围。
进一步地,所述IEEE754格式浮点数据还可以包括半精度类型、单精度类型和双精度类型。其中,对于单精度类型的浮点数据而言,共32位,分别包括:1位符号位,8位阶码,23位尾数,Bias为127;对于双精度类型的浮点数据而言,共64位,分别包括:1位符号位,11位阶码,52位尾数,Bias为1023;对于半精度类型的浮点数据而言,共16位,分别包括:1位符号位,5位指数位,10位尾数位,Bias为15。以及,表b为本公开实施例提供的一种16位半精度浮点数的示意表。
Figure 689162DEST_PATH_IMAGE002
进一步地,表1为IEEE754数据格式的双精度浮点数据、单精度浮点数据和半精度浮点数据以及BF16格式的浮点数据的位宽示意表。
Figure 868470DEST_PATH_IMAGE003
如表1所示,IEEE754浮点数据格式,双精度类型的阶码位宽为11位、尾数位宽为52位、阶码偏移为1023。单精度类型的阶码位宽为8位、尾数位宽为23位、阶码偏移为127。半精度类型的浮点原始格式的浮点数据的阶码位宽为5位、尾数位宽为10位、阶码偏移为15。BF16浮点数据格式,阶码位宽为8位、尾数位宽为7位、阶码偏移为127。
进一步地,所述浮点寄存器堆部件可以连接至少一个浮点运算部件,所述浮点运算部件可以为浮点乘加部件,浮点比较部件、浮点除法部件或开平方部件等。在将浮点数据输入至所述浮点寄存器堆部件后,所述浮点运算部件可以对所述浮点寄存器堆部件中的浮点数据进行浮点运算以得到运算结果,并将运算结果返回至浮点寄存器堆部件中存储。
步骤200、当浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件时,对所述浮点数据进行拆分处理以将所述浮点数据的格式由浮点原始格式转换为浮点内部格式。
其中,当所述浮点数据的浮点原始格式满足IEEE 754标准或BF16标准且所述浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至所述浮点寄存器堆部件时,所述拆分处理包括:将所述浮点数据拆分为浮点数符号位、浮点数阶码、和浮点数尾数并存储。其中,拆分过程中,浮点数据的符号位位数不变,符号位为1位,用0表示正数、1表示负数;阶码的位数增加一位,且增加一位后的阶码所指示的数值不变,同时将阶码转换为原码格式;尾数的位数不变,同时将尾数转换为原码格式。
以及,需要说明的是,当所述浮点格式不同时,所述拆分处理也不相同。其中,以所述浮点数据为IEEE754规格化数、非规格化数,BF16规格化数、BF16非规格化数为例对所述拆分进行介绍。
其中,当所述浮点数据的浮点原始格式为规格化数(例如IEEE754规格化数或BF16规格化数)时,所述拆分处理可以包括:从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,并对所述阶码增加一位数,且增加一位后的阶码与增加一位前的阶码所指示的数值相等,以及将所述阶码转换为原码。
其中,执行拆分处理的过程中,在从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数后,可以先对拆分得到的阶码的增加一位数,再将增加一位后的阶码转换为原码;或者,也可以先将拆分得到的阶码转换为原码,再在原码格式下的阶码的最高位之前增加一位数,以将阶码原码转换为增加一位后的阶码原码,且增加一位前的阶码原码与增加一位后的阶码原码表示的数值相等。
其中,若是采用了“先对拆分得到的阶码增加一位数,再将增加一位后的阶码转换为原码”的拆分处理,应确保增加一位后的阶码对应的原码所指示的数值与增加一位前的阶码对应的原码所指示的数值相等。
示例的,针对浮点数据为IEEE754双精度浮点数据而言,假设规格化双精度浮点数据如表2所示。
Figure 143594DEST_PATH_IMAGE004
如表2所示,该规格化双精度浮点数据的符号位为1,阶码为100 0001 0000,尾数为0001 0000 1110 0000 1010 0101 0000 0011 0110 0000 0000 0000 0000。则对该规格化双精度浮点数据所执行的拆分处理应当为:符号位1不变。阶码增加一位,由移码转换为原码,为0000 0001 0000。尾数原码不变,为0001 0000 1110 0000 1010 0101 0000 00110110 0000 0000 0000 0000。其中,对表2所示的规格化双精度浮点数据执行拆分处理之后所得到的浮点符号位、浮点阶码原码、浮点尾数原码分离如表3所示。
Figure 770753DEST_PATH_IMAGE005
以及,针对浮点数据格式为IEEE754规格化单精度浮点数据而言,假设规格化单精度浮点数据如表4所示。
Figure 105919DEST_PATH_IMAGE006
如表4所示,该规格化单精度浮点数据的符号位为0、阶码为100 0001 0、尾数为011 0110 0000 0000 0000 0000。则对该规格化单精度浮点数据所执行的拆分应当为:符号位0不变。阶码增加一位,并由移码转换为原码,为0000 0001 0。尾数原码不变,为0110110 0000 0000 0000 0000。其中,对表4所示的规格化单精度浮点数据执行拆分操作之后所得到的浮点符号位、浮点阶码原码、浮点尾数原码分离如表5所示。
Figure 975787DEST_PATH_IMAGE007
以及,针对浮点数据为IEEE754半精度浮点数据而言,假设规格化半精度浮点数据如表6所示。
Figure 54601DEST_PATH_IMAGE008
如表6所示,该规格化半精度浮点数据的符号位为1,阶码为000 01,尾数为001011 0101。则对该规格化双精度浮点数据所执行的拆分应当为:符号位1不变。阶码增加一位,由移码转换为原码,为1111 11。尾数原码不变,为00 1011 0101。其中,对表6所示的规格化半精度浮点数据执行拆分操作之后所得到的浮点符号位、浮点阶码原码、浮点尾数原码分离如表7所示。
Figure 552578DEST_PATH_IMAGE009
以及,针对浮点数据为BF16浮点数据而言,假设BF16规格化浮点数据如表8所示。
Figure 307914DEST_PATH_IMAGE010
如表8所示,该规格化半精度浮点数据的符号位为1,阶码为000 1000 1,尾数为001 0111。则对该BF16规格化浮点数据所执行的拆分应当为:符号位1不变。阶码增加一位,由移码转换为原码,为0111 0111 1。尾数原码不变,为001 0111。其中,对表8所示的规格化半精度浮点数据执行拆分操作之后所得到的浮点符号位、浮点阶码原码、浮点尾数原码分离如表9所示。
Figure 258552DEST_PATH_IMAGE011
进一步地,当由除浮点运算部件和浮点寄存器堆部件之外的部件输入至所述浮点寄存器堆部件的浮点数据的浮点原始格式为非规格化数(例如IEEE754非规格化数据格式或BF16非规格化数据格式)时,所述拆分处理可以包括:对所述浮点原始格式的浮点数据进行规格化处理,从规格化处理后的浮点数据中拆分出符号位、阶码、和尾数,并将所述阶码转换为原码。
其中,规格化处理具体可以包括:将所述浮点原始格式的尾数用0进行第一预设位数的左移位,并将差值所对应的二进制数作为所述浮点内部格式下浮点数据的阶码,且所述浮点内部格式下浮点数据的阶码的位宽为浮点原始格式的浮点数据的阶码位宽加一;
其中,所述差值由设定值与第一预设位数相减得出;所述第一预设位数为所述浮点原始格式的尾数从首位数的第一个1之前的零的个数加一;其中,所述设定值和所述第一预设位数均为十进制数,所述设定值的取值规则包括:当所述浮点数据为单精度时,所述设定值等于129;当所述浮点数据为双精度时,所述设定值等于1025;当所述浮点数据为半精度时,所述设定值等于17。
示例的,针对浮点数据为IEEE754非规格化双精度浮点数据而言,假设所述IEEE754非规格化双精度浮点数据如表10所示。
Figure 282003DEST_PATH_IMAGE012
如表10所示,该非规格化双精度浮点数据的符号位为0,阶码的位数为11位,阶码为000 0000 0000、尾数为0001 0100 1100 0010 1111 0000 0100 0000 0000 0000 00000000 1010。以及,对该非规格化双精度浮点数据所执行的拆分处理,首先对该浮点非规格化数进行规格化:符号位保持不变,为0;将该数进行规格化处理,即将尾数0001 0100 11000010 1111 0000 0100 0000 0000 0000 0000 0000 1010用0进行左移位,左移位数为所述尾数0001 0100 1100 0010 1111 0000 0100 0000 0000 0000 0000 0000 1010从首位数的第一个1前的零的个数加一,也即是,所述左移位数为4,则将尾数0001 0100 1100 00101111 0000 0100 0000 0000 0000 0000 0000 1010用0左移位4位后得到规格化后新的尾数0100 1100 0010 1111 0000 0100 0000 0000 0000 0000 0000 1010 0000。
以及,将阶码最大值加2(即设定值1025)与所述第一预设位数4的差值(即1021)所对应的二进制数作为规格化后新的阶码,且所述新的阶码的位宽为浮点数据的阶码位宽加一,即新的阶码的位宽为12位,从而所述规格化后新的阶码为0011 1111 1101。
之后,基于新的阶码和新的尾数,符号位保持不变确定出表10所示的浮点数据对应的规格化后的浮点数据。其中,对表10所示的IEEE754非规格化双精度浮点数据执行完规格化之后所得到的规格化浮点数据如表11所示。
Figure 634487DEST_PATH_IMAGE013
再对表11所示的规格化后的双精度浮点数据执行拆分处理,符号位0和尾数01001100 0010 1111 0000 0100 0000 0000 0000 0000 0000 1010 0000保持不变,阶码从移码转换为原码,为1100 0000 0011,所得到的浮点符号位、浮点阶码原码、浮点尾数原码分离如表12所示。
Figure 763986DEST_PATH_IMAGE014
以及,针对浮点格式为IEEE754非规格化单精度浮点数据而言,假设所述IEEE754非规格化单精度浮点数据如表13所示。
Figure 201920DEST_PATH_IMAGE015
如表13所示,该IEEE754非规格化单精度浮点数据的符号位为1,阶码位数为8位、阶码为000 0000 0、尾数为100 0000 0000 1000 0000 0000。则对该非规格化数单精度浮点数据所执行的拆分处理,首先对该浮点非规格化数进行规格化:将尾数100 0000 00001000 0000 0000用0进行左移位,所述左移位的位数为所述尾数100 0000 0000 1000 00000000从首位数的第一个1前的零的个数加一,也即是,所述左移位的位数为1;则将尾数1000000 0000 1000 0000 0000用0左移位1位后得到新的尾数000 0000 0001 0000 00000000。
以及,将最大阶码值加2(即设定值129)与所述左移位数1的差值(即128)所对应的二进制数作为新的阶码,且所述新的阶码的位宽为浮点数据的阶码位宽加一,则所述新的阶码的位宽为9位,从而所述新的阶码为0 1000 0000。
之后,基于新的阶码和新的尾数确定出表13所示的浮点数据对应的浮点格式下的规格化浮点数据。其中,对表13所示的非规格化单精度浮点数据执行完规格化处理之后所得到的规格化浮点数据可以如表14所示。
Figure 356958DEST_PATH_IMAGE016
参考表14可知,对表13所示的非规格化单精度浮点数据执行规格化处理之后所得到的浮点内部格式的浮点数据的新的阶码变为9位,且新的阶码为0100 0000 0、新的尾数为000 0000 0001 0000 0000 0000,符号位保持不变。
再对表14所示的规格化后的单精度浮点数据执行拆分处理,符号位1和尾数0000000 0001 0000 0000 0000保持不变,阶码从移码转换为原码,为1100 0000 0,所得到的浮点符号位、浮点阶码原码、浮点尾数原码分离如表15所示。
Figure 829528DEST_PATH_IMAGE017
以及,针对浮点格式为IEEE754非规格化半精度浮点数据而言,假设所述IEEE754非规格化单精度浮点数据如表16所示。
Figure 333190DEST_PATH_IMAGE018
如表16所示,该IEEE754非规格化半精度浮点数据的符号位为0,阶码位数为5位、阶码为000 00、尾数为01 0000 0000。则对该非规格化数半精度浮点数据所执行的拆分处理,首先对该浮点非规格化数进行规格化:将尾数01 0000 0001用0进行左移位,所述左移位的位数为所述尾数01 0000 0001从首位数的第一个1前的零的个数加一,也即是,所述左移位的位数为2;则将尾数01 0000 0001用0左移位2位后得到新的尾数00 0000 0100。
以及,将最大阶码值加2(即设定值17)与所述移位位数2的差值(即15)所对应的二进制数作为新的阶码,且所述新的阶码的位宽为浮点数据的阶码位宽加一,则所述新的阶码的位宽为6位,从而所述新的阶码为10 1111。
之后,基于新的阶码和新的尾数确定出表17所示的浮点数据对应的浮点格式下的规格化浮点数据。其中,对表16所示的非规格化半精度浮点数据执行完规格化处理之后所得到的规格化浮点数据可以如表17所示。
Figure 258421DEST_PATH_IMAGE019
参考表17可知,对表16所示的非规格化单精度浮点数据执行规格化处理之后所得到的浮点内部格式的浮点数据的新的阶码变为6位,且新的阶码为10 1111、新的尾数为000000 0100,符号位0保持不变。
再对表17所示的规格化后的单精度浮点数据执行拆分处理,符号位0和尾数010000 0001保持不变,阶码从移码转换为原码,为00 1111,所得到的浮点符号位、浮点阶码原码、浮点尾数原码分离如表18所示。
Figure 482729DEST_PATH_IMAGE020
以及,针对浮点格式为BF16非规格化浮点数据而言,假设所述BF16非规格化浮点数据如表19所示。
Figure 278647DEST_PATH_IMAGE021
如表19所示,该BF16非规格化浮点数据的符号位为1,阶码位数为8位、阶码为0000000 0、尾数为100 0001。则对该BF16非规格化数所执行的拆分处理,首先对该浮点非规格化数进行规格化:将尾数100 0001用0进行左移位,所述左移位的位数为所述尾数100 0001从首位数的第一个1前的零的个数加一,也即是,所述左移位的位数为1;则将尾数100 0001用0左移位1位后得到新的尾数000 0010。
以及,将阶码的最大值加2(即129)与所述左移位位数1的差值(即设定值128)所对应的二进制数作为新的阶码,且所述新的阶码的位宽为浮点数据的阶码位宽加一,则所述新的阶码的位宽为9位,从而所述新的阶码为0 1000 0000。
之后,基于新的阶码和新的尾数确定出表20所示的BF16浮点数据对应的浮点格式下的规格化浮点数据。其中,对表19所示的BF16非规格化浮点数据执行完规格化处理之后所得到的BF16规格化浮点数据可以如表20所示。
Figure 562997DEST_PATH_IMAGE022
参考表20可知,对表19所示的BF16非规格化浮点数据执行规格化处理之后所得到的浮点内部格式的浮点数据的新的阶码变为9位,且新的阶码为0 1000 0000、新的尾数为000 0010,符号位0保持不变。
再对表20所示的规格化后的BF16浮点数据执行拆分处理,符号位0和尾数0000010保持不变,阶码从移码转换为原码,为1 1000 0000,所得到的浮点符号位、浮点阶码原码、浮点尾数原码分离如表21所示。
Figure 162475DEST_PATH_IMAGE023
则由上可知,本实施例中所述的拆分后的浮点格式实质是比原来浮点数据格式的阶码增加了一位,而符号位和尾数的位数不变。其中,表22为本实施例中的拆分后的IEEE754双精度浮点数据、IEEE754单精度浮点数据、IEEE754半精度浮点数据和BF16数据的符号位、阶码和尾数位宽示意表。
Figure 190474DEST_PATH_IMAGE024
由上可知,本申请中通过将浮点数据的阶码位宽增加了一位,从而实现拆分处理后的浮点符号位、阶码和尾数能够表示的浮点数据数值的范围较大。基于此,针对再小的数值浮点数据浮点内部格式均可以成功进行规格化和拆分,从而当浮点运算部件对所述浮点寄存器堆部件中浮点数据进行浮点运算时,也不会出现溢出的现象,则当浮点运算部件对浮点数据进行浮点运算时,无需执行格式转换步骤,提高了浮点运算的效率。
步骤300、利用浮点运算部件对浮点寄存器堆部件中格式为浮点内部格式的浮点数据进行浮点运算以得到运算结果,所述运算结果的格式为浮点内部格式。
其中,在本实施例中,所述浮点运算部件与所述浮点寄存器堆部件连接,用于获取浮点寄存器堆部件中的浮点数据并进行运算以得到运算结果,并将运算结果返回至浮点寄存器堆部件中存储。并且,本实施例中,当浮点寄存器堆部件中的浮点数据输入至所述浮点运算部件时,不对所述浮点数据进行格式转换和拆分、合并,而是直接将格式为浮点符号位、浮点阶码原码和浮点尾数原码的浮点数据从浮点寄存堆部件中输入至所述浮点运算部件中。以及,当所述浮点运算部件在对浮点数据进行运算时,所述浮点数据的格式一直为浮点数符号位、浮点数阶码原码、浮点数尾数原码。
以及,需要说明的是,在本实施例中,对浮点内部格式对应的拆分所得的浮点符号位、浮点阶码原码和浮点尾数原码进行运算获得运算结果时,具体可以基于规格化数的运算方式来对浮点内部格式下的浮点数据进行运算。
步骤400、浮点运算部件将运算结果传输至浮点寄存器堆部件中。
其中,当浮点运算部件将运算结果传输至浮点寄存器堆部件中时,不对所述运算结果进行格式转换和拆分、合并,而是直接将浮点数符号位、浮点数阶码原码、浮点数尾数原码表示的运算结果从所述浮点运算部件中输入至浮点寄存器堆部件中。
步骤500、浮点寄存器堆部件输出所述运算结果,当浮点寄存器堆部件将运算结果输出至除浮点运算部件和浮点寄存器堆部件之外的部件,对浮点内部格式的运算结果进行合并处理以将运算结果的格式转换为浮点原始格式。
其中,所述合并处理可以包括:将所述浮点内部格式的阶码去除一位,并将所述符号位、去除一位后的阶码、和尾数进行合并。
具体而言,合并处理包括:
判断浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比运算结果的阶码位数少一位的阶码所对应的范围内;
当落入上述的范围时,先将运算结果的阶码去除一位,且去除一位后的阶码所指示的数值与去除一位前的阶码所指示的数值相等,再将去除一位后的阶码转换为移码,之后,将浮点内部格式的运算结果的符号位、转换为移码之后的阶码、以及浮点内部格式的运算结果的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据;或者,先将阶码转换为移码,再将转化为移码之后的阶码去除一位,且去除一位后的阶码对应的原码所指示的数值与去除一位前的阶码对应的原码所指示的数值相等,之后,将浮点内部格式的运算结果的符号位、去除一位后的阶码、以及浮点内部格式的运算结果的尾数进行合并,将合并后的数据作为运算结果对应的浮点原始格式的浮点数据。
以及,当不落入上述的范围时,将阶码变为全0并去除一位数以得到新的阶码,并对浮点内部格式的运算结果的尾数进行右移位转换,得到新的尾数;将浮点内部格式的运算结果的符号位、新的阶码、以及新的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
其中,在本实施例之中,右移位转换可以包括:对所述尾数进行第二预设位数的右移位,其中,在进行右移位时先用一位1进行右移位之后全部用0进行右移位;所述第二预设位数=设定值-执行合并处理前浮点内部格式的运算结果的阶码的移码所对应的十进制数值;所述设定值的取值规则包括:当所述浮点数据为单精度时,所述设定值等于129;当所述浮点数据为双精度时,所述设定值等于1025;当所述浮点数据为半精度时,所述设定值等于17;所述第二预设位数和所述设定值为十进制数。
结合上述内容进行举例,假设所述运算结果为上述的表3所示的浮点符号位、浮点阶码原码和浮点尾数原码,需要合并为IEEE754双精度浮点数。参考表3,其阶码原码为00000001 0001,则可以确定出该运算结果在阶码去掉一位后也不会超出规格化数的表示范围。由此,所述合并处理可以为:将阶码从原码转换为移码,符号位和尾数不变。其中,表3所示的浮点符号位、浮点阶码原码和浮点尾数原码合并后的IEEE双精度浮点格式可以如表2所示。
或者,假设所述运算结果为上述的表5所示的浮点符号位、浮点阶码原码和浮点尾数原码,需要合并为IEEE754单精度浮点数。参考表5,其阶码原码为0000 0001 0,则可以确定出该运算结果在阶码去掉一位后也不会超出规格化数的表示范围。由此,所述合并处理可以为:将阶码从原码转换为移码,符号位和尾数不变。其中,表5所示的浮点符号位、浮点阶码原码和浮点尾数原码合并后的IEEE单精度浮点格式可以如表4所示。
或者,假设所述运算结果为上述的表7所示的浮点符号位、浮点阶码原码和浮点尾数原码,需要合并为IEEE754半精度浮点数。参考表7,其阶码原码为1111 11,则可以确定出该运算结果在阶码去掉一位后也不会超出规格化数的表示范围。由此,所述合并处理可以为:将阶码从原码转换为移码,符号位和尾数不变。其中,表7所示的浮点符号位、浮点阶码原码和浮点尾数原码合并后的IEEE半精度浮点格式可以如表6所示。
或者,假设所述运算结果为上述的表9所示的浮点符号位、浮点阶码原码和浮点尾数原码,需要合并为BF16浮点数。参考表9,其阶码原码为0111 0111 1,则可以确定出该运算结果在阶码去掉一位后也不会超出规格化数的表示范围。由此,所述合并处理可以为:将阶码从原码转换为移码,符号位和尾数不变。其中,表9所示的浮点符号位、浮点阶码原码和浮点尾数原码合并后的BF16浮点格式可以如表8所示。
或者,所述运算结果为上述的表12所示的浮点符号位、浮点阶码原码和浮点尾数原码,需要合并为IEEE754双精度浮点数。参考表12,其阶码原码为1100 0000 0011,则可以确定出该运算结果在阶码去掉一位后超出了IEEE754规格化双精度数阶码的表示范围。合并处理首先进行非规格化,将阶码去掉一位,阶码、尾数从原码转换成需要的浮点格式,对于IEEE754双精度浮点阶码为移码、尾数为原码,具体操作过程如下:
将表12中的阶码原码1100 0000 0011变为全0且去除一位则得到新的阶码0000000 0000,并对表12中的尾数进行右移位,其中,在进行右移位时先用一位1进行右移位之后全部用0进行右移位,以及,鉴于所要求合并后的浮点数据为IEEE754双精度类型,则所述移位位数=阶码的最大值1023+2(即设定值1025)-执行合并处理前的阶码1100 0000 0011的移码0011 1111 1101所对应的十进制数值1021=4。由此,对表12中的尾数0100 11000010 1111 0000 0100 0000 0000 0000 0000 0000 1010 0000采用上述的右移位方法进行了4位右移时得到新的尾数0001 0100 1100 0010 1111 0000 0100 0000 0000 00000000 0000 1010。
则基于新的阶码和新的尾数,以及符号位不变,可以将浮点数符号位、新的阶码和新的尾数合并为表10所示的IEEE双精度浮点非规格化数。
或者,所述运算结果为上述的表15所示的浮点符号位、浮点阶码原码和浮点尾数原码,需要合并为IEEE754单精度浮点数。参考表15,其阶码原码为1100 0000 0,则可以确定出该运算结果在阶码去掉一位后超出了IEEE754规格化单精度数阶码的表示范围。合并处理首先进行非规格化,将阶码去掉一位,阶码、尾数从原码转换成需要的浮点格式,对于IEEE754单精度浮点阶码为移码、尾数为原码,具体操作过程如下:
将表15中的阶码原码1100 0000 0变为全0且去除一位则得到新的阶码00000000,并对表15中的尾数进行右移位,其中,在进行右移位时先用一位1进行右移位之后全部用0进行右移位,以及,所要求合并后的浮点数据为IEEE754单精度类型,则右移位数=阶码的最大值127+2(即设定值129)-执行右移前阶码0100 0000 0所对应的十进制数值128=1。由此,对表15中的尾数000 0000 0001 0000 0000 0000采用上述的右移位方法进行了1位右移时得到新的尾数100 0000 0000 1000 0000 0000,则基于新的阶码和新的尾数,以及符号位不变,可以将所述浮点数符号位、新的阶码和新的尾数合并为表13所示的IEEE单精度浮点非规格化数。
或者,所述运算结果为上述的表18所示的浮点符号位、浮点阶码原码和浮点尾数原码,需要合并为IEEE754半精度浮点数。参考表18,其阶码原码为00 1111,则可以确定出该运算结果在阶码去掉一位后超出了IEEE754规格化半精度数阶码的表示范围。合并处理首先进行非规格化,将阶码去掉一位,阶码、尾数从原码转换成需要的浮点格式,对于IEEE754半精度浮点阶码为移码、尾数为原码,具体操作过程如下:
将表18中的阶码原码00 1111变为全0且去除一位则得到新的阶码0 0000,并对表18中的尾数进行右移位,其中,在进行右移位时先用一位1进行右移位之后全部用0进行右移位,以及,所要求合并后的浮点数据为IEEE754半精度类型,则右移位数=阶码的最大值15+2(即设定值17)-执行右移前阶码10 1111所对应的十进制数值15=2。由此,对表18中的尾数00 0000 0100采用上述的右移位方法进行了2位右移时得到新的尾数01 0000 0001,则基于新的阶码和新的尾数,以及符号位不变,可以将所述浮点数符号位、新的阶码和新的尾数合并为表16所示的IEEE半精度浮点非规格化数。
再或者,所述运算结果为上述的表21所示的浮点符号位、浮点阶码原码和浮点尾数原码,需要合并为BF16半精度浮点数。参考表21,其阶码原码为1 1000 0000,则可以确定出该运算结果在阶码去掉一位后超出了BF16规格化数阶码的表示范围。合并处理首先进行非规格化,将阶码去掉一位,阶码、尾数从原码转换成需要的浮点格式,对于BF16浮点阶码为移码、尾数为原码,具体操作过程如下:
将表21中的阶码原码1 1000 0000变为变为全0且去除一位则得到新的阶码00000000,并对表21中的尾数进行右移位,其中,在进行右移位时先用一位1进行右移位之后全部用0进行右移位,以及,所要求合并后的浮点数据为BF16类型,则右移位数=阶码的最大值127+2-执行右移前阶码0 1000 0000所对应的十进制数值128=1。由此,对表21中的尾数0000010采用上述的右移位方法进行了1位右移时得到新的尾数100 0001,则基于新的阶码和新的尾数,以及符号位不变,可以将表20所述浮点数符号位、新的阶码和新的尾数合并为表19所示的BF16浮点非规格化数。
实施例二
进一步地,基于上述实施例提供的兼容多种浮点数据格式的处理方法,本申请实施例还提供一种兼容多种浮点数据格式的处理装置,图2为根据本申请一个实施例提供的一种兼容多种浮点数据的处理装置的结构示意图,如图2所示,所述装置可以包括:
拆分模块(例如可以为G2I转换部件),用于当将浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件时,对所述浮点数据进行拆分处理以将所述浮点数据的格式由浮点原始格式转换为浮点内部格式;其中,浮点内部格式下浮点数据所指示的数值与浮点原始格式下浮点数据所指示的数值相等;
浮点寄存器堆部件,与所述拆分模块连接,用于存储浮点内部格式的浮点数据;
浮点运算部件,与所述浮点寄存器堆部件连接,用于对浮点寄存器堆部件中存储的浮点数据进行浮点运算以得到运算结果,并将运算结果输入至浮点寄存器堆部件中存储,其中,所述运算结果的格式为浮点内部格式,所述浮点运算部件在对浮点数据进行运算时,所述浮点数据的格式均为浮点内部格式;以及,当运算结果由浮点运算部件传输至浮点寄存器堆部件存储时,所述运算结果的格式不进行转换。
其中,所述拆分模块用于:当所述浮点原始格式为规格化数时,从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,并对所述阶码增加一位数,且增加一位后的阶码与增加一位前的阶码所指示的数值相等,以及将所述阶码转换为原码;
以及,所述浮点寄存器堆部件还用于:利用不同域分别存储经所述拆分模块拆分得到的浮点数符号位、浮点数阶码原码、浮点数尾数原码
可选的,所述浮点数据格式包括IEEE 754标准数据格式和BF16数据格式。
可选的,所述拆分模块还用于:当所述浮点原始格式为规格化数,从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,以及,先对所述阶码增加一位数,且增加一位后的阶码对应的原码所指示的数值与增加一位前的阶码对应的原码所指示的数值相等,之后,再将增加一位后的阶码转换为原码。
可选的,所述拆分模块还用于:当所述浮点原始格式为规格化数时,从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,以及,先将所述阶码转换为原码,再在原码格式下的阶码的最高位之前增加一位数,以将阶码原码转换为增加一位后的阶码原码,且增加一位前的阶码原码与增加一位后的阶码原码表示的数值相等。
可选的,所述拆分模块还用于:当所述浮点原始格式为非规格化数,对所述浮点原始格式的浮点数据进行规格化处理,从规格化处理后的浮点数据中拆分符号位、阶码、和尾数,并将所述阶码转换为原码。
可选的,所述拆分模块还用于:将所述浮点原始格式的尾数用0进行第一预设位数的左移位,并将差值所对应的二进制数作为所述浮点内部格式下浮点数据的阶码,且所述浮点内部格式下浮点数据的阶码的位宽为浮点原始格式的浮点数据的阶码位宽加一;
其中,所述差值由设定值与第一预设位数相减得出;所述第一预设位数为所述浮点原始格式的尾数从首位数的第一个1之前的零的个数加一;其中,所述设定值和所述第一预设位数均为十进制数,所述设定值的取值规则包括:当所述浮点数据为单精度时,所述设定值等于129;当所述浮点数据为双精度时,所述设定值等于1025;当所述浮点数据为半精度时,所述设定值等于17。
可选的,所述装置还包括:
合并模块(例如可以为I2G转换部件),与所述浮点寄存器堆部件连接,用于在浮点寄存器堆部件输出所述运算结果至除所述浮点运算部件和浮点寄存器堆部件之外的部件时,对所述运算结果进行合并处理以将所述浮点内部格式转换为所述浮点原始格式;其中,浮点原始格式下运算结果所指示的数值与浮点内部格式下运算结果所指示的数值相等。
可选的,所述合并模块还用于:
将所述浮点内部格式的阶码去除一位,并将所述符号位、去除一位后的阶码、和尾数进行合并。
可选的,所述合并模块还用于:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当落入所述范围时,先将所述运算结果的阶码去除一位,且去除一位后的阶码所指示的数值与去除一位前的阶码所指示的数值相等,再将所述去除一位后的阶码转换为移码,之后,将浮点内部格式的运算结果的符号位、转换为移码之后的阶码、以及浮点内部格式的运算结果的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
可选的,所述合并模块还用于:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当落入所述范围时,先将所述阶码转换为移码,再将转化为移码之后的阶码去除一位,且去除一位后的阶码对应的原码所指示的数值与去除一位前的阶码对应的原码所指示的数值相等,之后,将浮点内部格式的运算结果的符号位、去除一位后的阶码、以及浮点内部格式的运算结果的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
可选的,所述合并模块还用于:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当不落入所述范围时,将所述阶码变为全0并去除一位数以得到新的阶码,并对所述浮点内部格式的运算结果的尾数进行右移位转换,得到新的尾数;
将浮点内部格式的运算结果的符号位、新的阶码、以及新的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
可选的,所述合并模块还用于:
对所述尾数进行第二预设位数的右移位,其中,在进行右移位时先用一位1进行右移位之后全部用0进行右移位;
所述第二预设位数=设定值-执行合并处理前浮点内部格式的运算结果的阶码的移码所对应的十进制数值;
所述设定值的取值规则包括:当所述浮点数据为单精度时,所述设定值等于129;当所述浮点数据为双精度时,所述设定值等于1025;当所述浮点数据为半精度时,所述设定值等于17;所述第二预设位数和所述设定值为十进制数。
本公开实施例提供的计算机存储介质,存储有可执行程序;所述可执行程序被处理器执行后,能够实现如图1所示的方法。
综上所述,本申请提供的兼容多种浮点数据的处理方法及装置中,在将浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件之前,会将浮点数据拆分成统一的浮点数符号位、阶码原码和尾数原码分别存储,以及在将浮点寄存器堆部件中的浮点数据输出至除浮点运算部件和浮点寄存器堆部件之外的部件时,将浮点数符号位、阶码原码和尾数原码合并成所要求的浮点格式的数据。由此,使得浮点寄存器堆部件中的浮点数据以及浮点运算部件中的浮点数据的格式一直为浮点符号位、浮点阶码原码、浮点尾数原码分离格式。以及,由于拆分后的浮点数据是浮点符号位、浮点阶码原码、浮点尾数原码分离的格式,对于存在规格化数和非规格化数的浮点格式,阶码增加了一位,从而其所能指示的数值的范围较大,则即使浮点运算部件基于浮点寄存器堆部件中的浮点数据运算所得的运算结果较小,同样可以利用所述浮点符号位、浮点阶码原码、浮点尾数原码来表示该运算结果,无需再转换该运算结果的格式,从而可以提高浮点运算的效率。
以及,本申请中在进出浮点寄存器堆进行浮点数据的拆分和合并,同时完成规格化和非规格化数的转换,均不需要阻塞流水线,从而可以减少执行时间,且可以实现全流水处理,降低了控制复杂度,提高了浮点运算的效率。
同时,本申请中仅需在进出浮点寄存器堆部件的时候进行浮点数据的拆分和合并,而由于浮点寄存器堆部件内部和浮点运算部件内部的浮点数数据的格式一直为浮点符号位、浮点阶码原码、浮点尾数原码,无需拆分和合并,从而无需在各个浮点运算部件的出入端设置拆分和合并模块,而仅需在浮点寄存器堆部件的出入端设置拆分和合并模块即可,则提高了性能,减小了功耗和硬件面积,降低了实现资源和成本。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、 “示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (23)

1.一种浮点数据处理方法,其特征在于,包括:
当浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件时,对所述浮点数据进行拆分处理以将所述浮点数据的格式由浮点原始格式转换为浮点内部格式;其中,浮点内部格式下浮点数据所指示的数值与浮点原始格式下浮点数据所指示的数值相等;
利用浮点运算部件对浮点寄存器堆部件中格式为浮点内部格式的浮点数据进行浮点运算以得到运算结果,所述运算结果的格式为浮点内部格式,以及,所述浮点运算部件在对浮点数据进行运算时,所述浮点数据的格式均为浮点内部格式;
其中,当所述浮点原始格式为规格化数时,所述拆分处理包括:从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,并对所述阶码增加一位数,且增加一位后的阶码与增加一位前的阶码所指示的数值相等,以及将所述阶码转换为原码;
当所述浮点原始格式为非规格化数,所述拆分处理包括:对所述浮点原始格式的浮点数据进行规格化处理,从规格化处理后的浮点数据中拆分出符号位、阶码、和尾数,并将所述阶码转换为原码。
2.根据权利要求1所述的浮点数据处理方法,所述浮点原始格式满足IEEE 754标准数据格式和BF16数据格式。
3.根据权利要求2所述的浮点数据处理方法,其特征在于,当所述浮点原始格式为规格化数,所述拆分处理包括:从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,以及,先对所述阶码增加一位数,且增加一位后的阶码对应的原码所指示的数值与增加一位前的阶码对应的原码所指示的数值相等,之后,再将增加一位后的阶码转换为原码。
4.根据权利要求2所述的浮点数据处理方法,其特征在于,当所述浮点原始格式为规格化数时,所述拆分处理包括:从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,以及,先将所述阶码转换为原码,再在原码格式下的阶码的最高位之前增加一位数,以将阶码原码转换为增加一位后的阶码原码,且增加一位前的阶码原码与增加一位后的阶码原码表示的数值相等。
5.根据权利要求1所述的浮点数据处理方法,其特征在于,所述规格化处理包括:将所述浮点原始格式的尾数用0进行第一预设位数的左移位,并将差值所对应的二进制数作为所述浮点内部格式下浮点数据的阶码,且所述浮点内部格式下浮点数据的阶码的位宽为浮点原始格式的浮点数据的阶码位宽加一;
其中,所述差值由设定值与第一预设位数相减得出;所述第一预设位数为所述浮点原始格式的尾数从首位数的第一个1之前的零的个数加一;其中,所述设定值和所述第一预设位数均为十进制数,所述设定值的取值规则包括:当所述浮点数据为单精度时,所述设定值等于129;当所述浮点数据为双精度时,所述设定值等于1025;当所述浮点数据为半精度时,所述设定值等于17。
6.根据权利要求2所述的浮点数据处理方法,其特征在于,所述方法还包括:
浮点运算部件将运算结果传输至所述浮点寄存器堆部件中存储,所述运算结果的格式不进行转换;
浮点寄存器堆部件输出所述运算结果至除所述浮点运算部件和浮点寄存器堆部件之外的部件时,对所述运算结果进行合并处理以将所述浮点内部格式转换为所述浮点原始格式;其中,浮点原始格式下运算结果所指示的数值与浮点内部格式下运算结果所指示的数值相等。
7.根据权利要求6所述的浮点数据处理方法,其特征在于,所述合并处理包括:将所述浮点内部格式的阶码去除一位,并将所述符号位、去除一位后的阶码、和尾数进行合并。
8.根据权利要求7所述的浮点数据处理方法,其特征在于,所述合并处理包括:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当落入所述范围时,先将所述运算结果的阶码去除一位,且去除一位后的阶码所指示的数值与去除一位前的阶码所指示的数值相等,再将所述去除一位后的阶码转换为移码,之后,将浮点内部格式的运算结果的符号位、转换为移码之后的阶码、以及浮点内部格式的运算结果的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
9.根据权利要求7所述的浮点数据处理方法,其特征在于,所述合并处理包括:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当落入所述范围时,先将所述阶码转换为移码,再将转化为移码之后的阶码去除一位,且去除一位后的阶码对应的原码所指示的数值与去除一位前的阶码对应的原码所指示的数值相等,之后,将浮点内部格式的运算结果的符号位、去除一位后的阶码、以及浮点内部格式的运算结果的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
10.根据权利要求8所述的浮点数据处理方法,其特征在于,所述合并处理还包括:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当不落入所述范围时,将所述阶码变为全0并去除一位数以得到新的阶码,并对所述浮点内部格式的运算结果的尾数进行右移位转换,得到新的尾数;
将浮点内部格式的运算结果的符号位、新的阶码、以及新的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
11.根据权利要求10所述的浮点数据处理方法,其特征在于,所述右移位转换包括:对所述尾数进行第二预设位数的右移位,其中,在进行右移位时先用一位1进行右移位之后全部用0进行右移位;
所述第二预设位数=设定值-执行合并处理前浮点内部格式的运算结果的阶码的移码所对应的十进制数值;
所述设定值的取值规则包括:当所述浮点数据为单精度时,所述设定值等于129;当所述浮点数据为双精度时,所述设定值等于1025;当所述浮点数据为半精度时,所述设定值等于17;所述第二预设位数和所述设定值为十进制数。
12.一种浮点数据处理装置,其特征在于,包括:
拆分模块,用于当将浮点数据由除浮点运算部件和浮点寄存器堆部件之外的部件输入至浮点寄存器堆部件时,对所述浮点数据进行拆分处理以将所述浮点数据的格式由浮点原始格式转换为浮点内部格式;其中,浮点内部格式下浮点数据所指示的数值与浮点原始格式下浮点数据所指示的数值相等;
浮点寄存器堆部件,与所述拆分模块连接,用于存储浮点内部格式的浮点数据;
浮点运算部件,与所述浮点寄存器堆部件连接,用于对浮点寄存器堆部件中存储的浮点数据进行浮点运算以得到运算结果,并将运算结果输入至浮点寄存器堆部件中存储,其中,所述运算结果的格式为浮点内部格式,所述浮点运算部件在对浮点数据进行运算时,所述浮点数据的格式均为浮点内部格式;以及,当运算结果由浮点运算部件传输至浮点寄存器堆部件存储时,所述运算结果的格式不进行转换;
其中,所述拆分模块用于:当所述浮点原始格式为规格化数时,从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,并对所述阶码增加一位数,且增加一位后的阶码与增加一位前的阶码所指示的数值相等,以及将所述阶码转换为原码;
以及,所述浮点寄存器堆部件还用于:利用不同域分别存储经所述拆分模块拆分得到的浮点数符号位、浮点数阶码原码、浮点数尾数原码;
所述拆分模块还用于:当所述浮点原始格式为非规格化数,对所述浮点原始格式的浮点数据进行规格化处理,从规格化处理后的浮点数据中拆分符号位、阶码、和尾数,并将所述阶码转换为原码。
13.根据权利要求12所述的浮点数据处理装置,其特征在于,所述浮点原始格式包括IEEE 754标准数据格式和BF16数据格式。
14.根据权利要求13所述的浮点数据处理装置,其特征在于,所述拆分模块还用于:当所述浮点原始格式为规格化数,从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,以及,先对所述阶码增加一位数,且增加一位后的阶码对应的原码所指示的数值与增加一位前的阶码对应的原码所指示的数值相等,之后,再将增加一位后的阶码转换为原码。
15.根据权利要求13所述的浮点数据处理装置,其特征在于,所述拆分模块还用于:当所述浮点原始格式为规格化数时,从所述浮点原始格式的浮点数据中拆分出符号位、阶码、和尾数,以及,先将所述阶码转换为原码,再在原码格式下的阶码的最高位之前增加一位数,以将阶码原码转换为增加一位后的阶码原码,且增加一位前的阶码原码与增加一位后的阶码原码表示的数值相等。
16.根据权利要求12所述的浮点数据处理装置,其特征在于,所述拆分模块还用于:将所述浮点原始格式的尾数用0进行第一预设位数的左移位,并将差值所对应的二进制数作为所述浮点内部格式下浮点数据的阶码,且所述浮点内部格式下浮点数据的阶码的位宽为浮点原始格式的浮点数据的阶码位宽加一;
其中,所述差值由设定值与第一预设位数相减得出;所述第一预设位数为所述浮点原始格式的尾数从首位数的第一个1之前的零的个数加一;其中,所述设定值和所述第一预设位数均为十进制数,所述设定值的取值规则包括:当所述浮点数据为单精度时,所述设定值等于129;当所述浮点数据为双精度时,所述设定值等于1025;当所述浮点数据为半精度时,所述设定值等于17。
17.根据权利要求13所述的浮点数据处理装置,其特征在于,所述装置还包括:
合并模块,与所述浮点寄存器堆部件连接,用于在浮点寄存器堆部件输出所述运算结果至除所述浮点运算部件和浮点寄存器堆部件之外的部件时,对所述运算结果进行合并处理以将所述浮点内部格式转换为所述浮点原始格式;其中,浮点原始格式下运算结果所指示的数值与浮点内部格式下运算结果所指示的数值相等。
18.根据权利要求17所述的浮点数据处理装置,其特征在于,所述合并模块还用于:
将所述浮点内部格式的阶码去除一位,并将所述符号位、去除一位后的阶码、和尾数进行合并。
19.根据权利要求18所述的浮点数据处理装置,其特征在于,所述合并模块还用于:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当落入所述范围时,先将所述运算结果的阶码去除一位,且去除一位后的阶码所指示的数值与去除一位前的阶码所指示的数值相等,再将所述去除一位后的阶码转换为移码,之后,将浮点内部格式的运算结果的符号位、转换为移码之后的阶码、以及浮点内部格式的运算结果的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
20.根据权利要求18所述的浮点数据处理装置,其特征在于,所述合并模块还用于:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当落入所述范围时,先将所述阶码转换为移码,再将转化为移码之后的阶码去除一位,且去除一位后的阶码对应的原码所指示的数值与去除一位前的阶码对应的原码所指示的数值相等,之后,将浮点内部格式的运算结果的符号位、去除一位后的阶码、以及浮点内部格式的运算结果的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
21.根据权利要求18所述的浮点数据处理装置,其特征在于,所述合并模块还用于:
判断所述浮点内部格式下的运算结果的阶码是否落入从浮点原始格式的规格化数转换成浮点内部格式后,且位数比所述运算结果的阶码位数少一位的阶码所对应的范围内;
当不落入所述范围时,将所述阶码变为全0并去除一位数以得到新的阶码,并对所述浮点内部格式的运算结果的尾数进行右移位转换,得到新的尾数;
将浮点内部格式的运算结果的符号位、新的阶码、以及新的尾数进行合并,将合并后的数据作为所述运算结果对应的浮点原始格式的浮点数据。
22.根据权利要求21所述的浮点数据处理装置,其特征在于,所述合并模块还用于:
对所述尾数进行第二预设位数的右移位,其中,在进行右移位时先用一位1进行右移位之后全部用0进行右移位;
所述第二预设位数=设定值-执行合并处理前浮点内部格式的运算结果的阶码的移码所对应的十进制数值;
所述设定值的取值规则包括:当所述浮点数据为单精度时,所述设定值等于129;当所述浮点数据为双精度时,所述设定值等于1025;当所述浮点数据为半精度时,所述设定值等于17;所述第二预设位数和所述设定值为十进制数。
23.一种计算机存储介质,其中,所述计算机存储介质存储有计算机可执行指令;所述计算机可执行指令被处理器执行后,能够实现权利要求1至11任一项所述的方法。
CN202110938937.3A 2021-08-16 2021-08-16 一种浮点数据处理方法、装置及存储介质 Active CN113377334B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110938937.3A CN113377334B (zh) 2021-08-16 2021-08-16 一种浮点数据处理方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110938937.3A CN113377334B (zh) 2021-08-16 2021-08-16 一种浮点数据处理方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN113377334A CN113377334A (zh) 2021-09-10
CN113377334B true CN113377334B (zh) 2021-11-02

Family

ID=77577287

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110938937.3A Active CN113377334B (zh) 2021-08-16 2021-08-16 一种浮点数据处理方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN113377334B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101221490A (zh) * 2007-12-20 2008-07-16 清华大学 一种具有数据前送结构的浮点乘加单元
CN101650642A (zh) * 2009-09-11 2010-02-17 杭州中天微系统有限公司 基于补码舍入的浮点加法装置
CN106406812A (zh) * 2015-10-02 2017-02-15 上海兆芯集成电路有限公司 微处理器和微处理器内的执行融合复合算术运算的方法
CN111290790A (zh) * 2020-01-22 2020-06-16 安徽大学 一种定点转浮点的转换装置
CN111796870A (zh) * 2020-09-08 2020-10-20 腾讯科技(深圳)有限公司 数据格式转换装置、处理器、电子设备及模型运行方法
CN112189184A (zh) * 2019-09-29 2021-01-05 深圳市大疆创新科技有限公司 浮点数处理方法、设备和可移动平台
CN112527239A (zh) * 2021-02-10 2021-03-19 北京微核芯科技有限公司 一种浮点数据处理方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2560766B (en) * 2017-03-24 2019-04-03 Imagination Tech Ltd Floating point to fixed point conversion
CN111340207B (zh) * 2020-03-03 2023-12-15 南京大学 浮点数转换方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101221490A (zh) * 2007-12-20 2008-07-16 清华大学 一种具有数据前送结构的浮点乘加单元
CN101650642A (zh) * 2009-09-11 2010-02-17 杭州中天微系统有限公司 基于补码舍入的浮点加法装置
CN106406812A (zh) * 2015-10-02 2017-02-15 上海兆芯集成电路有限公司 微处理器和微处理器内的执行融合复合算术运算的方法
CN112189184A (zh) * 2019-09-29 2021-01-05 深圳市大疆创新科技有限公司 浮点数处理方法、设备和可移动平台
CN111290790A (zh) * 2020-01-22 2020-06-16 安徽大学 一种定点转浮点的转换装置
CN111796870A (zh) * 2020-09-08 2020-10-20 腾讯科技(深圳)有限公司 数据格式转换装置、处理器、电子设备及模型运行方法
CN112527239A (zh) * 2021-02-10 2021-03-19 北京微核芯科技有限公司 一种浮点数据处理方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于FPGA浮点运算器的研究;戴丹丹;《中国优秀硕士学位论文全文数据库 (信息科技辑)》;20130115;I135-315 *

Also Published As

Publication number Publication date
CN113377334A (zh) 2021-09-10

Similar Documents

Publication Publication Date Title
CN110036368B (zh) 用于执行算术运算以累加浮点数的装置及方法
CN107077416B (zh) 用于以选择性舍入模式进行向量处理的装置和方法
JP7244186B2 (ja) 改良された低精度の2進浮動小数点形式設定
EP4080351A1 (en) Arithmetic logic unit, and floating-point number multiplication calculation method and device
KR20080055985A (ko) 선택가능 준정밀도를 가진 부동―소수점 프로세서
US20120072703A1 (en) Split path multiply accumulate unit
US20170293471A1 (en) Arithmetic units and related converters
JP2006154979A (ja) 浮動小数点数演算回路
US20230092574A1 (en) Single-cycle kulisch accumulator
Hormigo et al. Measuring improvement when using HUB formats to implement floating-point systems under round-to-nearest
CN112527239B (zh) 一种浮点数据处理方法及装置
EP2834731A1 (en) System and method for a floating-point format for digital signal processors
Crespo et al. Unified posit/IEEE-754 vector MAC unit for transprecision computing
GB2549153B (en) Apparatus and method for supporting a conversion instruction
CN113377334B (zh) 一种浮点数据处理方法、装置及存储介质
Shirke et al. Implementation of IEEE 754 compliant single precision floating-point adder unit supporting denormal inputs on Xilinx FPGA
CN115268832A (zh) 浮点数取整的方法、装置以及电子设备
CN112394904B (zh) 一种浮点数据处理方法、运算器及电子设备
Sasidharan et al. VHDL Implementation of IEEE 754 floating point unit
US20200133633A1 (en) Arithmetic processing apparatus and controlling method therefor
CN114077419A (zh) 用于处理浮点数的方法和系统
CN111313906A (zh) 一种浮点数的转换电路
CN111290790A (zh) 一种定点转浮点的转换装置
US20230144030A1 (en) Multi-input multi-output adder and operating method thereof
US20040254973A1 (en) Rounding mode insensitive method and apparatus for integer rounding

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