CN114327360A - 运算单元、浮点数计算的方法、装置、芯片和计算设备 - Google Patents
运算单元、浮点数计算的方法、装置、芯片和计算设备 Download PDFInfo
- Publication number
- CN114327360A CN114327360A CN202011053108.9A CN202011053108A CN114327360A CN 114327360 A CN114327360 A CN 114327360A CN 202011053108 A CN202011053108 A CN 202011053108A CN 114327360 A CN114327360 A CN 114327360A
- Authority
- CN
- China
- Prior art keywords
- point number
- floating
- floating point
- calculated
- mantissa
- 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.)
- Granted
Links
- 238000007667 floating Methods 0.000 title claims abstract description 421
- 238000004364 calculation method Methods 0.000 title claims abstract description 179
- 238000000034 method Methods 0.000 claims description 27
- 230000006870 function Effects 0.000 claims description 5
- 239000013598 vector Substances 0.000 description 178
- 238000007792 addition Methods 0.000 description 144
- 238000010606 normalization Methods 0.000 description 29
- 238000009825 accumulation Methods 0.000 description 18
- 101100380504 Schizosaccharomyces pombe (strain 972 / ATCC 24843) atf1 gene Proteins 0.000 description 12
- 238000010586 diagram Methods 0.000 description 10
- 101100191599 Schizosaccharomyces pombe (strain 972 / ATCC 24843) mts2 gene Proteins 0.000 description 8
- 101100296686 Schizosaccharomyces pombe (strain 972 / ATCC 24843) pcr1 gene Proteins 0.000 description 8
- 101100361293 Schizosaccharomyces pombe (strain 972 / ATCC 24843) rpn12 gene Proteins 0.000 description 8
- -1 mts0 Proteins 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000000354 decomposition reaction Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
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
- G06F7/485—Adding; Subtracting
-
- 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49915—Mantissa overflow or underflow in handling floating-point numbers
-
- 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
- G06F7/487—Multiplying; Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3812—Devices capable of handling different types of numbers
- G06F2207/382—Reconfigurable for different fixed word lengths
-
- 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)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Nonlinear Science (AREA)
- Complex Calculations (AREA)
Abstract
本申请实施例公开了一种运算单元、浮点数计算的方法和装置,属于计算机技术领域。运算单元由拆解电路和运算器组成,拆解电路可以获取计算指令中包括的模式和待计算浮点数,并根据预设规则拆解所述待计算浮点数。然后,运算单元再按照模式和拆解后的待计算浮点数完成计算指令的处理。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种运算单元、浮点数计算的方法、装置、芯片和计算设备。
背景技术
浮点数是计算机中一种重要的数字格式,在计算机中浮点数由符号、阶码和尾数三部分组成。为了满足不同业务对数据精度的不同需求,计算机通常需要支持多种浮点数计算类型。
目前,为了实现对不同的浮点数运算类型,通常会对应设计多个独立的运算单元,每个运算单元可以实现一种浮点数运算类型。
在实现本申请的过程中,发明人发现相关技术至少存在以下问题:
在芯片中独立设计多种分别支持不同浮点数运算类型的运算单元,当系统只使用其中一种运算类型的运算单元执行浮点数运算时,其余的运算单元就会处于闲置状态,十分浪费计算资源。
发明内容
本申请提供了一种运算单元、浮点数计算的方法、装置、芯片和计算设备,以提升芯片的利用率和处理效率。
第一方面,提供了一种运算单元,该运算单元包括拆解电路和运算器;拆解电路,用于获取计算指令中包括的模式和待计算浮点数;根据预设规则拆解所述待计算浮点数,其中,所述模式用于指示对所述待计算浮点数的运算类型;运算单元,用于按照模式和拆解后的待计算浮点数完成所述计算指令的处理。
处理器中的控制单元可以在存储单元或者内存的获取计算指令,并发送给运算单元。运算单元中的拆解电路接收该计算指令并根据待计算浮点数的类型,以及存储该类型的浮点数对应的尾数拆解段数和各尾数段的位宽,将对待计算浮点数的尾数进行拆解,并将拆解后的尾数段、符号和阶码输出至运算器。由运算器根据模式对输入的待计算浮点数的尾数段、符号和阶码进行相应的处理,得到计算结果。即,在本申请所示的方案中,由一个运算单元即可实现不通精度和运算类型的浮点数运算,运算单元的适用性更高。
在一种可能的实现方式中,待计算浮点数为高精度浮点数,拆解电路,用于根据待计算浮点数的尾数将待计算浮点数拆解为多个低精度浮点数。
拆解电路可以将高精度的待计算浮点数拆解为多个低精度浮点数,然后,可以复用低精度浮点数乘法器以及低精度浮点数加法器执行相应处理,而不用单独设计高精度浮点数乘法器或高精度浮点数加法器,可以节约运算器成本。
在一种可能的实现方式中,拆解后的待计算浮点数的阶码位宽大于待计算浮点数的阶码位宽。
所述方案可以对将待计算浮点数拆解为指定类型的浮点数,该指定类型的待计算浮点数可以为非标准类型的浮点数,为了满足阶码的移位条件,只需保证该指定类型的浮点数的阶码位宽大于待计算浮点数的阶码位宽即可。
在一种可能的实现方式中,所述拆解电路,用于将待计算浮点数拆解为符号、阶码和尾数,将待计算浮点数的尾数拆解为多个尾数段。
拆解电路可以对待计算浮点数的尾数进行拆解。为了使浮点数乘法器可以被多种精度浮点数乘法计算复用,本申请实施例中浮点数乘法器可以支持最低精度浮点数乘法,因此,对于最低精度浮点数的尾数可以不用拆解。对于高精度浮点数的尾数在拆解时,可以使拆解的每个尾数段的位宽小于等于浮点数乘法器支持的尾数最大位宽。此外,为了使进行不同类型浮点数的计算时,每个浮点数乘法器中的尾数乘法器资源得到充分利用,可以使最低精度浮点数的尾数位宽、各类型的高精度浮点数的尾数拆解得到的每个尾数段的位宽相近。
在一种可能的实现方式中,运算器包括浮点数乘法器和浮点数加法器,浮点数乘法器用于执行拆解后的待计算浮点数的加法运算,浮点数加法器用于执行拆解后的待计算浮点数的加法运算。
在一种可能的实现方式中,运算器包括多个浮点数乘法器和浮点数加法器;多个浮点数乘法器中的第一浮点数乘法器,用于对输入的拆解后的待计算浮点数的符号进行异或计算,对输入的拆解后的待计算浮点数的阶码进行加法计算,对输入的拆解后的待计算浮点数的尾数段进行乘法计算,向浮点数加法器输出符号异或结果、阶码加和结果和尾数段乘积结果;所述多个浮点数乘法器中的第二浮点数乘法器,用于并行对输入的拆解后的待计算浮点数的尾数段进行乘法计算,向所述浮点数加法器输出尾数段乘积结果;所述浮点数加法器,用于对输入的尾数段乘积结果进行加法计算,得到尾数段加和结果,根据所述模式、所述尾数段加和结果、所述符号异或结果以及所述阶码加和结果,输出对所述待计算浮点数的计算结果。
运算单元可以设置多个浮点数乘法器,多个浮点数乘法器可以并行执行尾数段乘法计算,或者并行执行浮点数乘法计算,可以有效的提高浮点数的计算效率。
在一种可能的实现方式中,运算器包括x2个浮点数乘法器和浮点数加法器,拆解电路,用于将每个待计算浮点数的尾数拆解为x个尾数段,其中,x为大于1的整数。
运算单元可以设置有x2个浮点数乘法器,至少一个浮点数加法器,以及至少一个拆解电路。x为运算单元支持的最高精度浮点数的尾数拆解的尾数段数。由多个乘法器分别并行对拆解后的浮点数进行处理,提升浮点数运算的效率。
在一种可能的实现方式中,拆解电路,用于获取计算指令中包括的模式和待计算浮点数向量,将每个待计算浮点数向量中的待计算浮点数拆解为符号、阶码和尾数,将每个待计算浮点数的尾数拆解为多个尾数段,向所述第一浮点数乘法器输出符号组合、阶码组合以及尾数段组合,其中,每个符号组合包括拆解自一对待计算浮点数的符号,每个阶码组合包括拆解自一对待计算浮点数的阶码,每个尾数段组合包括拆解自一对待计算浮点数的两个尾数段,每对待计算浮点数包括来自不同待计算浮点数向量的两个待计算浮点数。第一浮点数乘法器,用于对输入的符号组合中的符号进行异或计算,对输入的阶码组合中的阶码进行加法计算,对输入的尾数段组合中的尾数段进行乘法计算,向浮点数加法器输出符号异或结果、阶码加和结果和尾数段乘积结果;第二浮点数乘法器,用于并行对输入的尾数段组合中的尾数段进行乘法计算,向浮点数加法器输出尾数段乘积结果;浮点数加法器,用于对输入的来自同一对待计算浮点数的尾数段乘积结果进行加法计算,得到每对待计算浮点数对应的尾数段加和结果,根据模式、每对待计算浮点数对应的尾数段加和结果、符号异或结果以及阶码加和结果,输出向量计算结果。由此运算单元可以实现对浮点数向量的计算。
本申请可以实现对浮点数向量的相关计算,在计算指令中包括待计算浮点数向量时,拆解电路先将向量拆解为浮点数标量,再将每个浮点数标量拆解为符号、阶码和尾数三部分。对于高精度浮点数,还要继续对尾数进行拆解,得到多个尾数段。然后,将符号、阶码和尾数段输出至浮点数乘法器。浮点数乘法器对于输入的两个符号进行异或计算,对于输入的阶码进行加和计算,对于输入的尾数段进行乘法计算。再将得到符号异或结果、阶码加和结果和尾数段乘积结果输出至浮点数加法器,由浮点数加法器对尾数段进行对阶加和,并输出至规格化处理电路,由规格化处理电路进行规格化处理后输出。
在一种可能的实现方式中,模式指示对所述待计算浮点数向量的运算类型为向量逐元素乘运算;所述浮点数加法器,用于将每对待计算浮点数对应的尾数段加和结果、符号异或结果和阶码加和结果,作为一个元素乘积结果输出。
本申请中可以实现向量逐元素乘运算,对于向量逐元素乘运算,浮点数加法器只需对每对待计算浮点数对应的尾数段加和结果、符号异或结果和阶码加和结果输出至规格化处理电路进行输出即可。
在一种可能的实现方式中,模式指示对所述待计算浮点数向量的运算类型为向量内积运算;所述浮点数加法器,用于根据每对待计算浮点数对应的阶码加和结果,对每对待计算浮点数对应的尾数段加和结果进行对阶,对对阶后的各尾数段加和结果进行加法计算,输出向量内积运算结果。
本申请中还可以实现向量内积运算,对于向量内积运算,浮点数加法器,还需要根据每对待计算浮点数对应的阶码加和结果计算阶差,并基于计算出的阶差对每对待计算浮点数对应的尾数段加和结果进行对阶,对对阶后的各尾数段加和结果再进行加法计算。最后,向规格化处理电路输出计算结果,计算结果为完整的浮点数,包括符号、阶码和尾数。由规格化处理电路对计算结果进行规格化处理后,输出即可。
在一种可能的实现方式中,模式指示对所述待计算浮点数向量的运算类型为向量元素累加运算;
所述拆解电路,用于获取计算指令中包括的模式和第一浮点数向量,生成第二浮点数向量,其中,所述第二浮点数向量中的各待计算浮点数的类型与所述第一待计算浮点数向量中的待计算浮点数的类型相同,所述第二浮点数向量中的各待计算浮点数的值均为1,将所述第一浮点数向量和所述第二浮点数向量作为待计算浮点数向量;
所述浮点数加法器,用于根据每对待计算浮点数对应的阶码加和结果,对每对待计算浮点数对应的尾数段加和结果进行对阶,对对阶后的各尾数段加和结果进行加法计算,输出向量元素累加结果。
本申请中还可以实现向量元素累加运算,对于向量元素累加运算,输入的待计算浮点数为一个浮点数向量。拆解电路获取到计算指令后,确定模式指示的计算类型为向量元素累加,则可以先生成与输入的待计算浮点数向量相同的类型的浮点数向量,且生成的浮点数向量中的各元素值均为1。对于输入的待计算浮点数向量和生成的浮点数向量可以共同作为待计算浮点数向量。接下来包括拆解、乘积、加和与向量内积运算相同。
第二方面,提供了一种浮点数计算的方法,该方法包括:获取计算指令中包括的模式和待计算浮点数;根据预设规则拆解所述待计算浮点数,其中,所述模式用于指示对所述待计算浮点数的运算类型;按照所述模式和拆解后的待计算浮点数完成所述计算指令的处理。
处理器中的控制单元可以在存储单元或者内存的获取计算指令,并发送给运算单元。运算单元中的接收该计算指令并根据待计算浮点数的类型,以及存储该类型的浮点数对应的尾数拆解段数和各尾数段的位宽,将对待计算浮点数的尾数进行拆解,并将拆解后的尾数段、符号和阶码进行相应的处理,得到计算结果。即,在本申请所示的方案中,由一个运算单元即可实现不用运算类型的运算。
在一种可能的实现方式中,所述待计算浮点数为高精度浮点数,所述根据预设规则拆解所述待计算浮点数,包括:根据所述待计算浮点数的尾数将所述待计算浮点数拆解为多个低精度浮点数。
运算单元可以将高精度的待计算浮点数拆解为多个低精度浮点数,然后,可以复用低精度浮点数乘法器以及低精度浮点数加法器执行相应处理,而不用单独设计高精度浮点数乘法器或高精度浮点数加法器,可以节约运算器成本。
在一种可能的实现方式中,拆解后的待计算浮点数的阶码位宽大于所述待计算浮点数的阶码位宽。
运算单元可以对将待计算浮点数拆解为指定类型的浮点数,该指定类型的待计算浮点数可以为非标准类型的浮点数,为了满足阶码的移位条件,只需保证该指定类型的浮点数的阶码位宽大于待计算浮点数的阶码位宽即可。
在一种可能的实现方式中,所述根据预设规则拆解所述待计算浮点数,包括:将所述待计算浮点数拆解为符号、阶码和尾数,将所述待计算浮点数的尾数拆解为多个尾数段。
运算单元可以对待计算浮点数的尾数进行拆解。为了使运算单元中的浮点数乘法器可以被多种精度浮点数乘法计算复用,本申请实施例中浮点数乘法器可以支持最低精度浮点数乘法,因此,对于最低精度浮点数的尾数可以不用拆解。对于高精度浮点数的尾数在拆解时,可以使拆解的每个尾数段的位宽小于等于浮点数乘法器支持的尾数最大位宽。此外,为了使进行不同类型浮点数的计算时,每个浮点数乘法器中的尾数乘法器资源得到充分利用,可以使最低精度浮点数的尾数位宽、各类型的高精度浮点数的尾数拆解得到的每个尾数段的位宽相近。
在一种可能的实现方式中,运算单元对拆解后的待计算浮点数的符号进行异或计算,得到符号异或结果,对拆解后的待计算浮点数的阶码进行加法计算,得到阶码加和结果,对拆解后的来自不同待计算浮点数的尾数段进行乘法计算,输出尾数段乘积结果。并对尾数段乘积结果进行加法计算,得到尾数段加和结果,然后,根据模式、尾数段加和结果、符号异或结果以及阶码加和结果,得到对待计算浮点数的计算结果。采用一个运算单元,即可完成不同精度的浮点数在不同模式下的运算。
在一种可能的实现方式中,获取计算指令中包括的模式和待计算浮点数,根据预设规则拆解所述待计算浮点数,包括:获取计算指令中包括的模式和待计算浮点数向量,将每个待计算浮点数向量中的待计算浮点数拆解为符号、阶码和尾数,得到多个符号组合、阶码组合以及尾数段组合,其中,每个符号组合包括拆解自一对待计算浮点数的符号,每个阶码组合包括拆解自一对待计算浮点数的阶码,每个尾数段组合包括拆解自一对待计算浮点数的两个尾数段,每对待计算浮点数包括来自不同待计算浮点数向量的两个待计算浮点数;所述对拆解后的待计算浮点数的符号进行异或计算,得到符号异或结果,对拆解后的待计算浮点数的阶码进行加法计算,得到阶码加和结果,对拆解后的来自不同待计算浮点数的尾数段进行乘法计算,得到尾数段乘积结果,包括:对每个符号组合中的符号进行异或计算,得到所述符号组合对应的符号异或结果,对每个阶码组合中的阶码进行加法计算,得到阶码加和结果,对每个尾数段组合中的尾数段进行乘法计算,得到尾数段乘积结果;所述对所述尾数段乘积结果进行加法计算,得到尾数段加和结果,根据所述模式、所述尾数段加和结果、所述符号异或结果以及所述阶码加和结果,得到对所述待计算浮点数的计算结果,包括:对来自同一对待计算浮点数的尾数段乘积结果,按照每个尾数段乘积结果对应的固定移位值,进行加法计算,得到每对待计算浮点数对应的尾数段加和结果,根据所述模式、每对待计算浮点数对应的尾数段加和结果、符号异或结果以及阶码加和结果,输出向量计算结果。
本申请可以实现对浮点数向量的相关计算,在计算指令中包括待计算浮点数向量时,运算单元先将向量拆解为浮点数标量,再将每个浮点数标量拆解为符号、阶码和尾数三部分。对于高精度浮点数,还要继续对尾数进行拆解,得到多个尾数段。然后,对两浮点数向量中对应位置的两浮点数标量的符号进行异或计算,对阶码进行加和计算,对于尾数段进行乘法计算。再将得到尾数段乘积结果进行对阶加和,并输出至规格化处理电路,由规格化处理电路进行规格化处理后输出。
在一种可能的实现方式中,所述模式指示对所述待计算浮点数向量的运算类型为向量逐元素乘运算;所述根据所述模式、每对待计算浮点数对应的尾数段加和结果、符号异或结果以及阶码加和结果,输出所述多个待计算浮点数向量对应的向量计算结果,包括:将每对待计算浮点数对应的尾数段加和结果、符号异或结果和阶码加和结果,作为一个元素乘积结果输出。
本申请中可以实现向量逐元素乘运算,对于向量逐元素乘运算,运算单元只需对每对待计算浮点数对应的尾数段加和结果、符号异或结果和阶码加和结果输出至规格化处理电路进行输出即可。
在一种可能的实现方式中,所述模式指示对所述待计算浮点数向量的运算类型为向量内积运算;所述根据所述模式、每对待计算浮点数对应的尾数段加和结果、符号异或结果以及阶码加和结果,输出所述多个待计算浮点数向量对应的向量计算结果,包括:根据每对待计算浮点数对应的阶码加和结果,对每对待计算浮点数对应的尾数段加和结果进行对阶,对对阶后的各尾数段加和结果进行加法计算,输出向量内积运算结果。
本申请中还可以实现向量内积运算,对于向量内积运算,运算单元还需要根据每对待计算浮点数对应的阶码加和结果计算阶差,并基于计算出的阶差对每对待计算浮点数对应的尾数段加和结果进行对阶,对对阶后的各尾数段加和结果再进行加法计算。最后,向规格化处理电路输出计算结果,计算结果为完整的浮点数,包括符号、阶码和尾数。由规格化处理电路对计算结果进行规格化处理后,输出即可。
在一种可能的实现方式中,模式指示对所述待计算浮点数向量的运算类型为向量元素累加运算;所述获取计算指令中包括的模式和待计算浮点数,包括:获取计算指令中包括的模式和第一浮点数向量,生成第二浮点数向量,其中,所述第二浮点数向量中的各待计算浮点数的类型与所述第一待计算浮点数向量中的待计算浮点数的类型相同,所述第二浮点数向量中的各待计算浮点数的值均为1,将所述第一浮点数向量和所述第二浮点数向量作为待计算浮点数向量;所述根据所述模式、每对待计算浮点数对应的尾数段加和结果、符号异或结果以及阶码加和结果,输出所述多个待计算浮点数向量对应的向量计算结果,包括:根据每对待计算浮点数对应的阶码加和结果,对每对待计算浮点数对应的尾数段加和结果进行对阶,对对阶后的各尾数段加和结果进行加法计算,输出向量元素累加结果。
本申请中还可以实现向量元素累加运算,对于向量元素累加运算,输入的待计算浮点数为一个浮点数向量。运算单元获取到计算指令后,确定模式指示的计算类型为向量元素累加,则可以先生成与输入的待计算浮点数向量相同的类型的浮点数向量,且生成的浮点数向量中的各元素值均为1。对于输入的待计算浮点数向量和生成的浮点数向量可以共同作为待计算浮点数向量。接下来包括拆解、乘积、加和与向量内积运算相同。第三方面,提供了一种浮点数计算的装置,所述装置包括用于执行第二方面或第二方面任一种可能实现方式中的浮点数计算方法的各个模块。
第三方面,提供了一种芯片,所述芯片包括至少一个如上述第一方面所述的运算单元。
第四方面,提供了一种计算设备,所述计算设备包括主板以及上述第三方面所述的芯片;所述芯片设置在所述主板上。
本申请实施例提供的技术方案带来的有益效果至少包括:
运算单元由拆解电路和运算器组成,拆解电路可以获取计算指令中包括的模式和待计算浮点数,并根据预设规则拆解所述待计算浮点数。然后,运算单元,再按照模式和拆解后的待计算浮点数完成计算指令的处理。在本申请中,计算指令中的模式用于指示对待计算浮点数的运算类型,即本申请中的一个运算单元可以实现多种不同的运算类型。
附图说明
图1是本申请实施例提供的一种浮点数组成示意图;
图2是本申请实施例提供的一种浮点数组成示意图;
图3是本申请实施例提供的一种浮点数组成示意图;
图4是本申请实施例提供的一种芯片的逻辑架构图;
图5是本申请实施例提供的一种运算单元的结构示意图;
图6是本申请实施例提供的一种拆解电路的结构示意图;
图7是本申请实施例提供的一种加法器排布的示意图;
图8是本申请实施例提供的一种浮点数计算的方法流程图;
图9是本申请实施例提供的一种浮点数计算的方法流程图;
图10是本申请实施例提供的一种运算单元的结构示意图;
图11是本申请实施例提供的一种浮点数计算的装置结构示意图;
图12是本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
为了便于理解本申请实施例提供的技术方案,下面先对于几种常用类型的浮点数的组成、以及几种常用类型的浮点数向量计算进行介绍:
1、半精度浮点数:
如图1所示,半精度浮点数FP16在计算机的存储占用16bits,其中,包括符号、阶码和尾数。具体的,符号的位宽为1bit,阶码的位宽为5bits,尾数的位宽为10bits(尾数的小数部分)。其中,尾数除存储的10bits小数部分,还包括隐藏的1bit整数部分,即,尾数总共11bits。
2、单精度浮点数:
如图2所示,单精度浮点数FP32在计算机的存储占用32bits,其中,包括符号、阶码和尾数。具体的,符号的位宽为1bit,阶码的位宽为8bits,尾数的位宽为23bits(尾数的小数部分)。其中,尾数除存储的23bits小数部分,还包括隐藏的1bit整数部分,即,尾数总共24bits。
3、双精度浮点数:
如图3所示,双精度浮点数FP64在计算机的存储占用64bits,其中,包括符号、阶码和尾数。具体的,符号的位宽为1bit,阶码的位宽为11bits,尾数的位宽为52bits(尾数的小数部分)。其中,尾数除存储的52bits小数部分,还包括隐藏的1bit整数部分,即,尾数总共53bits。
4、浮点数的向量逐元素乘(element-wise multiplication):
5、浮点数的向量内积运算:
6、浮点数的元素累加运算:
下面结合图4对本申请的系统架构进行说明:
如图4所示,本申请的系统架构为芯片100的逻辑架构,包括控制单元1、运算单元2和存储单元3(例如,Cache),控制单元1、运算单元2和存储单元3之间通过内部总线两两连接。控制单元1用于向存储单元3和运算单元2发送指令,以对存储单元3和运算单元2进行控制。运算单元2用于接收控制单元1发送的指令,并根据指令执行相应的处理,例如,执行本申请提供的浮点数乘法计算的方法。存储单元3也可以称为缓存,存储单元3中可以存储有数据,例如,可以存储有待计算浮点数。运算单元2可以包括用于执行算术运算的算术运算ALU20,以及用于执行逻辑运算的逻辑运算ALU21。其中,算术逻辑ALU20中可以设置有分别执行加(add)、减(sub)、乘(mul)、除(dev)等基本运算及其附加运算的子单元),还设置有用于执行多模式浮点数运算的浮点数运算子单元22,可以执行本申请提供的浮点数计算的方法。逻辑运算ALU21中可以设置有分别执行移位、逻辑和(and)逻辑或(or)以及两个值的比较等运算的子单元。
芯片100还可以与内存200连接,用于与内存200进行数据交互和指令传输。如图4所示,内存20与控制单元1和存储单元3连接,控制单元1可以从内存中获得内存200存储的指令或数据。例如:控制单元1从内存200读取指令,进一步地发送给运算单元2,由运算单元2执行指令。
需要说明的是,图4所示的芯片10的逻辑架构可以为任意一种芯片的逻辑架构,例如,中央处理器(central processing unit,CPU)芯片、图形处理器(graphics processingunit,GPU)芯片、现场可编程门阵列(field-programmable gate array,FPGA)芯片、专用集成电路(application specific integrated circuits,ASIC)芯片、张量处理单元(tensorprocessing unit,TPU)芯片或其他人工智能(artificial intelligence,AI)芯片等。不同类型的芯片的主要区别在于控制单元1、存储单元3和运算单元2的比例不同。
接下来,结合图5进一步介绍图4中运算单元2。如图5所示,该运算单元2中的浮点数运算子单元22又包括拆解电路221和运算器222。该点数运算子单元22可以通过拆解电路221对浮点数的拆解,以及通过运算器222对拆解后浮点数的计算,可以实现多种模式下的多种精度浮点数的计算。
其中,拆解电路221,用于获取计算指令中包括的模式和待计算浮点数,并根据预设规则拆解待计算浮点数。其中,模式用于指示对待计算浮点数的运算类型,运算类型可以包括向量内积运算、向量逐元素乘运算、向量元素累加运算等。
运算器222,用于按照上述计算指令中的模式和拆解后的待计算浮点数完成计算指令的处理。该运算器222可以包括浮点数乘法器2221和浮点数加法器2222。
在一种可能的实现方式中,上述拆解电路21根据预设规则拆解待计算浮点数的操作可以为:将待计算浮点数的尾数拆解为多个尾数段。拆解完成后,拆解电路221将拆解后的尾数段以及待计算浮点数的符号段的内容、阶码段的内容输出至浮点数乘法器2221。浮点数乘法器2221对待计算浮点数的符号段的内容进行异或计算,对阶码段的内容进行加法计算,并对拆解的尾数段进行乘法运算。然后,浮点数乘法器2221将符号异或结果、阶码加和结果以及尾数段乘积结果输出至浮点数加法器2222,由浮点数加法器完成对尾数段乘积结果的加和,并将计算结果以浮点数的形式输出。
此外,上述浮点数乘法器还可以执行常规的浮点数乘法计算,上述浮点数加法器还可以执行常规的浮点数加法计算。
下面对于拆解电路21、浮点数乘法器2211和浮点数加法器2222做进一步的说明:
拆解电路21,为了提高对待计算浮点数的拆解效率,在同一运算单元2中可以设置两个或多个拆解电路21,为了便于描述,以下以同一运算单元2包括两个拆解电路21为例进行说明。在计算两个待计算浮点数的相关运算时,每个拆解电路21可以分别对一个待计算浮点数进行拆解。
如图5所示,拆解电路21可以包括浮点数拆解子电路211和尾数拆解子电路212,其中,浮点数拆解子电路211用于将输入的待计算浮点数拆解为符号、阶码和尾数,尾数拆解子电路212用于将待计算浮点数的尾数拆解为多个尾数段。
为了使浮点数乘法器可以被多种精度浮点数乘法计算复用,本申请实施例中浮点数乘法器可以支持最低精度浮点数乘法,因此,对于最低精度浮点数的尾数可以不用拆解。对于高精度浮点数的尾数在拆解时,可以使拆解的每个尾数段的位宽小于等于浮点数乘法器支持的尾数最大位宽。此外,为了使进行不同类型浮点数的计算时,每个浮点数乘法器中的尾数乘法器资源得到充分利用,可以使最低精度浮点数的尾数位宽、各类型的高精度浮点数的尾数拆解得到的每个尾数段的位宽相近。
在本申请中,可以对拆解电路预先设定对各种类型浮点数的拆解方式,例如,以浮点数乘法器所支持的最大尾数位宽对浮点数进行拆解,当存在多个浮点数乘法器时,可以使多个浮点数乘法器并行对拆解后的浮点数进行处理。示例地,拆解电路21在获取到待计算浮点数后,可以先确定待计算浮点数的类型。再按照预先设定的该类型的浮点数对应的拆解方式,对该待计算浮点数的尾数进行拆解,得到多个尾数段。预先设定对各种类型浮点数的拆解方式。
其中,浮点数的拆解方式的设置原则为:在复用已有的浮点数乘法器的情况下,可以确定最低精度浮点数乘法器运算器支持的最大尾数位宽a。然后,以a为最大尾数段位宽,确定每种类型的浮点数拆解的尾数段数。
此外,还可以根据需要重新设计浮点数乘法器,重新设计的浮点数乘法器需要支持最低精度浮点数的乘法计算,且其支持的最大尾数位宽要大于各类型浮点数拆解的尾数段的位宽。并且,为了使重新设计的浮点数乘法器的尾数乘法器资源得到充分利用,还可以在设定拆解方式以及设计浮点数乘法器时,使重新设计的浮点数乘法器支持的最大尾数位宽、最低精度浮点数的尾数位宽、以及各类型高精度浮点数拆解的各尾数段的位宽之间尽量相近。
下面对几种常见类型浮点数的尾数的拆解方式进行说明。
对于FP16来说,通常FP16为最低精度浮点数,因此,对于FP16的尾数可以不用拆解。
对于FP32来说,因为FP16的尾数共11bits,FP32的尾数共24bits,要使FP16的尾数位宽和FP32的尾数拆解得到的每个尾数段的位宽相近,可以将FP32的尾数拆解为2个尾数段,每个尾数段12bits。
对于FP64,因为FP16的尾数共11bits,FP32拆解的每个尾数段12bits,FP64要,要使FP16的尾数位宽、FP32的尾数拆解得到的每个尾数段的位宽、FP64的尾数拆解得到的每个尾数段的位宽和浮点数乘法器支持的尾数最大位宽相近,可以将FP64的尾数拆解为4个尾数段,其中,3个尾数段位宽为13bits,1个尾数段位宽为14bits。
为了更清楚说明对于不同类型的浮点数的尾数的拆解,下面列举几个不同类型的浮点数的尾数段的拆解示例进行说明。
例如,对于FP32的尾数1.010 1010 1010 1010 1010 1010,可以拆解为2个尾数段,分别为:x1=1010 1010 1010和x2=1010 1010 1010,每个尾数段12bits。
又例如,对于FP64的尾数1.010 1010 1010 1010 1010 1010 1010 1010 10101010 1010 1010 0101 0,可以拆解为4个尾数段,分别为:y1=1010 1010 1010 10、y2=101010 1010 101,y3=01010 1010 1010,y4=1010 1010 0101 0,其中,y1共14bits,y2、y3和y4各13bits。
由于不同类型的浮点数的尾数的拆解规则不相同,因此,在浮点数乘法器的每种类型的浮点数运算中,可以分别对应有拆分该类型浮点数的浮点数拆解子电路以及尾数拆解子电路。
如图6所示,对于一个支持FP16、FP32以及FP64的运算单元2,其拆解电路21中可以包括有对应FP16的浮点数拆解子电路、对应FP32的浮点数拆解子电路以及尾数拆解子电路、对应FP64的浮点数拆解子电路以及尾数拆解子电路,此外,拆解电路21还可以包括有输出选择电路,该输出选择电路可以根据模式,选择对应的浮点数拆解子电路或者尾数拆解子电路输出的拆解结果进行输出。
浮点数乘法器2221
为了提高对待计算浮点数的尾数乘法的计算效率,运算单元2中可以设置有N个浮点数乘法器2221。其中,每个浮点数乘法器可以独立计算一组完整浮点数乘法,一组完整的浮点数乘法,包括符号异或、阶码相加以及尾数乘法。
在一种可能的实现方式中,浮点数乘法器2221的个数N可以为该运算单元2支持的最高精度浮点数的尾数拆分的尾数段个数m的平方。即,N=m2。在浮点数乘法器个数为N的情况下,运算单元2支持的最低精度浮点数向量的长度为N,支持的较高精度浮点数向量的长度为N/o2,其中,o为较高精度浮点数的尾数拆分的尾数段个数,支持的更高精度浮点数向量的长度为N/p2,以此类推。
例如,运算单元2支持的最高精度浮点数为FP64,其尾数拆分的尾数段个数为4,则浮点数乘法器221的个数可以为16,运算单元2支持的最低精度浮点数FP16向量的长度为16,支持的较高精度浮点数FP32向量的长度为16/4=4,支持的更高精度浮点数FP64向量的长度为16/16=1。
为了能实现对多种类型的待计算浮点数的阶码相加,在这N个浮点数乘法器2221中,需要每个浮点数乘法器的阶码加法器的位宽大于等于最低精度浮点数的阶码计算位宽,且有N/o2个浮点数乘法器的阶码加法器的位宽大于等于较高精度浮点数的阶码计算位宽,且在N/o2个浮点数乘法器中,有N/p2个浮点数乘法器的阶码加法器的位宽大于等于更高精度浮点数的阶码计算位宽,以此类推。
浮点数加法器2222
为了能实现多种模式的浮点数运算类型,浮点数加法器2222可以有多个,并以树形排布。具体的,浮点数加法器2222的个数与浮点数加法器2222可支持同时计算的浮点数个数以及运算单元2支持的最低精度浮点数向量的最大长度有关。
例如,运算单元2支持最低精度浮点数(如FP16)的最大长度为16,一个浮点数加法器222可同时计算4个浮点数的加法计算,或可计算2个浮点数的加法计算。如图7所示,为了实现浮点数向量内积运算以及浮点数向量的元素累加运算,可以对浮点数加法器进行分组排布。第一组浮点数加法器可以执行浮点数的尾数段乘法结果的加和运算或者浮点数加法运算,对于长度为4的FP32向量的向量内积运算来说,在第一组浮点数加法器完成尾数段乘法结果的加和运算后,可以得到4个尾数段乘法结果的加和结果。对于这4个加和结果需要结合符号、阶码进行浮点数加法运算,考虑到一个浮点数加法器同时计算4个较高精度的浮点数加法时,会导致尾数对阶时移位过多,产生较大误差。因此,对于第一组浮点数加法器之后的执行浮点数加法运算的浮点数加法器来说,可以选择支持2个浮点数加法运算的浮点数加法器。这样,4个尾数段乘法结果的加和结果对应的4个浮点数加法运算,需要由2个浮点数加法器实现,这2个浮点数加法器可以作为第二组浮点数加法器。又因为向量内积运算需要对所有浮点数乘积进行累加,所以还需要第三组的一个浮点数加法器,对第二组浮点数加法器得到的加和进行加法运算。
又例如,运算单元2支持最低精度浮点数(如FP16)的最大长度为16,一个浮点数加法器可可计算2个浮点数的加法计算。则为了实现浮点数向量内积运算以及浮点数向量的元素累加运算,可以对浮点数加法器分为4组,第一组包括8个浮点数加法器,第二组包括4个浮点数加法器,第三组包括2个浮点数加法器,第四组包括1个浮点数加法器。
需要说明的是,浮点数加法器在对完整的浮点数进行加法运算时,可以完成阶码最大值比较、计算阶差、尾数对阶以及尾数加和,在对尾数段乘积结果进行加法运算时,可以直接执行尾数对阶和尾数加和,其中,尾数对阶时采用的是固定移位值。
此外,为了使运算单元2输出规格化的浮点数计算结果,在运算单元2中还可以包括有规格化处理电路423。规格化处理电路可以完成常规的尾数舍入操作以及阶码转换操作。
尾数舍入操作,即对需要输出的浮点数的尾数进行舍入(rounding)操作,转换为标准格式,如IEEE754标准格式。其中,FP16、FP32、FP64对应的尾数位宽分别为11bits、24bits、53bits;
阶码转换操作,即对需要输出的浮点数的阶码转换为标准浮点数中对应的阶码格式,如IEEE754标注格式。
其中,FP16,阶码位宽为5bits,偏移值(bias)=15,若实际阶码值大于16,则将阶码值修正为5’b11111,5’b表示5位二进制数;若实际阶码值小于-14,且尾数的整数位为0,则将阶码值修正为5’b0。FP32,阶码位宽为8bits,bias=127,若实际阶码值大于128,则将阶码值修正为8’b11111111,若实际阶码值小于-126,且尾数整数位为0,阶码值修正为8’b0。FP64,指数位宽为11bits,bias=1023,若实际指数值大于1024,指数值修正为11’b11111111111;若实际指数值小于-1023,且尾数整数位为0,阶码值修正为11’b0。
本申请实施例还提供了一种浮点数计算的方法,该方法可以由上述运算单元实现,运算单元可以包括拆解电路和运算器,具体的,如图8所示,该方法可以包括如下处理流程:
步骤801、拆解电路获取计算指令中包括的模式和待计算浮点数。
在实施中,控制单元在存储单元或者内存中获取计算指令,并发送给运算单元。运算单元中的拆解电路接收该计算指令,并获取该计算指令中携带的模式和待计算浮点数。其中,待计算浮点数可以为两个相同类型的浮点数标量,或者为两个不同类型的浮点数标量,或者两个相同类型相同长度的浮点数向量,又或者两个不同类型相同长度的浮点数向量。
运算单元中可以输入的两个浮点数向量的长度与运算单元中浮点数乘法器的个数有关,具体的,在浮点数乘法器个数为N的情况下,运算单元支持的最低精度浮点数向量的长度为N,支持的较高精度浮点数向量的长度为N/o2,其中,o为较高精度浮点数的尾数拆分的尾数段个数,以此类推。
例如,如图10所示,运算器包括16个浮点数乘法器,则可以输入两个长度为16的FP16向量,或者输入两个长度为4的FP32向量,或者输入两个FP64标量。
步骤802、拆解电路根据预设规则拆解待计算浮点数,其中,模式用于指示对待计算浮点数的运算类型。
其中,模式指示的运算类型可以包括向量逐元素乘、向量内积和向量元素累加等。
在实施中,拆解电路可以根据待计算浮点数的类型,以及存储的该类型的浮点数对应的尾数拆解段数和各尾数段的位宽,对待计算浮点数的尾数进行拆解,并将拆解后的尾数段、符号和阶码输出至运算器。且在输出尾数段时,需要按照预设的固定顺序进行排序后输出,以需要进行乘法计算的不同待计算浮点数的尾数的尾数段可以以各种可能的方式组合。
下面结合图10所示的运算单元分别以输入两个长度为16的FP16向量、输入两个长度为4的FP32向量,以及输入两个FP64标量为例,对步骤802的拆解方法进行说明。
输入两个长度为16的FP16向量:
每个拆解电路可以对其中一个FP16向量进行拆解。拆解电路中的浮点数拆解子电路按照FP16中符号、阶码和尾数所占位宽,将每个FP16拆解为1组{符号(sign),阶码(exp),尾数(mts)}。其中,对于拆解得到的尾数是指包括整数位的尾数。具体的,按照由高位到低位的顺序1bit、5bits、10bits将FP64拆解为三部分,第一部分的1bit为sign、第二部分的5bits为exp,对于第三部分的10bits,在这10bits的最高位前补1(隐藏的整数位)得到11bits作为mts。对于一个FP16向量,可以拆解得到16组{sign,exp,mts}。因为在本申请实施例中浮点数乘法器是支持最低精度浮点数的乘法计算的,所以对于最低精度浮点数FP16的尾数可以无需进行拆解。
然后,拆解电路将得到的每组{sign,exp,mts}输入到一个浮点数乘法器中,输入时可以按照该组{sign,exp,mts},在FP16向量中的位置按顺序输入,位于不同向量中的相同位置的待计算浮点数对应的两组{sign,exp,mts},输入至同一浮点数乘法器中。
例如,两个向量为向量A(a1,a2…a16)和向量B(b1,b2…b16)。向量A中的第一个待计算浮点数a1,可以拆解得到{signA1,expA1,mtsA1},向量B中的第一个待计算浮点数b1,可以拆解得到{signB1,expB1,mtsB1},则可以将{signA1,expA1,mtsA1}和{signB1,expB1,mtsB1}输入到同一个浮点数乘法器中。
输入两个长度为4的FP32向量:
每个拆解电路可以对其中一个FP32向量进行拆解。首先,拆解电路中的浮点数拆解子电路按照FP32中符号、阶码和尾数所占位宽,将每个FP32拆解为一组{sign,exp,mts}。具体的,按照由高位到低位的顺序1bit、8bits、23bits将FP64拆解为三部分,第一部分的1bit为sign、第二部分的8bits为exp,对于第三部分的23bits,在这23bits的最高位前补1(隐藏的整数位)得到24bits作为mts。对于一个FP32向量,可以拆解得到4组{sign,exp,mts},并将拆解得到的尾数输入至尾数拆解子电路。尾数拆解子电路按照预先设定的对FP32的拆解方式,对输入的mts进行拆解。例如,预先设定的对FP32的拆解方式为拆解为2个尾数段,每个尾数段的位宽为24bits。。
例如,两个FP32向量为向量C(c1,c2,c3,c4)和向量D(d1,d2,d3,d4)。对于向量C,先按照FP32中符号、阶码和尾数所占位宽,将向量C中的浮点数分别拆解为{signC1,expC1,mtsC1}、{signC2,expC2,mtsC2}、{signC3,expC3,mtsC3}和{signC4,expC4,mtsC4}。然后,将按照预先设定的对FP64的拆解方式,将mtsC1拆解为mtsC10和mtsC11,将mtsC2拆解为mtsC20和mtsC21,将mtsC3拆解为mtsC30和mtsC31,将mtsC4拆解为mtsC40和mtsC41,其中,mtsC10、mtsC20、mtsC30、mtsC40表示低位的尾数段,mtsC11、mtsC21、mtsC31、mtsC41表示高位的尾数段。同样的,对于向量D可以拆解得到的符号包括signD1、signD2、signD3和signD4,拆解得到的阶码包括expD1、expD2、expD3和expD4,拆解得到的尾数段包括mtsD11、mtsD12、mtsD13、mtsD14、mtsD21、mtsD21、mtsD21和mtsD21,其中,mtsD10、mtsD20、mtsD30、mtsD40表示低位的尾数段,mtsD11、mtsD21、mtsD31、mtsD41表示高位的尾数段。
对于第一个FP32向量中的每个尾数的尾数段均以{mts1,mts1,mts0,mts0}顺序排列,再将每个尾数段分别输出至一个浮点数乘法器。对于第二个FP32向量中的每个尾数的尾数段均以{mts1,mts0,mts1,mts0}顺序排列,再将每个尾数段分别输出至一个浮点数乘法器。
例如,对于向量C中的第一个待计算浮点数c1的尾数mtsC1的尾数段,可以排列为{mtsC11,mts C11,mtsC10,mtsC10},相应的,对于向量D的第一个待计算浮点数d1的尾数mtsD1的尾数段可以排列为{mtsD11,mtsD10,mtsD11,mtsD10}。排序后,按照排序分别输出至浮点数乘法器,其中,mtsC1对应的排序中的第一个尾数段与mtsD1对应的排序中的第一个尾数段输出至同一浮点数乘法器,以此类推。
需要说明的是,上述尾数段的排序方式仅为一种示例,排序输出的目的在于使得两个向量中对应位置的待计算浮点数的尾数的尾数段可以以各种可能的方式组合,具体以何种排列方式输出本申请实施例不做限定,只需保证是按照固定的排列方式输出,且达到上述目的即可。
此外,对于拆解得到的每组中sign和exp,只需输出至同一组的尾数对应的排序中的第一个尾数段所输入的浮点数乘法器中即可。
例如,对于向量C中的第一个待计算浮点数c1的符号signC1和阶码expC1,可以与mtsC1对应的排序中的第一个尾数段输入同一个浮点数乘法器中。
输入两个FP64标量:
每个拆解电路可以对其中一个FP64进行拆解。首先,浮点数拆解子电路按照FP64中符号、阶码和尾数所占位宽,将每个FP64拆解为{sign,exp,mts}。具体的,按照由高位到低位的顺序1bit、11bits、52bits将FP64拆解为三部分,第一部分的1bit为sign、第二部分的11bits为exp,对于第三部分的52bits,在这52bits的最高位前补1(隐藏的整数位)得到53bits作为mts。然后,再将mts输入至尾数拆解子电路。然后,尾数拆解子电路按照预先设定的对FP64的拆解方式,对接收到的mts进行拆解。例如,预先设定的对FP64的拆解方式为将尾数拆解为4个尾数段,每个尾数段的位宽分别为13bits、13bits、13bits和14bits。
例如,两个待计算浮点数为E和F。对于E可以先按照FP64中符号、阶码和尾数所占位宽,拆解为{signE,expE,mtsE},然后,按照预先设定的对FP64的拆解方式,将mtsE拆解为mtsE3、mtsE2、mtsE1和mtsE0,其中,mtsE3、mtsE2、mtsE1和mtsE0表示由高位到低位的尾数段。同样的,对于F可以先拆解为{signF,expF,mtsF},然后,将mtsF拆解为mtsF3、mtsF2、mtsF1和mtsF0,其中,mtsF3、mtsF2、mtsF1和mtsF0表示由高位到低位的尾数段。
对于第一个FP64的尾数的尾数段以{mts3,mts3,mts2,mts3,mts2,mts1,mts3,mts2,mts1,mts0,mts2,mts1,mts0,mts1,mts0,mts0}顺序排列,再将每个尾数段分别输出至一个浮点数乘法器。对于第二个FP64的尾数的尾数段以{mts3,mts2,mts3,mts1,mts2,mts3,mts0,mts1,mts2,mts3,mts0,mts1,mts2,mts0,mts1,mts0}顺序排列,再将每个尾数段分别输出至一个浮点数乘法器。
例如,对于待计算浮点数E的尾数mtsE的尾数段,可以排列为{mtsE3,mtsE3,mtsE2,mtsE3,mtsE2,mtsE1,mtsE3,mtsE2,mtsE1,mtsE0,mtsE2,mtsE1,mtsE0,mtsE1,mtsE0,mtsE0}。相应的,对于向量F的的尾数mtsF的尾数段可以排列为{mtsF3,mts2F,mtsF3,mtsF1,mtsF2,mtsF3,mtsF0,mtsF1,mtsF2,mtsF3,mtsF0,mtsF1,mtsF2,mtsF0,mtsF1,mtsF0}。排序后,按照排序分别输出至浮点数乘法器,其中,mtsE对应的排序中的第一个尾数段与mtsF对应的排序中的第一个尾数段输出至同一浮点数乘法器,以此类推。
需要说明的是,上述尾数段的排序方式仅为一种示例,排序输出的目的在于使得两个向量中对应位置的待计算浮点数的尾数的尾数段可以以各种可能的方式组合,具体以何种排列方式输出本申请实施例不做限定,只需保证是按照固定的排列方式输出,且达到上述目的即可。
此外,对于拆解得到的sign和exp,只需输出至尾数对应的尾数段的排序中的第一个尾数段所输入的浮点数乘法器中即可。
在一种可能的实现方式中,在将尾数段输出至浮点数乘法器之前,可以先对尾数段进行高位补0,使得补0后的尾数段的位宽与浮点数乘法器支持的乘法位宽相同。
步骤803、运算器按照模式和拆解后的待计算浮点数完成所述计算指令的处理。
在实施中,在步骤803可以由运算器中的浮点数乘法器和浮点数加法器实现。具体的,如图9所示,步骤803可以包括如下处理流程:
步骤8031、运算器中的浮点数乘法器对输入的拆解后的待计算浮点数的符号进行异或计算,对输入的拆解后的待计算浮点数的阶码进行加法计算,对输入的拆解后的待计算浮点数的尾数段进行乘法计算,并向运算器中的浮点数加法器输出符号异或结果、阶码加和结果和尾数段乘积结果。
下面结合图10所示的运算单元,对不同计算类型下,上述步骤802中示例的几种输入在该步骤8031的处理进行说明。
浮点数向量逐元素乘运算,输入为两个长度为16的FP16向量:
每个浮点数乘法器对输入的浮点数进行乘法运算,具体的,包括对输入的两个符号进行异或计算,对输入的两个阶码进行加法计算,对输入的两个尾数段进行乘法计算。16个浮点数乘法器可以并行执行。
每个浮点数乘法器可以将符号异或结果、阶码加和结果和尾数段乘积结果输出至规格化处理电路,规格化处理电路对同一浮点数加法器输入的符号异或结果、阶码加和结果和尾数段乘积结果进行规格化处理,得到一个规格化的FP16。对于四个浮点数加法器分别输入的符号异或结果、阶码加和结果和尾数段乘积结果,规格化处理电路可以得到4个规格化的FP16作为向量逐元素乘运算结果输出。此处,需要说明的是,规格化处理电路对于输入的符号异或结果、阶码加和结果和尾数段乘积结果进行规格化处理时,与对常规的浮点数的符号、阶码和尾数进行规格化处理是相同。
浮点数向量内积运算,输入为两个长度为16的FP16向量:
每个浮点数乘法器对输入的浮点数进行乘法运算,具体的,包括对输入的两个符号进行异或计算,对输入的两个阶码进行加法计算,对输入的两个尾数段进行乘法计算。16个浮点数乘法器可以并行执行,得到16个浮点数乘积结果。
浮点数乘法器输出的16个浮点数乘积结果分为4组,分别输出至第一组的4个浮点数加法器中的一个浮点数加法器。
浮点数向量逐元素乘运算,输入为两个长度为4的FP32向量:
每个浮点数乘法器对输入的尾数段进行乘法计算,16个浮点数乘法器可以并行执行对尾数段的乘法。且对于输入的符号和阶码,浮点数乘法器还要执行符号异或运算以及阶码加法运算。
16个浮点数乘法器分别对输入的尾数段进行乘法运算后,可以得到16个尾数段乘积结果。并将这16个尾数段乘积结果分为4组,每组输出至第一组4个浮点数加法器中的一个浮点数加法器,其中,同一组中的各尾数段乘积结果均来自同一对待计算浮点数。
例如,在上述对FP32向量的拆解与尾数段排序的示例基础上,此处,16个尾数段乘积结果分成的4组中,第一组包括的尾数段乘积结果可以为:mtsC11*mtsD11、mtsC11*mtsD10、mtsC10*mtsD11、mtsC10*mtsD10;第二组可以尾数段乘法结果可以为:mtsC21*mtsD21、mtsC21*mtsD20、mtsC20*mtsD21、mtsC20*mtsD20,第三组和第四组包括的尾数段乘积结果可以以此类推。
浮点数向量逐元素乘运算,输入为两个FP64标量:
每个浮点数乘法器对输入的尾数段进行乘法计算,16个浮点数乘法器可以并行执行对尾数段的乘法。且对于输入的符号和阶码,浮点数乘法器还需要执行符号异或运算以及阶码加法运算。
16个浮点数乘法器得到的16个尾数段乘积结果可以分为4组,每组输出至第一组4个浮点数加法器中的一个浮点数加法器。
例如,在上述对FP64的拆解与尾数段排序的示例基础上,此处,16个尾数段乘积结果分成的4组中,第一组包括的尾数段乘积结果可以为:mtsE3*mtsF3、mtsE3*mts F 2、mtsE2*mtsF3、mtsE3*mtsF1;第二组包括的尾数段乘积结果可以为:mtsE2*mtsF2、mtsE1*mtsF3、mtsE1*mtsF2、mtsE0*mtsF3;第三组包括的尾数段乘积结果可以为:mtsE3*mtsF0、mtsE2*mtsF1、mtsE2*mtsF0、mtsE0*mtsF2;第四组包括的尾数段乘积结果可以为:mtsE1*mtsF1、mtsE1*mtsF0、mtsE0*mtsF1、mtsE0*mtsF0。
需要说明的是,FP32的浮点数向量内积运算和浮点数向量逐元素乘运算在该步骤8031的处理是相同的,因此,对于FP32的浮点数向量内积运算在步骤8031中的处理不再赘述。
步骤8032、浮点数加法器对输入的尾数段乘积结果进行加法计算,得到尾数段加和结果,并根据计算指令模式、尾数段加和结果、符号异或结果以及阶码加和结果,输出对待计算浮点数的计算结果。
下面结合图10所示的运算单元,对不同计算类型下,上述步骤802中示例的几种输入在该步骤8033的处理进行说明。
浮点数向量逐元素乘运算,输入为两个长度为4的FP32向量:
第一组的每个浮点数加法器根据输入的模式所指示的待计算浮点数的类型获取对应的固定移位值。然后,对于输入的浮点数尾数段乘积结果,按照固定移位值进行阶码对阶,再对对阶后的尾数段乘积结果进行加法运算,得到第一阶段加和结果。第一组的4个浮点数乘法器可以得到4个第一阶段加和结果。然后,每个浮点数乘法器向规格化处理电路输出一个第一阶段加和结果以及对应的符号结果和阶码加和结果。规格化处理电路,对输入的每组第一阶段加和结果以及对应的符号结果和阶码加和结果进行规格化处理,输出一个规格化的FP32。该规格化处理电路可以得到4个规格化的FP32并作为向量逐元素乘运算结果输出。
其中,固定移位值是预先计算并存储的,因为拆解电路输出的尾数段是按照固定排序输出至对应的浮点数乘法器中的,且浮点数乘法器的输出会固定输出至对应的浮点数加法器,所以浮点数加法器可以预先存储固定移位值,对于不同类型的待计算浮点数固定移位值也可以不同。固定移位值与尾数段乘积结果所对应的尾数段在原待计算浮点数的尾数中的位置以及所占位宽有关。
下面对FP32对应的固定移位值进行举例说明。
待计算浮点数c1(FP32)的尾数段包括mtsC11和mtsC10,待计算浮点数d1的尾数段包括mtsD11和mtsD10。其中,尾数段乘积结果包括mtsC11*mtsD11、mtsC11*mtsD10、mtsC10*mtsD11和mtsC10*mtsD10。以mtsC10*mtsD10为基准,即mtsC10*mtsD10的固定移位值为0,因为mtsC10*mtsD11对应的两个尾数段最低位之和与mtsC10*mtsD10对应的两个尾数段最低位之和的位差为12,所以mtsC10*mtsD11的固定移位值为12,同理,mtsC11*mtsD10的固定移位值为12,mtsC11*mtsD11的固定移位值为24。即,对应FP32存储的固定移位值可以依次为0、12、12、24。
需要说明的是,上述固定移位值均表示左移位数。
浮点数加法器在对mtsC11*mtsD11、mtsC11*mtsD10、mtsC10*mtsD11和mtsC10*mtsD10的加法计算时,分别将mtsC11*mtsD10、mtsC10*mtsD11和mtsC10*mtsD10左移12、12、24位,再对移位后的mtsC11*mtsD10、mtsC10*mtsD11和mtsC10*mtsD10与mtsC11*mtsD11进行加和。
浮点数向量内积运算,输入为两个长度为4的FP32向量:
第一组的每个浮点数加法器根据输入的模式所指示的待计算浮点数的类型获取对应的固定移位值。然后,对于输入的浮点数尾数段乘积结果,按照固定移位值进行阶码对阶,再对对阶后的尾数段乘积结果进行加法运算,得到第一阶段加和结果。第一组的4个浮点数乘法器可以得到4个第一阶段加和结果。然后,第一组的浮点数乘法器将四个第一阶段加和结果分为2组,每组输出至第二组的一个浮点数加法器。在向第二组的浮点数加法器输出第一阶段加和结果时,同时将该第一阶段加和结果对应的符号结果和阶码加和结果也输出至该第二组的浮点数加法器。
第二组的浮点数加法器,对于输入的两个阶码加和结果进行最大阶码比较,并计算阶差。然后根据计算出的阶差对输入的两个第一阶段加和结果进行对阶,再对对阶后的第一阶段加和结果进行加法计算,得到第二阶段加和结果。第二组的浮点数加法器可以得到两个第二阶段加和结果(此处,在第二组浮点数加法器实质上是完成的完整的浮点数加法计算,则第二组的浮点数加法器输出的第二阶段加和结果为完整的浮点数),再输出至第三组的浮点数加法器中。
第三组的浮点数加法器对第二阶段加和结果进行加法计算,得到第三阶段加和结果。最后,第三组的浮点数加法器将第三阶段加和结果输出至规格化处理电路,由规格化处理电路进行规格化处理后,得到1个规格化的FP32作为浮点数向量内积计算结果输出。
浮点数向量逐元素乘运算,输入为FP64标量:
第一组的每个浮点数加法器根据输入的模式所指示的待计算浮点数的类型获取对应的固定移位值。然后,对于输入的浮点数尾数段乘积结果,按照固定移位值进行阶码对阶,再对对阶后的尾数段乘积结果进行加法运算,得到第一阶段加和结果。第一组的4个浮点数乘法器可以得到4个第一阶段加和结果。然后,第一组的浮点数加法器将4个第一阶段加和结果分为两组,每组输出至第二组的一个浮点数加法器。同时将输入的符号异或结果和阶码加和结果也输出至第二组的一个浮点数加法器。
下面对第一组的浮点数加法器中的FP64对应的固定移位值进行举例说明。
待计算浮点数E的尾数段包括mtsE3、mtsE2、mtsE1和mtsE0,待计算浮点数F的尾数段包括mtsF3、mtsF2、mtsF1和mtsF0。在各尾数段乘积结果中:
以mtsE0*mtsF0为基准,mtsE0*mtsF1的固定移位值为13,mtsE1*mtsF0的固定移位值为13,mtsE1*mtsF1的固定移位值为26,以上4个尾数乘积结果为一组,由一个浮点数加法器进行加法计算,在该浮点数加法器中对应FP64存储的固定移位值可以依次为0、13、13、26。
以mtsE0*mtsF2为基准,mtsE2*mtsF0的固定移位值为0,即不用进行移位,mtsE2*mtsF1的固定移位值为13,mtsE3*mtsF0的固定移位值为13,以上4个尾数乘积结果为一组,由一个浮点数加法器进行加法计算,在该浮点数加法器中对应FP64存储的固定移位值可以依次为0、0、13、13。
以mtsE0*mtsF3为基准,mtsE1*mtsF2的固定移位值为0,即不用进行移位,mtsE1*mtsF3的固定移位值为13,mtsE2*mtsF2的固定移位值为13,以上4个尾数乘积结果为一组,由一个浮点数加法器进行加法计算,在该浮点数加法器中对应FP64存储的固定移位值可以依次为0、0、13、13。
以mtsE3*mtsF1为基准,mtsE2*mtsF3的固定移位值为13,mtsE3*mts F2的固定移位值为13,mtsE3*mtsF3的固定移位值为26,以上4个尾数乘积结果为一组,由一个浮点数加法器进行加法计算,在该浮点数加法器中对应FP64存储的固定移位值可以依次为0、13、13、26。
需要说明的是,上述固定移位值均表示左移位数。
浮点数加法器在对mtsE0*mtsF0、mtsE0*mtsF1、mtsE1*mtsF0和mtsE1*mtsF1进行加法计算时,先将mtsE0*mtsF1、mtsE1*mtsF0和mtsE1*mtsF分别左移13、13、26位,再对移位后的mtsE0*mtsF1、mtsE1*mtsF0和mtsE1*mtsF与mtsE0*mtsF0进行加和。在对mtsE0*mtsF2、mtsE2*mtsF0、mtsE2*mtsF1和mtsE3*mtsF0进行加法计算时,先分别将mtsE2*mtsF1和mtsE3*mtsF0左移13、13位,再对移位后的mtsE2*mtsF1、mtsE3*mtsF0与mtsE0*mtsF2、mtsE2*mtsF0进行加和。在对mtsE0*mtsF3、mtsE1*mtsF2、mtsE1*mtsF3和mtsE2*mtsF2进行加法计算时,先将mtsE1*mtsF3和mtsE2*mtsF2分别左移13、13位,再对移位后的mtsE1*mtsF3、mtsE2*mtsF2和mtsE0*mtsF3、mtsE1*mtsF2进行加和。在对mtsE3*mtsF1、mtsE2*mtsF3、mtsE3*mts F2和mtsE3*mtsF3进行加法计算时,先将mtsE2*mtsF3、mtsE3*mts F2和mtsE3*mtsF3分别左移13、13、26位,再对移位后的mtsE2*mtsF3、mtsE3*mts F2、mtsE3*mtsF3和mtsE3*mtsF1进行加和。
第二组的浮点数加法器,对于输入的第一阶段加和结果按照固定移位值进行对阶后,再进行加法运算,得到第二阶段加和结果,再输出至第三组的浮点数加法器。同时将输入的符号异或结果和阶码加和结果也输出至第三组的浮点数加法器。
在上述第一组的浮点数加法器中存储的固定移位值的示例的基础上,对于第二组的浮点数加法器中的FP64对应的固定移位值进行说明。
例如,4个第一阶段加和结果分别为P1、P2、P3和P4,其中,P1是由mtsE1*mtsF1、mtsE1*mtsF0、mtsE0*mtsF1、mtsE0*mtsF0经过移位后相加得到的,P2是由mtsE3*mtsF0、mtsE2*mtsF1、mtsE2*mtsF0、mtsE0*mtsF2经过移位后相加得到的,P3是由mtsE2*mtsF2、mtsE1*mtsF3、mtsE1*mtsF2、mtsE0*mtsF3经过移位后相加得到的,P4是由mtsE3*mtsF3,mtsE3*mts F2,mtsE2*mtsF3,mtsE3*mtsF1经过移位后相加得到的。
P1和P2作为一组,以P1基准,由于P2对应的尾数段乘积结果中作为基准的尾数段乘积结果对应的最低位和,与P1对应的尾数段乘积结果中作为基准的mtsE0*mtsF0的尾数段乘积结果对应的最低位和的位差为26,所以P2的固定移位值为26,即在对应的浮点数加法器中存储的对应FP64的固定移位值可以依次为0、26。P3和P4作为一组,其中,以P3的为基准,P4的固定移位值为13,即在对应的浮点数加法器中存储的对应FP64的固定移位值可以依次为0、13。
第二组的浮点数加法器在对P1和P2进行加法计算时,先将P2左移26位,再对移位后的P1和P2进行加和。在对P3和P4进行加法计算时,先将P4左移13位,再对移位后的P3和P4进行加和。
第三组的浮点数加法器,对于输入的第二阶段加和结果再按照固定移位值进行对阶后,再进行加法运算,得到第三阶段加和结果。
在上述第一组的浮点数加法器中存储的固定移位值的示例的基础上,对于第二组的浮点数加法器中的FP64对应的固定移位值进行举例说明。
例如,上述P1和P2进行加法计算,得到的第三阶段加和结果为Q1,P3和P4进行加法计算,得到的第三阶段加和结果为Q2。其中,Q1的固定移位值为0,即不用进行移位,Q2的固定移位值为39。即在第三组放浮点数乘法器中存储的对应FP64的固定移位值依次为0、39。
需要说明的是,上述固定移位值均表示左移位数。
第三组的浮点数加法器在对Q1和Q2进行加法计算时,先对Q2左移39位,再对移位后的Q2和Q1进行加和。
最后,将符号异或结果、阶码加和结果和第三阶段加和结果输出至规格化处理电路,由规格化处理电路进行规格化处理后,得到1个规格化的FP64作为计算结果输出。
浮点数向量内积运算,输入为两个长度为16的FP16向量:
第一组的每个浮点数加法器对输入的4个浮点数乘积结果进行加法计算,得到第一阶段加和结果。第一组的浮点数加法器可以得到4个第一阶段加和结果,再将4个第一阶段加和结果分为2组分别输出至第二组的浮点数加法器.
第二组的浮点数加法器对输入的第一阶段加和结果进行加法计算,得到两个第二阶段加和结果。第二组的浮点数加法器将两个第二阶段加和结果输出至第三组的浮点数加法器。
第三组的浮点数加法器对第二阶段加和结果进行加法计算,得到第三阶段加和结果。最后,第三组的浮点数加法器将第三阶段加和结果输出至规格化处理电路,由规格化处理电路进行规格化处理,得到1个规格化的FP16作为向量内积结果输出。
还需说明的是,本申请实施例中还可以实现浮点数向量元素累加运算,在此种运算类型中,输入的待计算浮点数为一个浮点数向量。拆解电路获取到计算指令后,确定模式指示的计算类型为向量元素累加,则可以先生成与输入的待计算浮点数向量相同的类型的浮点数向量,且生成的浮点数向量中的各元素值均为1。对于输入的待计算浮点数向量和生成的浮点数向量可以共同作为待计算浮点数向量。接下来,浮点数向量元素累加运算在上述步骤801-步骤8032中的处理,与上述浮点数向量内积运算在上述步骤801-步骤8032中的处理相同在此不做赘述。
基于相同的技术构思,本申请实施例还提供了一种浮点数计算的装置,该装置可以为上述运算单元,如图11所示,该装置包括:
拆解模块130,用于获取计算指令中包括的模式和待计算浮点数;根据预设规则拆解所述待计算浮点数,其中,所述模式用于指示对所述待计算浮点数的运算类型;
计算模块131,用于按照所述模式和拆解后的待计算浮点数完成所述计算指令的处理。
应理解的是,本申请实施例的装置可以通过专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logicdevice,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现图1至10所示的浮点数计算方法时,装置及其各个模块也可以为软件模块。
在一种可能的实现方式中,所述待计算浮点数为高精度浮点数,所述拆解模块,用于:
根据所述待计算浮点数的尾数将所述待计算浮点数拆解为多个低精度浮点数。
在一种可能的实现方式中,所述拆解后的待计算浮点数的阶码位宽大于所述待计算浮点数的阶码位宽。
在一种可能的实现方式中,所述拆解模块130,用于:
将所述待计算浮点数拆解为符号、阶码和尾数,将所述待计算浮点数的尾数拆解为多个尾数段。
在一种可能的实现方式中,所述计算模块131包括浮点数乘法单元和浮点数加法单元,用于;
所述浮点数乘法计算单元,用于对拆解后的待计算浮点数的符号进行异或计算,得到符号异或结果,对拆解后的待计算浮点数的阶码进行加法计算,得到阶码加和结果,对拆解后的来自不同待计算浮点数的尾数段进行乘法计算,输出尾数段乘积结果;
所述浮点数加法计算单元,用于对所述尾数段乘积结果进行加法计算,得到尾数段加和结果,根据所述模式、所述尾数段加和结果、所述符号异或结果以及所述阶码加和结果,得到对所述待计算浮点数的计算结果。
还需要说明的是,上述实施例提供的浮点数计算的装置在计算浮点数时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的浮点数计算的装置与浮点数计算的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请实施例还提供了一种芯片,该芯片的结构可以与图1中所示的芯片100的结构相同,该芯片可以实现本申请实施例所提供的浮点数计算的方法。
参见图12,本申请实施例提供了一种计算设备1300。该计算设备1300包括至少一个处理器1301,总线系统1302,存储器1303,通信接口1304和内存单元1305。
上述处理器1301可以是一个通用中央处理器(central processing unit,CPU),网络处理器(network processor,NP),图形处理器(graphics processing unit)微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。
上述总线系统1302可包括一通路,在上述组件之间传送信息。
上述存储器1303可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。
内存单元1305用于存储执行本申请方案的应用程序代码,并由处理器1301来控制执行。处理器1301用于执行内存单元1305中存储的应用程序代码,从而实现本申请提出的浮点数计算方法。
在具体实现中,作为一种实施例,处理器1301可以包括一个或多个处理器1301。
通信接口1304用于实现计算设备1300与外部设备的连接和通信。
综上所述,计算设备可以通过对待计算浮点数的拆解,获得多个低精度浮点数,并分别由多个浮点数乘法器并行对拆解后的浮点数进行运算处理,使得同一计算设备可以支持不同精度浮点数的运算,无需设置专有计算单元执行指定精度浮点数的运算,整个计算设备的兼容性更强,另一方面,由于单一计算设备即可完成不同精度浮点数运算过程,减少了不同精度浮点数运算器的个数,降低了成本。此外,由于多个浮点数乘法器可以分别对拆解后的浮点数并行执行运算操作,降低了处理时延,提升了处理效率。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
以上所述仅为本申请一个实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (16)
1.一种运算单元,其特征在于,所述运算单元包括拆解电路和运算器;
所述拆解电路,用于获取计算指令中包括的模式和待计算浮点数;根据预设规则拆解所述待计算浮点数,其中,所述模式用于指示对所述待计算浮点数的运算类型;
所述运算器,用于按照所述模式和拆解后的待计算浮点数完成所述计算指令的处理。
2.根据权利要求1所述运算单元,其特征在于,
拆解电路,还用于在所述待计算浮点数为高精度浮点数时,根据所述待计算浮点数的尾数将所述待计算浮点数拆解为多个低精度浮点数。
3.根据权利要求1所述运算单元,其特征在于,所述拆解后的待计算浮点数的阶码位宽大于所述待计算浮点数的阶码位宽。
4.根据权利要求1所述运算单元,其特征在于,
所述拆解电路,还用于将所述待计算浮点数拆解为符号、阶码和尾数,将所述待计算浮点数的尾数拆解为多个尾数段。
5.根据权利要求1至4中任一项所述的运算单元,其特征在于,所述运算器包括浮点数乘法器和浮点数加法器,
所述浮点数乘法器,用于执行所述拆解后的待计算浮点数的加法运算,所述浮点数加法器用于执行所述拆解后的待计算浮点数的加法运算。
6.一种浮点数计算的方法,其特征在于,所述方法包括:
获取计算指令中包括的模式和待计算浮点数;
根据预设规则拆解所述待计算浮点数,其中,所述模式用于指示对所述待计算浮点数的运算类型;
按照所述模式和拆解后的待计算浮点数完成所述计算指令的处理。
7.根据权利要求6所述的方法,其特征在于,所述待计算浮点数为高精度浮点数,所述根据预设规则拆解所述待计算浮点数,包括:
根据所述待计算浮点数的尾数将所述待计算浮点数拆解为多个低精度浮点数。
8.根据权利要求6所述的方法,其特征在于,所述拆解后的待计算浮点数的阶码位宽大于所述待计算浮点数的阶码位宽。
9.根据权利要求6所述装置,其特征在于,所述根据预设规则拆解所述待计算浮点数,包括:
将所述待计算浮点数拆解为符号、阶码和尾数,将所述待计算浮点数的尾数拆解为多个尾数段。
10.根据权利要求6所述的方法,其特征在于,所述按照所述模式和拆解后的待计算浮点数完成所述计算指令的处理,包括;
对拆解后的待计算浮点数的符号进行异或计算,得到符号异或结果,对拆解后的待计算浮点数的阶码进行加法计算,得到阶码加和结果,对拆解后的来自不同待计算浮点数的尾数段进行乘法计算,输出尾数段乘积结果;
对所述尾数段乘积结果进行加法计算,得到尾数段加和结果,根据所述模式、所述尾数段加和结果、所述符号异或结果以及所述阶码加和结果,得到对所述待计算浮点数的计算结果。
11.一种浮点数计算的装置,其特征在于,所述装置包括:
拆解模块,用于获取计算指令中包括的模式和待计算浮点数;根据预设规则拆解所述待计算浮点数,其中,所述模式用于指示对所述待计算浮点数的运算类型;
计算模块,用于按照所述模式和拆解后的待计算浮点数完成所述计算指令的处理。
12.根据权利要求11所述的装置,其特征在于,所述待计算浮点数为高精度浮点数,所述拆解模块,用于:
根据所述待计算浮点数的尾数将所述待计算浮点数拆解为多个低精度浮点数。
13.根据权利要求11所述的装置,其特征在于,所述拆解后的待计算浮点数的阶码位宽大于所述待计算浮点数的阶码位宽。
14.根据权利要求11所述装置,其特征在于,所述拆解模块,用于:
将所述待计算浮点数拆解为符号、阶码和尾数,将所述待计算浮点数的尾数拆解为多个尾数段。
15.一种芯片,其特征在于,所述芯片包括运算单元,所述运算单元用于实现如权利要求1-5中任一项所述权利要求中所述运算单元所实现的功能。
16.一种计算设备,其特征在于,所述计算设备包括主板以及如权利要求18所述的芯片;所述芯片设置在所述主板上,所述芯片包括运算单元,所述运算单元用于实现如权利要求1-5中任一项所述权利要求中所述运算单元所实现的功能。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011053108.9A CN114327360B (zh) | 2020-09-29 | 2020-09-29 | 运算装置、浮点数计算的方法、装置、芯片和计算设备 |
PCT/CN2021/106965 WO2022068327A1 (zh) | 2020-09-29 | 2021-07-17 | 运算单元、浮点数计算的方法、装置、芯片和计算设备 |
EP21873989.4A EP4206902A4 (en) | 2020-09-29 | 2021-07-17 | OPERATING UNIT, METHOD AND DEVICE FOR CALCULATION OF A FLOATING POINT NUMBER AND CHIP AND CALCULATION DEVICE |
US18/191,688 US20230289141A1 (en) | 2020-09-29 | 2023-03-28 | Operation unit, floating-point number calculation method and apparatus, chip, and computing device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011053108.9A CN114327360B (zh) | 2020-09-29 | 2020-09-29 | 运算装置、浮点数计算的方法、装置、芯片和计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114327360A true CN114327360A (zh) | 2022-04-12 |
CN114327360B CN114327360B (zh) | 2023-07-18 |
Family
ID=80949159
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011053108.9A Active CN114327360B (zh) | 2020-09-29 | 2020-09-29 | 运算装置、浮点数计算的方法、装置、芯片和计算设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230289141A1 (zh) |
EP (1) | EP4206902A4 (zh) |
CN (1) | CN114327360B (zh) |
WO (1) | WO2022068327A1 (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140067894A1 (en) * | 2012-08-30 | 2014-03-06 | Qualcomm Incorporated | Operations for efficient floating point computations |
CN104111816A (zh) * | 2014-06-25 | 2014-10-22 | 中国人民解放军国防科学技术大学 | Gpdsp中多功能simd结构浮点融合乘加运算装置 |
CN104133656A (zh) * | 2014-07-25 | 2014-11-05 | 国家电网公司 | 一种尾码采用移位和减法运算的浮点数除法器及运算方法 |
CN105224284A (zh) * | 2015-09-29 | 2016-01-06 | 北京奇艺世纪科技有限公司 | 一种浮点数处理方法及装置 |
CN106951211A (zh) * | 2017-03-27 | 2017-07-14 | 南京大学 | 一种可重构定浮点通用乘法器 |
WO2017185203A1 (zh) * | 2016-04-25 | 2017-11-02 | 北京中科寒武纪科技有限公司 | 一种用于执行多个浮点数相加的装置及方法 |
US20170351493A1 (en) * | 2016-06-01 | 2017-12-07 | The Mathworks, Inc. | Systems and methods for generating code from executable models with floating point data |
CN108287681A (zh) * | 2018-02-14 | 2018-07-17 | 中国科学院电子学研究所 | 一种单精度浮点融合点乘运算单元 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224283B (zh) * | 2015-09-29 | 2017-12-08 | 北京奇艺世纪科技有限公司 | 一种浮点数处理方法及装置 |
US10691413B2 (en) * | 2018-05-04 | 2020-06-23 | Microsoft Technology Licensing, Llc | Block floating point computations using reduced bit-width vectors |
US10853067B2 (en) * | 2018-09-27 | 2020-12-01 | Intel Corporation | Computer processor for higher precision computations using a mixed-precision decomposition of operations |
CN109901813B (zh) * | 2019-03-27 | 2023-07-07 | 北京市合芯数字科技有限公司 | 一种浮点运算装置及方法 |
US11169776B2 (en) * | 2019-06-28 | 2021-11-09 | Intel Corporation | Decomposed floating point multiplication |
-
2020
- 2020-09-29 CN CN202011053108.9A patent/CN114327360B/zh active Active
-
2021
- 2021-07-17 EP EP21873989.4A patent/EP4206902A4/en active Pending
- 2021-07-17 WO PCT/CN2021/106965 patent/WO2022068327A1/zh unknown
-
2023
- 2023-03-28 US US18/191,688 patent/US20230289141A1/en active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140067894A1 (en) * | 2012-08-30 | 2014-03-06 | Qualcomm Incorporated | Operations for efficient floating point computations |
CN104111816A (zh) * | 2014-06-25 | 2014-10-22 | 中国人民解放军国防科学技术大学 | Gpdsp中多功能simd结构浮点融合乘加运算装置 |
CN104133656A (zh) * | 2014-07-25 | 2014-11-05 | 国家电网公司 | 一种尾码采用移位和减法运算的浮点数除法器及运算方法 |
CN105224284A (zh) * | 2015-09-29 | 2016-01-06 | 北京奇艺世纪科技有限公司 | 一种浮点数处理方法及装置 |
WO2017185203A1 (zh) * | 2016-04-25 | 2017-11-02 | 北京中科寒武纪科技有限公司 | 一种用于执行多个浮点数相加的装置及方法 |
US20170351493A1 (en) * | 2016-06-01 | 2017-12-07 | The Mathworks, Inc. | Systems and methods for generating code from executable models with floating point data |
CN106951211A (zh) * | 2017-03-27 | 2017-07-14 | 南京大学 | 一种可重构定浮点通用乘法器 |
CN108287681A (zh) * | 2018-02-14 | 2018-07-17 | 中国科学院电子学研究所 | 一种单精度浮点融合点乘运算单元 |
Non-Patent Citations (2)
Title |
---|
V. ARUNACHALAM等: ""Efficient dual-precision floating-point fused-multiply-add architecture"", 《MICROPROCESSORS AND MICROSYSTEMS》, vol. 57, pages 23 - 31 * |
施浩等: ""基于Microblaze处理器的浮点内积运算设计"", 《微计算机信息》, vol. 27, no. 5, pages 206 - 207 * |
Also Published As
Publication number | Publication date |
---|---|
EP4206902A4 (en) | 2024-02-28 |
US20230289141A1 (en) | 2023-09-14 |
WO2022068327A1 (zh) | 2022-04-07 |
CN114327360B (zh) | 2023-07-18 |
EP4206902A1 (en) | 2023-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115934030B (zh) | 算数逻辑单元、浮点数乘法计算的方法及设备 | |
CN107077416B (zh) | 用于以选择性舍入模式进行向量处理的装置和方法 | |
KR102430645B1 (ko) | 독립형 부동소수점 변환장치 | |
US10949168B2 (en) | Compressing like-magnitude partial products in multiply accumulation | |
JPH02196328A (ja) | 浮動小数点演算装置 | |
US8996601B2 (en) | Method and apparatus for multiply instructions in data processors | |
JP5640081B2 (ja) | 飽和を伴う整数乗算および乗算加算演算 | |
EP3782019B1 (en) | Multi-input floating-point adder | |
JP7407291B2 (ja) | 浮動小数点数の乗算計算方法及び機器、並びに算術論理演算装置 | |
US20200133633A1 (en) | Arithmetic processing apparatus and controlling method therefor | |
JP5794385B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
CN105573712B (zh) | 用于计算重复迭代和的结果的装置、方法和存储介质 | |
CN114327360B (zh) | 运算装置、浮点数计算的方法、装置、芯片和计算设备 | |
US20220326911A1 (en) | Product-sum calculation device and product-sum calculation method | |
JPH11296346A (ja) | 浮動小数点2進4倍長語フォ―マット乗算命令装置 | |
US8180822B2 (en) | Method and system for processing the booth encoding 33RD term | |
TWI804043B (zh) | 多輸入多輸出的累加器及其執行方法 | |
CN117251132B (zh) | 定浮点simd乘加指令融合处理装置、方法及处理器 | |
JP3014385B1 (ja) | S/390プロセッサにおける2進4倍長語フォ―マット乗算命令の分割 | |
JP3803653B2 (ja) | 乗算処理装置 | |
CN117873427A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |