CN111767025A - 包括乘累加器的芯片、终端及浮点运算的控制方法 - Google Patents

包括乘累加器的芯片、终端及浮点运算的控制方法 Download PDF

Info

Publication number
CN111767025A
CN111767025A CN202010774707.3A CN202010774707A CN111767025A CN 111767025 A CN111767025 A CN 111767025A CN 202010774707 A CN202010774707 A CN 202010774707A CN 111767025 A CN111767025 A CN 111767025A
Authority
CN
China
Prior art keywords
operand
floating
floating point
unit
operands
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
Application number
CN202010774707.3A
Other languages
English (en)
Other versions
CN111767025B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010774707.3A priority Critical patent/CN111767025B/zh
Publication of CN111767025A publication Critical patent/CN111767025A/zh
Priority to PCT/CN2021/101378 priority patent/WO2022028134A1/zh
Priority to US17/898,461 priority patent/US20230108799A1/en
Application granted granted Critical
Publication of CN111767025B publication Critical patent/CN111767025B/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
    • G06F7/575Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • 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
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • 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
    • 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)

Abstract

本申请公开了一种包括乘累加器的芯片、终端及浮点运算的控制方法,涉及芯片领域。上述乘累加器包括:浮点数的输入端、第一选择端、浮点通用单元与输出单元;浮点通用单元与浮点数的输入端、第一选择端、以及输出单元分别相连。在不同的浮点运算模式下,上述浮点通用单元可以将高位宽的浮点数拆分为低位宽的子操作数来进行乘累加运算,以及按照对浮点运算模式的选择,控制乘累加器中的乘法器与加法器进行拆分与重组,使乘累加器中的运算电路成为与浮点运算模式对应的运算电路,使得运算电路能够支持不同位宽的浮点数的乘累加运算,无需在芯片上集成至少两套硬件结构,有效的减小了芯片的面积与功耗。

Description

包括乘累加器的芯片、终端及浮点运算的控制方法
技术领域
本申请涉及芯片领域,特别涉及一种包括乘累加器的芯片、终端及浮点运算的控制方法。
背景技术
用于浮点运算的乘累加器作为基本的运算单元,是诸如图形处理器(GraphicsProcessing Unit,GPU)、人工智能(Artificial Intelligence,AI)芯片、中央处理器(Central Processing Unit,CPU)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、专用集成电路(Application Specific Integrated Circuits,ASIC)等芯片上的核心部件。
FP16、FP32、FP64等位宽的浮点运算需要使用不同的硬件结构,比如,FP64浮点运算采用一套硬件结构,FP16浮点运算和FP32浮点运算采用一套硬件结构,两套硬件结构之间相互独立。即便是FP16浮点运算和FP32浮点运算采用一套硬件结构,FP16浮点运算进行小数部分的乘法运算时采用的操作位宽是16比特,FP32浮点运算进行小数部分的乘法运算时采用的操作位宽是32比特。
因此,对于小数部分的乘法运算,FP16浮点运算和FP32浮点运算采用的是相互独立的运算电路,仍需要在芯片上集成很多的运算单元来同时支持上述两类操作位宽的浮点运算,进而导致芯片面积以及功耗很大。
发明内容
本申请实施例提供了一种包括乘累加器的芯片、终端及浮点运算的控制方法,通过将高位宽的浮点数拆分成低位宽的操作数来进行乘累加运算,使得一套硬件结构能够支持多种位宽的浮点数的乘累加运算,无需在芯片上集成至少两套硬件结构或者集成很多的运算单元,来实现对多种位宽的浮点数的乘累加运算的支持,有效的减小了芯片的面积,减少了芯片运行时的功耗。所述技术方案如下:
根据本申请的一个方面,提供了一种包括乘累加器的芯片,该乘累加器包括:浮点数的输入端、第一选择端、浮点通用单元与输出单元;浮点通用单元与浮点数的输入端、第一选择端分别相连,浮点通用单元的输出端与输出单元的输入端分别相连;
浮点通用单元,用于接收浮点数的输入端输入的第一位宽k1的第一操作数、第二操作数与第三操作数;按照第一选择端所指示的浮点运算模式将第一操作数的小数部分划分为第二位宽k2的m个第一子操作数、且将第二操作数的小数部分划分为第二位宽k2的m个第二子操作数,第二位宽k2=k1/m,m为正整数;基于m个第一子操作数与m个第二子操作数进行小数部分的乘法运算,得到小数乘积;基于第一操作数的符号位与指数部分、第二操作数的符号位与指数部分、以及小数乘积,确定出第一操作数与第二操作数的浮点数乘积;将浮点数乘积与第三操作数进行加法运算,得到浮点数和;
输出单元,用于根据浮点数和输出指定数据格式的运算结果。
根据本申请的另一方面,提供了一种终端,该终端包括如上述一个方面所述的芯片。
根据本申请的另一方面,提供了一种浮点运算的控制方法,应用于如上述一个方面所述的芯片中,该方法包括:
接收第一选择信号;
控制乘累加器中的运算电路处于与第一选择信号所指示浮点运算模式对应的运算电路,浮点运算模式支持第一位宽k1的浮点数的乘累加运算;
接收第一位宽k1的第一操作数、第二操作数与第三操作数;
将第一操作数的小数部分划分为第二位宽k2的m个第一子操作数、且将第二操作数的小数部分划分为第二位宽k2的m个第二子操作数,第二位宽k2=k1/m,m为正整数;
基于m个第一子操作数与m个第二子操作数进行小数部分的乘法运算,得到小数乘积;
基于第一操作数的符号位与指数部分、第二操作数的符号位与指数部分、以及小数乘积,确定出第一操作数与第二操作数的浮点数乘积;
将浮点数乘积与第三操作数进行加法运算,得到浮点数和;
根据浮点数和输出指定数据格式的运算结果。
本申请实施例提供的技术方案带来的有益效果至少包括:
在芯片上的乘累加器中设置了浮点通用单元。在不同的浮点运算模式下,该浮点通用单元可以将高位宽的浮点数拆分为低位宽的子操作数来进行乘累加运算,不同高位宽的浮点数可以拆分为不同数量的低位宽的子操作数,相应地,该浮点通用单元按照对浮点运算模式的选择,控制乘累加器中的乘法器与加法器进行拆分与重组,使乘累加器中的运算电路成为与浮点运算模式对应的运算电路以进行乘累加运算,使得运算电路能够支持不同位宽的浮点数的乘累加运算,无需在芯片上集成至少两套硬件结构来实现对多种位宽的浮点数的乘累加运算的支持,且对乘法器与加法器可以重复利用,可以减少乘法器与加法器的设置数量,进而有效的减小了芯片的面积,减少了芯片运行时的功耗。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个示例性实施例提供的芯片中乘累加器的结构示意图;
图2是本申请另一个示例性实施例提供的芯片中乘累加器的结构示意图;
图3是本申请一个示例性实施例提供的数据提取的示意图;
图4是本申请另一个示例性实施例提供的数据提取的示意图;
图5是本申请另一个示例性实施例提供的数据提取的示意图;
图6是本申请另一个示例性实施例提供的数据提取的示意图;
图7是本申请另一个示例性实施例提供的数据提取的示意图;
图8是本申请一个示例性实施例提供的运算阵列的结构示意图;
图9是本申请一个示例性实施例提供的乘法器分配的示意图;
图10是本申请一个示例性实施例提供的一组FP32操作数的小数部分的乘法运算对应的运算电路的结构示意图;
图11是本申请一个示例性实施例提供的一组FP64操作数的小数部分的乘法运算对应的运算电路的结构示意图;
图12是本申请一个示例性实施例提供的操作数拆分个数与加法器使用个数的关系示意图;
图13是本申请另一个示例性实施例提供的操作数拆分个数与加法器使用个数的关系示意图;
图14是本申请一个示例性实施例提供的小数乘积的裁剪的示意图;
图15是本申请另一个示例性实施例提供的小数乘积的裁剪的示意图;
图16是本申请一个示例性实施例提供的小数乘积扩展的示意图;
图17是本申请一个示例性实施例提供的第三操作数扩展的示意图;
图18是本申请一个示例性实施例提供的中间结果分解的示意图;
图19是本申请一个示例性实施例提供的K个基本运算单元的结构示意图;
图20是本申请一个示例性实施例提供的输出单元的结构示意图;
图21是本申请一个示例性实施例提供的浮点运算的控制方法的流程图;
图22是本申请一个示例性实施例提供的电子设备的结构示意图;
图23是本申请一个示例性实施例提供的服务器的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的若干个名词进行简介:
乘累加运算(Multiply Accumulate,MAC):将第一操作数A和第二操作数B相乘后,将乘积与第三操作数C相加的运算,也即Cout=A*B+C。
乘累加器:在数字信号处理器或一些微处理器中,用于实现乘累加运算的硬件电路单元。
定点数(fixed-point number):计算机中采用的一种数的表示方法,约定机器中所有数据的小数点位置是固定不变的。在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数。当数据小于定点数能表示的最小值时,计算机将它们作0处理,称为下溢;当数据大于定点数能表示的最大值时,计算机将无法表示,称为上溢,上溢和下溢统称为溢出。
浮点数(floating-point number):计算机中采用的另一种数的标识方法,与科学计数法相似,任意一个二进制数N,总可以写成:
N=(-1)S*2E*M;
式中M成为浮点数N的小数部分(也称尾数mantissa),是一个纯小数;E为浮点数N的指数部分(也称阶码exponent),是一个整数;S是浮点数N的符号位,当符号位上为0时,表示浮点数N为正,当符号位上为1时,表示浮点数N为负。这种表示方法相当于数的小数点位置随比例因子的不同,而在一定范围内可以自由浮动,所以称为浮点标识法。
浮点乘运算:对于第一浮点数NA=(-1)Sa*2Ea*Ma,第二浮点数NB=(-1)Sb*2Eb*Mb,两个浮点数的乘积如下:
NA*NB=(-1)(Sa+Sb)*2(Ea+Eb)*(Ma*Mb)。
乘累加器作为基本的计算单元,在CPU、GPU和AI等芯片中应用广泛。随着AI、大数据处理、新空口技术等应用场景的普及,高性能浮点运算成为衡量一款芯片的主要指标。由于浮点计算单元占据整体业务运算量80%以上,需要一个通用性、运算性能、芯片面积等多方面因素能够兼顾的硬件架构。因此,本申请提出了一种包括乘累加器的芯片,具备通用性、可伸缩性、面积更小、应用更广、性能更优的特性,适用于GPU、AI芯片、CPU、DSP、以及专用芯片等产品中。
本申请提供的包括乘累加器的芯片能够覆盖以下三项特性:
第一、在通用性更高的同时芯片面积更小,即该芯片具有可伸缩性,同一套硬件结构完全兼容多种位宽的浮点数运算,比如,仅使用一套硬件结构即能够支持对FP16、FP32、FP64、甚至是FP128等多种位宽的浮点数的运算。
第二、支持定制浮点运算模式,比如,一套硬件结构中包括16个操作位宽为16比特的乘法器,因此,采用本申请提供的浮点运算方法,该硬件结构可以支持一组FP64操作数的计算,可以同时支持2组FP32操作数的计算,可以支持4组FP16操作数的计算;还可以最多同时支持16组FP16操作数的计算,可以最多同时支持4组FP32操作数的计算;实现传统浮点运算模式的同时,还能够自定义不同类型的浮点运算模式,比如,可以定制同时支持8组FP16操作数的计算的浮点运算模式。
第三、性能更高,示例性的,在支持传统浮点运算模式之外,上述芯片上还预留了数据扩展接口,比如,上述芯片在传统浮点运算模式下支持2组FP32操作数的计算,但是上述芯片上还可以通过数据扩展接口实现同时支持4组FP32操作数计算的浮点运算模式,因此,在浮点数处理性能上有很高的提升。如表1,对于同时运算1组PF64操作数、2组PF32操作数、以及4组FP16操作数这三种浮点数运算的处理情况,某一GPU的浮点处理性能关系如下:
FP32处理性能=FP64处理性能*2;
FP16处理性能=FP32处理性能*4;
FP16处理性能=FP64处理性能*8;
本申请提供的芯片的浮点处理性能关系如下:
FP32处理性能=FP64处理性能*4;
FP16处理性能=FP32处理性能*4;
FP16处理性能=FP64处理性能*16。
从表1中可以得出结论:相对于表1中的一款GPU,本申请提供的芯片上,FP32处理性能提升了一倍,FP16处理性能提升了一倍;其中,TFLOPS(FLoating point OperationsPer Second)即是每秒所执行的以万亿为单位的浮点运算次数。
表1
数据格式 一款GPU/TFLOPS 本申请提供的芯片/TFLOPS
FP64 1 1
FP32 2 4
FP16 8 16
如图1,示出了本申请提供的包括乘累加器的芯片的结构框架,该芯片主要包括了数据提取单元101、第一运算单元102、第一映射单元103、第二运算单元104、第二映射单元105、以及输出单元106;数据提取单元101与浮点数的输入端、用于选择浮点运算模式的第一选择端mode_1相连,数据提取单元101的输出端与第一运算单元102的输入端、以及第二运算单元104的输入端分别相连;第一运算单元102的输出端与第一映射单元103的输入端相连;第一映射单元103的输出端与第二运算单元104的输入端相连;第二运算单元104的输出端与第二映射单元105的输入端相连;第二映射单元105的输出端与输出单元106的输入端相连。示例性的,对本申请提供的芯片的详细描述,请参考如下实施例。
图2是本申请的一个示例性实施例提供的芯片中的乘累加器200的结构示意图,乘累加器200包括:浮点数的输入端(包括第一操作数的输入端A、第二操作数的输入端B与第三操作数的输入端C)、第一选择端mode_1、浮点通用单元220与输出单元240;浮点通用单元220与浮点数的输入端A、B与C、第一选择端mode_1分别相连,浮点通用单元220的输出端与输出单元240的输入端相连;
浮点通用单元220,用于接收浮点数的输入端输入的第一位宽k1的第一操作数、第二操作数与第三操作数;按照第一选择端所指示的浮点运算模式将第一操作数的小数部分划分为第二位宽k2的m个第一子操作数、且将第二操作数的小数部分划分为第二位宽k2的m个第二子操作数,m为正整数;基于m个第一子操作数与m个第二子操作数进行小数部分的乘法运算,得到小数乘积;基于第一操作数的符号位与指数部分、第二操作数的符号位与指数部分、以及小数乘积,确定出第一操作数与第二操作数的浮点数乘积;将浮点数乘积与第三操作数进行加法运算,得到浮点数和;
输出单元240,用于根据浮点数和输出指定数据格式的运算结果。
可选地,第二位宽k2=k1/m,k2与k1是2的倍数。
可选地,不同的选择信号对应不同的浮点运算模式;且浮点通用单元220包括:数据提取单元221,数据提取单元221与浮点数的输入端A、B与C、第一选择端mode_1分别相连;
数据提取单元221,用于确定出与第一选择端mode_1输入的选择信号对应的浮点运算模式,浮点运算模式所指示的运算电路用于对第一位宽k1的浮点数进行乘累加运算,第一位宽k1对应浮点数的拆分个数m;从第一操作数的小数部分的低位开始按照所述第二位宽k2进行划分,得到m个第一子操作数;从第二操作数的小数部分的低位开始按照第二位宽k2进行划分,得到m个第二子操作数。
示例性的,若第一位宽k1为32,第二位宽k2为16,可以将第一操作数的小数部分的24位(包括significand位)中的低16位映射为一个16位的第一子操作数,高8位映射为一个16位的第一子操作数,上述子操作数的映射是从16位宽的低位开始映射,若是小数位数不足,则用0补齐,比如,上述高8位映射后的16位的第一子操作数中第8-15位全部为0。
示例性的,当指数部分数值是0的时候,数值S*2E*M中小数部分包括整数部分0,即小数部分实际上为0.M;当指数部分数值非0的时候,数值S*2E*M中小数部分包括整数部分1,即小数部分实际上为1.M;在上述两种情况下,则在对小数部分0.M和/或1.M进行运算之前,需要在小数部分M之前补一位整数位,即significand位。
可选地,浮点运算模式所支持的第一位宽k1的浮点数的小数部分对应位宽N1,乘累加器所支持的最小位宽的操作数的小数部分对应位宽N2;计算得到N1除以m的余数,将m减去余数得到的差值确定为第一参数P1;计算得到N1与P1的和除以m的商值,将商值减去N2的差值确定为第二参数P2;若P1与P2均为非负整数,则将m确定为第一位宽k1的浮点数对应的拆分个数。
上述过程推出了高位宽的操作数可以拆分为低位宽的操作数的个数m,也证明了高位宽的浮点数能够降解之后再计算,即高位宽的操作数具有可伸缩性,与芯片所要达到的可伸缩性匹配。
示例性的,上述第一位宽k1为64,则N1为53(包括了Significand位);上述最小位宽为16,则N2为11(包括了Significand位);假设m为4,则基于以下公式(1)-(3)可以计算得到P1=P2=3,则第一位宽k1的每个浮点数的小数部分均可以拆分为4个子操作数,其中,公式如下:
N1+P1=(N2+P2)*m;------(1)
P1=m-(N1%m);------(2)
P2=(N1+P1)/m-N2。------(3)
示例性的,以第二位宽k2=16为例,对不同位宽的操作数的映射方式进行举例说明。如图3,示出了4组FP16操作数的映射方式,每组FP16操作数包括一个第一操作数和一个第二操作数,4组FP16操作数映射得到4组16位的子操作数,分别为{A0,B0}、{A1,B1}、{A2,B2}、以及{A3,B3},A0,A1,A2,A3分别为拆分后的4个第一子操作数,B0,B1,B2,B3分别为拆分后的4个第二子操作数,对应的伪代码如下:
Sign_bit=15;//FP16操作数中第15位是符号位;
Exp_max=14;//FP16操作数中第14位是指数部分的最大位;
Exp_min=10;//FP16操作数的第10位是指数部分的最小位;
Group_num=4;//FP16操作数的组数为4;
For(i=0;i<Group_num;i=i+1){//进行循环赋值,直至i=4;
fp_a_s[i]=fp_a_d[i][sign_bit];//将第i组第一操作数fp_a_d[i]的第15位赋值给fp_a_s[i];
fp_a_e[i]=fp_a_d[i][Exp_max:Exp_min];//将第i组第一操作数fp_a_d[i]的第10-14位赋值给fp_a_e[i];
fp_a_f[i]=fp_a_d[i][Exp_min-1:0];//将第i组第一操作数fp_a_d[i]的第0-9位赋值给fp_a_f[i];
fp_b_s[i]=fp_b_d[i][sign_bit];//将第i组第二操作数fp_b_d[i]的第15位赋值给fp_b_s[i];
fp_b_e[i]=fp_b_d[i][Exp_max:Exp_min];//将第i组第二操作数fp_b_d[i]的第10-14位赋值给fp_b_e[i];
fp_b_f[i]=fp_b_d[i][Exp_min-1:0];//将第i组第二操作数fp_b_d[i]的第0-9位赋值给fp_b_f[i];
}
A0=pack_frac(fp_a_f0,SUB_PART_LL);//将fp_a_f0映射至64位宽中低32位的低16位上;
A1=pack_frac(fp_a_f1,SUB_PART_LH);//将fp_a_f1映射至64位宽中低32位的高16位上;
A2=pack_frac(fp_a_f2,SUB_PART_HL);//将fp_a_f2映射至64位宽中高32位的低16位上;
A3=pack_frac(fp_a_f3,SUB_PART_HH);//将fp_a_f3映射至64位宽中高32位的高16位上;
B0=pack_frac(fp_b_f0,SUB_PART_LL);//将fp_b_f0映射至64位宽中低32位的低16位上;
B1=pack_frac(fp_b_f1,SUB_PART_LH);//将fp_b_f1映射至64位宽中低32位的高16位上;
B2=pack_frac(fp_b_f2,SUB_PART_HL);//将fp_b_f2映射至64位宽中高32位的低16位上;
B3=pack_frac(fp_b_f3,SUB_PART_HH);//将fp_b_f3映射至64位宽中高32位的高16位上。
如图4,示出了2组FP32操作数的映射方式,每组FP32操作数包括一个第一操作数和一个第二操作数,2组FP32操作数映射得到4组16位的子操作数,分别为{A0,B0}、{A1,B1}、{A2,B2}、以及{A3,B3},A0,A1,A2,A3分别为拆分后的4个第一子操作数,B0,B1,B2,B3分别为拆分后的4个第二子操作数,对应的伪代码如下:
Sign_bit=31;//FP32操作数中第31位是符号位;
Exp_max=30;//FP32操作数中第30位是指数部分的最大位;
Exp_min=23;//FP32操作数的第23位是指数部分的最小位;
Group_num=2;//FP32操作数的组数为2;
For(i=0;i<Group_num;i=i+1){//进行循环赋值,直至i=2;
fp_a_s[i]=fp_a_d[i][sign_bit];//将第i组第一操作数fp_a_d[i]的第31位赋值给fp_a_s[i];
fp_a_e[i]=fp_a_d[i][Exp_max:Exp_min];//将第i组第一操作数fp_a_d[i]的第23-30位赋值给fp_a_e[i];
fp_a_f[i]=fp_a_d[i][Exp_min-1:0];//将第i组第一操作数fp_a_d[i]的第0-22位赋值给fp_a_f[i];
fp_b_s[i]=fp_b_d[i][sign_bit];//将第i组第二操作数fp_b_d[i]的第31位赋值给fp_b_s[i];
fp_b_e[i]=fp_b_d[i][Exp_max:Exp_min];//将第i组第二操作数fp_b_d[i]的第23-30位赋值给fp_b_e[i];
fp_b_f[i]=fp_b_d[i][Exp_min-1:0];//将第i组第二操作数fp_b_d[i]的第0-22位赋值给fp_b_f[i];
}
A0=pack_frac(fp_a_f[0],SUB_PART_LL);//将fp_a_f0的低16位映射至64位宽中低32位的低16位上;
A1=pack_frac(fp_a_f[0],SUB_PART_LH);//将fp_a_f0的高16位映射至64位宽中低32位的高16位上;
A2=pack_frac(fp_a_f[1].SUB_PART_HL);//将fp_a_f1的低16位映射至64位宽中高32位的低16位上;
A3=pack_frac(fp_a_f[1].SUB_PART_HH);//将fp_a_f1的高16位映射至64位宽中高32位的高16位上;
B0=pack_frac(fp_b_f[0].SUB_PART_LL);//将fp_b_f0的低16位映射至64位宽中低32位的低16位上;
B1=pack_frac(fp_b_f0[0].SUB_PART_LH);//将fp_b_f0的高16位映射至64位宽中低32位的高16位上;
B2=pack_frac(fp_b_f0[1].SUB_PART_HL);//将fp_b_f1的低16位映射至64位宽中高32位的低16位上;
B3=pack_frac(fp_b_f0[1].SUB_PART_HH);//将fp_b_f1的高16位映射至64位宽中高32位的高16位上。
如图5,示出了1组FP64操作数的映射方式,一组FP64操作数包括一个第一操作数和一个第二操作数,1组FP64操作数映射得到4组16位的子操作数,分别为{A0,B0}、{A1,B1}、{A2,B2}、以及{A3,B3},A0,A1,A2,A3分别为拆分后的4个第一子操作数,B0,B1,B2,B3分别为拆分后的4个第二子操作数,对应的伪代码如下:
Sign_bit=63;//FP64操作数中第63位是符号位;
Exp_max=62;//FP64操作数中第62位是指数部分的最大位;
Exp_min=52;//FP64操作数的第52位是指数部分的最小位;
fp_a_s0=fp_a_d0[sign_bit];//将第一操作数fp_a_d0的第63位赋值给fp_a_s0;
fp_a_e0=fp_a_d0[Exp_max:Exp_min];//将第一操作数fp_a_d0的第52-62位赋值给fp_a_e0;
fp_a_f0=fp_a_d0[Exp_min-1:0];//将第一操作数fp_a_d0的第0-51位赋值给fp_a_f0;
fp_b_s0=fp_b_d0[sign_bit];//将第二操作数fp_b_d0的第63位赋值给fp_b_s0;
fp_b_e0=fp_b_d0[Exp_max:Exp_min];//将第二操作数fp_b_d0的第52-62位赋值给fp_b_e0;
fp_b_f0=fp_b_d0[Exp_min-1:0];//将第二操作数fp_b_d0的第0-51位赋值给fp_b_f0;
A0=pack_frac(fp_a_f0,SUB_PART_LL);//将fp_a_f0的低32位中的低16位映射至64位宽中低32位的低16位上;
A1=pack_frac(fp_a_f0,SUB_PART_LH);//将fp_a_f0的低32位中的高16位映射至64位宽中低32位的高16位上;
A2=pack_frac(fp_a_f0.SUB_PART_HL);//将fp_a_f0的高32位中的低16位映射至64位宽中高32位的低16位上;
A3=pack_frac(fp_a_f0.SUB_PART_HH);//将fp_a_f0的高32位中的高16位映射至64位宽中高32位的高16位上;
B0=pack_frac(fp_b_f0.SUB_PART_LL);//将fp_b_f0的低32位中的低16位映射至64位宽中低32位的低16位上;
B1=pack_frac(fp_b_f0.SUB_PART_LH);//将fp_b_f0的低32位中的低16位映射至64位宽中低32位的高16位上;
B2=pack_frac(fp_b_f0.SUB_PART_HL);//将fp_b_f0的高32位中的低16位映射至64位宽中高32位的低16位上;
B3=pack_frac(fp_b_f0.SUB_PART_HH);//将fp_b_f0的高32位中的高16位映射至64位宽中高32位的高16位上。
如图6,示出了16组FP16操作数的映射方式,16组FP16操作数映射得到16组16位的子操作数,分别为{A0,B0}、{A1,B1}、……、{A15,B15},其中,A0,A1,……,A15分别为拆分后的16个第一子操作数,B0,B1,……,B15分别为拆分后的16个第二子操作数;如图7,示出了4组FP32操作数的映射方式,4组FP32操作数映射得到8组16位的子操作数,分别为{A0,B0}、{A1,B1}、……、{A7,B7},其中,A0,A1,……,A7分别为拆分后的8个第一子操作数,B0,B1,……,B7分别为拆分后的8个第二子操作数。
还需要说明的是,以k2=16为例子说明,对输入信号与浮点运算模式的对应关系进行展示,如表2,示出了该例子中的三种运算模式下的输入信号和输出信号的结构图。
表2
Figure BDA0002617953490000121
Figure BDA0002617953490000131
需要说明的是,上述仅以16bit来举例说明。在不同实施例中,还可以采用64bit、32bit、16bit、8bit、4bit和2bit等其他比特数的可能性设计。
综上所述,本实施例提供的芯片上包括乘累加器,该乘累加器中设置了浮点通用单元;在不同的浮点运算模式下,该浮点通用单元可以将高位宽的浮点数拆分为低位宽的子操作数来进行乘累加运算,不同高位宽的浮点数可以拆分为不同数量的低位宽的子操作数,相应地,该浮点通用单元按照对浮点运算模式的选择,控制乘累加器中的乘法器与加法器进行拆分与重组,使乘累加器中运算电路成为与浮点运算模式对应的运算电路以进行乘累加运算,使得运算电路能够支持不同位宽的浮点数的乘累加运算,无需在芯片上集成至少两套硬件结构来实现对多种位宽的浮点数的乘累加运算的支持,且对乘法器与加法器可以重复利用,可以减少乘法器与加法器的设置数量,有效的减小了芯片的面积,减少了芯片运行时的功耗。
在一种示例性的可选实施例中,如图2,浮点通用单元220包括:第一运算单元222,第一运算单元222的输入端与数据提取单元221的输出端相连;第一运算单元222还包括乘法阵列与加法阵列,浮点运算模式所指示的运算电路中包括乘法阵列中的m2个乘法器、以及加法阵列中的G个加法器;
第一运算单元222,用于通过m2个乘法器对m个第一子操作数与m个第二子操作数进行乘法运算,得到m2个中间小数乘积;调用G个加法器对m2个中间小数乘积进行叠加与组合,得到小数乘积,G为正整数。
示例性的,如图8,第一运算单元222包括乘法阵列和加法阵列,在接收到第一选择端mode_1输入的选择信号时,将运算电路切换至上述选择信号对应的运算电路上,即对乘法阵列中的乘法器与加法阵列中的加法器进行拆分重组,构成上述选择信号对应的运算电路;其中,m组子操作数对应m2个乘法器。比如,如图9,选择信号0指示4组FP16操作数的运算,则在第一操作数与第二操作数进行小数部分的乘法运算时,从包括16个乘法器的乘法阵列中拆分出乘法器mul1、乘法器mul2、乘法器mul3与乘法器mul4这4个乘法器来对m个第一子操作数与m个第二子操作数进行乘法运算,最终得到小数乘积。
又比如,选择信号1指示2组FP32操作数的运算,则在第一操作数与第二操作数进行小数部分的乘法运算时,从包括16个乘法器的乘法阵列中拆分出乘法器mul1、乘法器mul2、乘法器mul3、乘法器mul4、乘法器mul5、乘法器mul6、乘法器mul7、与乘法器mul8这8个乘法器,从加法阵列中拆分出8个加法器,将8个乘法器与8个加法器组合成一个运算电路,采用上述运算电路对m个第一子操作数与m个第二子操作数进行乘法运算,最终得到小数乘积。
又比如,选择信号2指示1组FP64操作数的运算,则在第一操作数与第二操作数进行小数部分的乘法运算时,将乘法阵列中的16个乘法器与加法阵列中的26个加法器组合成一个运算电路,采用上述运算电路对m个第一子操作数与m个第二子操作数进行乘法运算,最终得到小数乘积。
示例性的,对一组FP32操作数的小数部分的乘法运算进行详细说明,如图10,将32位的第一操作数拆分后得到A0和A1两个第一子操作数,将32位的第二操作数拆分后得到B0和B1两个第二子操作数,使用4个乘法器计算得到A0B0、A0B1、A1B0、A1B1;将乘积A0B0的低13位A0B0_L作为R0输出;采用加法器FA1对乘积A0B0的高13位A0B0_H、乘积A1B0的低13位A1B0_L、乘积A0B1的低13位A0B1_L进行相加,将从低位开始的13位作为R1输出;采用加法器FA2对乘积A1B0的高13位A1B0_H、乘积A0B1的高13位A0B1_H、以及FA1的进位C1进行相加,将从低位开始的13位SUM2输入加法器FA3;采用加法器FA3对SUM2与乘积A1B1的低13位A1B1_L进行加和,输出从低位开始的13位R2;采用加法器FA4对乘积A1B1的高13位A1B1_H、FA2的进位C2、以及FA3的进位C3相加,输出和R3;最终得到第一操作数与第二操作数的小数部分的乘积{R3,R2,R1,R0}。同理,一组FP64操作数的小数部分的乘法运算的过程如图11所示。需要说明的是,在小数部分的乘法运算过程中,对各个乘法器输出中间小数乘积需要先拆分再累加,拆分位宽是(N1+P1)/2(或者是N2+P2);比如,在图10中,中间小数乘积的拆分的位宽为13,在图11中,中间小数乘积的拆分位宽为14。还需要说明的是,数据提取单元输出的是序列{(Ai-1,Bi-1),……,(A1,B1),(A0,B0)}。
需要说明的是,对m个第一子操作数与m个第二子操作数进行乘法运算时,需要使用G个加法器对中间小数乘积进行累加,加法器的个数G由m、以及加法器结构来决定。示例性的,以m=2,4来对各个中间小数乘积对应的加法子操作数的个数的规律进行说明,其中,加法子操作数包括对中间小数乘积的拆分后的子操作数、以及由于进位产生的子操作数中的至少一种;比如,如图10所示,中间小数乘积A0B0包括A0B0_H与A0B0_L两个加法子操作数,中间小数乘积A1B0包括A1B0_H与A1B0_L两个加法子操作数,中间小数乘积A0B1包括A0B1_H与A0B1_L两个加法子操作数,中间小数乘积A0B0_H、A1B0_L、A0B1_L进行相加会产生进位C1这一加法子操作数;在不考虑进位的情况下,如图12,m=2时,各级加法子操作数的个数分别为1,3,3,1;如图13,m=4时,各级加法子操作数的个数分别为1,3,5,7,7,5,3,1;即在不考虑进位的情况下,m个中间小数乘积对应有2m2个加法子操作数。
若考虑进位,如图12,在m=2时各级加法子操作数的个数分别为1,3,4,3;如图13,在m=4时各级加法子操作数的个数为1,3,6,10,12,11,8,5。在考虑进位的情况下,若采用半加器结构的加法器对加法子操作数进行累加,m=2时需要7个加法器,m=4时需要48个加法器;若采用全加器结构的加法器对加法子操作数进行累加,m=2时需要4个加法器,m=4时需要26个加法器。在考虑进位的前提下,若采用半加器结构的加法器,各级所需的加法器个数等于各级的加法子操作数的个数减去1;若采用全加器结构的加法器,各级所需的加法器个数等于各级的加法子操作数的个数除以2向下取整;如表3,结合图12与图13进行如下说明,在考虑进位的情况下,当m=2时,半加器结构的加法器个数=(1-1)+(3-1)+(4-1)+(3-1)=7,全加器结构的加法器个数=floor(1/2)+floor(3/2)+floor(4/2)+floor(3/2)=4;当m=4时,半加器结构的加法器个数=(1-1)+(3-1)+(6-1)+(10-1)+(12-1)+(11-1)+(8-1)+(5-1)=48,全加器结构的加法器个数=floor(1/2)+floor(3/2)+floor(6/2)+floor(10/2)+floor(12/2)+floor(11/2)+floor(8/2)+floor(5/2)=26,其中,floor是向下取整函数;另外,第1级不需要进行加法运算,因此,第一级所需的加法器个数为0。
表3
m 2 4
半加器结构的加法器个数 7 48
全加器结构的加法器个数 4 26
还需要说明的是,图10与图11所示的是以采用全加器结构的加法器来实现第一操作数与第二操作数的小数部分乘法运算的运算电路结构。另外,在本实施例所涉及的加法运算中所使用的加法器可以是半加器结构、或者全加器结构、或者是其他结构,本实施例中不对加法器的实现结构进行限定。
综上所述,本实施例提供的芯片上乘累加器包括的乘法器与加法器能够进行拆分重组,构成支持与浮点运算模式对应类型的浮点运算的运算电路,以实现对第一操作数与第二操作数的小数部分的计算,为小数部分的乘法运算这个部分赋予了可伸缩性,能够对高位宽的浮点数的小数部分进行拆分计算,进而使该乘累加器能够支持多个位宽的浮点数的乘法运算。
在一些示例性的可选实施例中,浮点通用单元220包括:第一映射单元223、第二运算单元224与第二映射单元225,如图2,第一映射单元223的输入端与第一运算单元222的输出端相连;第二运算单元224的输入端与数据提取单元221的输出端相连,第二运算单元224的输出端与第二映射单元225的输入端相连;第二映射单元225的输出端与输出单元240的输入端相连;
第一映射单元223,用于将小数乘积按照第一指定格式映射至寄存器中;
第二运算单元224,用于从寄存器中读取第一指定格式的小数乘积,基于第一操作数的符号位与指数部分、以及第二操作数的符号位与指数部分,对第一指定格式的小数乘积扩展生成第二指定格式的第一中间结果;基于第三操作数的符号位与指数部分,对第三操作数的小数部分扩展生成第二指定格式的第二中间结果;
第二映射单元225,用于将第一中间结果与第二中间结果相加得到浮点数和。
可选地,小数乘积包括原整数部分I和原小数部分M;第一映射单元223,用于按照整数裁剪位宽ε对原整数部分I进行裁剪,得到裁剪后的整数部分I’;按照小数裁剪位宽з对原小数部分M进行裁剪,得到裁剪后的小数部分M’;将裁剪后的整数部分I’与所述裁剪后的小数部分M’映射至寄存器的坐标(X,Y)上,得到第一指定格式的小数乘积。示例性的,如图14与图15,示出了第i组操作数对应的小数乘积的裁剪与映射过程,裁剪公式如下:
Ii-1’=Ii-1i-1;------(4)
Mi-1’=Mi-1i-1;------(5)
0≤εi-1<Ii-1;εi-1为整数;------(6)
0≤зi-1<Mi-1;зi-1为整数;------(7)
映射公式如下:
Xi-1=Ii-1’+Offseti-1;------(8)
Yi-1=Offseti-1-Mi-1’;------(9)
Si-1=2e-1-1+Ii-1’+Offseti-1;------(10)
Ti-1=Offseti-1–(2e-1–2+Mi-1’);------(11)
其中,Offseti-1是指第i组操作数对应的位置偏移值,该位置偏移值是由于同时对至少两组操作数进行乘累加运算时,需要将至少两个小数乘积映射至不同的位置,以使小数乘积两两之间不会出现部分数据重叠的现象;e是第i组操作数的指数部分的位宽,寄存器上的预留空间(Si-1,Ti-1)是为第i组操作数对应的小数乘积预留的空间,(Xi-1,Yi-1)与位于预留空间(Si-1,Ti-1)中。
上述整数裁剪位宽ε与小数裁剪位宽з是基于需求设置的,可选地,不同位宽的浮点数在进行乘累加运算过程中对应使用的上述整数裁剪位宽ε与小数裁剪位宽з不同或者相同。比如,FP16操作数对应的整数裁剪位宽ε与小数裁剪位宽з,不同于FP64操作数对应的整数裁剪位宽ε与小数裁剪位宽з。
可选地,在i组操作数进行乘累加运算的过程中,不同组操作数对应使用的整数裁剪位宽ε与小数裁剪位宽з不同或者相同。比如,在同时计算4组FP16操作数的浮点运算模式下,第1组FP16操作数对应的整数裁剪位宽ε与小数裁剪位宽з,不同于第2组FP16操作数对应的整数裁剪位宽ε与小数裁剪位宽з。需要说明的是,对小数乘积的裁剪是为了得到数据的有效范围,或者符合具体应用需求,本实施例中不对裁剪范围进行限制。
可选地,第二映射单元225包括K个基本运算单元,相邻两个基本运算单元之间采用级联方式连接,K为正整数;
第二映射单元225,用于将第一中间结果分解为K个第一数值部分,将第二中间结果分别为K个第二数值部分,且与K个第一数值部分与K个第二数值部分对应生成K个信号值,其中,第t个信号值用于指示第t个基本运算单元与第t+1个基本运算单元之间的连接关系,t为小于或者等于K的正整数;按照操作位宽上数值位置的对应关系将K个第一数值部分与K个第二数值部分对应映射至寄存器的K个存储单元中,得到K个存储单元中的K组数值部分;将K组数值部分读取至K个基本运算单元中,且将K个信号值对应输入K个基本运算单元中;通过K个基本运算单元对K组数值部分进行叠加与组合,得到浮点数和。
示例性的,基本运算单元所支持的操作位宽为L,寄存器上的预留空间为(S,T);对T与S之间的差值除以L的商值向上取整,得到寄存器上的K个存储单元,其中,S是预留空间的一个边界坐标,T是预留空间的另一个边界坐标,L、T、S为正整数;示例性的,可以采用以下公式来表示K:
K=ceiling((S-T)/L);------(12)
其中,ceiling()表示向上取整。
可选地,第二映射单元225按照公式(10)与(11)可以计算得到预留空间(S,T),也就是说,第一位宽k1的操作数中指数部分的位宽为e,第一指定格式的小数乘积包括整数部分I’和小数部分M’,第一操作数与第二操作数的小数乘积在寄存器中的位置偏移值为Offset;将2e-1、I’与Offset三者的和减去1得到S,将Offset与2的和减去2e-1与M’的和得到的差确定为T,得到预留空间(S,T)。
示例性的,对第二运算单元224确定第一中间结果与第二中间结果进行说明,如图16,第二运算单元224中包括坐标读取单元11、数据获取单元12、符号扩展单元13、指数译码单元14、伸缩左移单元15、伸缩右移单元16、以及数据选择单元17;坐标读取单元11读取第一指定格式的小数乘积在寄存器中的坐标{Xi-1,Yi-1};数据获取单元12按照上述坐标{Xi-1,Yi-1}读取第一指定格式的小数乘积;符号扩展单元13基于第一操作数与第二操作数的符号位确定出第一指定格式的小数乘积的符号位,比如,第一操作数的符号位为1,第二操作数的符号位为1,在确定出小数乘积的符号位为0,其中,符号位的0表示正,符号位的1表示负;指数译码单元14对第一操作数与第二操作数的已编码的指数部分分别进行译码,得到译码后的两个指数E1与E2,再结合Offseti-1计算出第一指定格式的小数乘积对应的指数E,指数E是有符号数,若指数E大于0则进入伸缩左移单元,若指数E小于0则进入伸缩右移单元;伸缩左移单元15根据指数E对第一指定格式的小数乘积在操作位上进行左移,或者,伸缩右移单元16根据指数E对第一指定格式的小数乘积在操作位上进行右移动,即确定小数乘积的小数点的位置,生成第二指定格式的小数乘积,即第一中间结果。
如图17,第二运算单元224中还包括数据合并单元21、符号扩展单元22、指数译码单元23、伸缩左移单元24、伸缩右移单元25、以及数据选择单元26;数据合并单元21对第三操作数的指数部分Fp_c_d[i-1]_E与小数部分Fp_c_d[i-1]_M进行合并,得到无符号的中间操作值;符号扩展单元22将第三操作数的符号位Fp_c_d[i-1]_S为无符号的中间操作数进行符号位扩展,即为无符号的中间操作数增加一个符号位,将Fp_c_d[i-1]_S赋值给上述增加的符号位,比如,第三操作数的符号位为1,则在无符号的中间操作数的增加的符号位上赋值1,最终得到一个有符号的中间操作数;指数译码单元23对第三操作数的已编码的指数部分进行译码,得到译码后的指数E3,指数E3是有符号数,若指数E3大于0则进入伸缩左移单元,若指数E3小于0则进入伸缩右移单元;伸缩左移单元24根据指数E3对有符号的中间操作数在操作位上进行左移,或者,伸缩右移单元25根据指数E3对有符号的中间操作数操作位上进行右移动,即确定第三操作数的小数点位置,生成第二指定格式的第三操作数,即第二中间结果。
示例性的,上述第二指定格式的小数乘积与第三操作数是定点数据,小数乘积与第三操作数的整数位置、小数点位置、以及小数位置是一一对应的关系。比如,如图18,第二映射单元225在确定将32位的第一中间结果与第二中间结果分别分解,得到16位的第一数值部分AH与AL、以及16位的第二数值部分BH与BL,将AH与BH对应存储至第2个存储单元、以及将AL与BL对应存储至第1个存储单元,且生成相邻数值部分之间关系来表示相邻基本运算单元之间的级联关系,比如,若AH与AL是将一个第二指定格式的小数乘积分解得到的,则对应的上述级联关系为连接,可以用01表示,若AH与AL是将两个第二指定格式的小数乘积分解得到的,则对应的上述级联关系为断开,可以用00表示;采用基本运算单元P2与P1两个来计算第一中间结果与第二中间结果的和,将第1个存储单元中的AL与BL读取至P1中进行加法计算,将第2个存储单元中的AH与BH读取至P2中进行加法计算,需要说明的是,级联关系还指示了进位关系与输出关系,若P2与P1之间处于连接状态、且P1中AL与BL的加法和存在进位则向P2进位,由P2进行进位计算,且最终输出拼接在一起的一个值fix_outk-1(即浮点数和);若P2与P1之间处于断开状态最终输出的两个浮点数和,如图19所示。
综上所述,本实施例提供的芯片中的乘累加器在进行浮点运算的过程中,首先计算出第一操作数与第二操作数的小数部分的小数乘积,对小数乘积进行第一次映射生成符合第一指定格式的小数乘积,以得到所需的小数乘积;之后对小数乘积与第三操作数的小数部分进行符号扩展与位置移动,以得到符号位、整数位、小数位能够一一对应的第一中间结果与第二中间结果,对统一格式的上述第一中间结果与第二中间结果进行第二次映射,按照基本运算单元的操作位宽将第一中间结果与第二中间结果分解,通过级联的K个基本运算单元来计算出最终的浮点数和。该芯片通过上述两次运算与两次映射实现了采用一套硬件结构对多种位宽的浮点数进行乘累加运算的目标。
还需要说明的是,浮点数和为定点格式,指定数据格式包括定点格式或者浮点格式;乘累加器包括第二选择端out_mode;输出单元240,用于按照第二选择端所指示的定点格式将定点格式的浮点数和输出为运算结果;
或者,输出单元240,用于按照第二选择端所指示的浮点格式将定点格式的浮点数和转换为浮点格式的浮点数和,将浮点格式的浮点数和输出为运算结果。示例性的,如图20,输出单元240包括定点到浮点的转换单元241和数据选择单元242;如表4,若out_mode输入的信号为0,则指定数据格式为定点格式,数据选择单元242选择直接输出K个基本运算单元输入的i个定点格式的浮点数和{fix_out[i-1]K-1,……,fix_out[i-1]0},……,{fix_out[0]K-1,……,fix_out[0]0},即得到i组操作数乘累加运算后的i个定点格式的浮点数和data_out{di-1,……,d0};若out_mode输入的信号为1,则指定数据格式为浮点格式,由转换单元421将上述{fix_out[i-1]K-1,……,fix_out[i-1]0},……,{fix_out[0]K-1,……,fix_out[0]0}这i个定点格式的浮点数和转换为i个浮点格式的浮点数和,由数据选择单元242选择输出上述i个浮点格式的浮点数和data_out{di-1,……,d0}。
表4
out_mode 指定数据格式
0 定点格式
1 浮点格式
综上所述,本实施例提供的芯片上乘累加单元中增加了输出数据格式的选择单元,能够自主选择输出的数据格式。
图21是本申请的一个示例性实施例提供的浮点运算的控制方法的流程图,该方法应用于如图1至图20任一所示的芯片中,该芯片包括乘累加器,该方法包括:
步骤301,接收第一选择信号。
乘累加器包括第一选择端,乘累加器支持至少两类位宽的浮点数的乘累加运算,第一选择端用于选择浮点运算模式。乘累加器通过第一选择端接收第一选择信号,第一选择信号用于指示浮点运算模式,比如,第一选择信号用四位二进制数表示,第一选择信号“0000”指示的是同时支持4组FP16操作数运算的浮点运算模式;或者,第一选择信号“0001”指示的是同时支持2组FP32操作数运算的浮点运算模式;或者,第一选择信号“0010”指示的是同时支持1组FP64操作数运算的浮点运算模式,等等。
步骤302,控制乘累加器中的运算电路处于与第一选择信号所指示浮点运算模式对应的运算电路。
其中,上述浮点运算模式支持第一位宽k1的浮点数的乘累加运算。芯片控制乘累加器中的运算电路处于与第一选择信号所指示浮点运算模式对应的运算电路,也就是说,芯片确定出乘累加器处于上述浮点运算模式时使用的各个运算单元的连接状态,比如,乘累加器中包括用于小数部分的乘法运算的乘法阵列和加法阵列,芯片从乘累加器的乘法阵列和加法阵列中确定出浮点运算模式对应使用的乘法器与加法器,且确定出上述乘法器之间、乘法器与加法器之间、以及加法器与加法器之间的对应连接关系,得出浮点运算单元对应的运算电路,以在操作数输入后,能够采用正确的运算电路进行浮点数的乘累加运算。
步骤303,接收第一位宽k1的第一操作数、第二操作数与第三操作数。
乘累加单元包括浮点数的输入端和数据提取单元,上述浮点数的输入端与数据提取单元的输入端相连,通过上述浮点数的输入端将第一位宽k1的第一操作数、第二操作数和第三操作数输入数据提取单元,该数据提取单元用于分别提取第一操作数、第二操作数与第三操作数中的符号位、指数部分和小数部分。该数据提取单元还用于对第一操作数与第二操作数的小数部分的拆分,将高位宽浮点数的小数部分拆分为乘法器支持的操作位宽的子操作数,比如,乘法器所支持的操作位宽为16比特,若N1=24,N2=11,m=2,由公式(1)-(3)可以计算得到P1=P2=2,则可以将32比特的第一操作数的小数部分拆分为两个13比特的第一子操作数;又比如,乘法器所支持的操作数位宽为16位,若N1=53,N2=11,m=4,由公式(1)-(3)可以计算得到P1=P2=3,则可以将64比特的第一操作数的小数部分拆分为两个14比特的第一子操作数。
步骤304,将第一操作数的小数部分划分为第二位宽k2的m个第一子操作数、且将第二操作数的小数部分划分为第二位宽k2的m个第二子操作数。
可选地,第二位宽k2=k1/m,k2与k1均为2的倍数,m为正整数。示例性的,如图3,可以将4组FP16操作数映射得到4组16位的子操作数,每组FP16操作数包括一个第一操作数和一个第二操作数,上述映射得到的4组16位的子操作数分别为{A0,B0}、{A1,B1}、{A2,B2}、以及{A3,B3},A0,A1,A2,A3分别为拆分后的4个第一子操作数,B0,B1,B2,B3分别为拆分后的4个第二子操作数。
步骤305,基于m个第一子操作数与m个第二子操作数进行小数部分的乘法运算,得到小数乘积。
示例性的,乘累加器中包括第一运算单元,该浮点运算模式对应的第一运算单元中的运算电路中包括m2个乘法器与G个加法器;芯片通过m2个乘法器对m个第一子操作数与m个第二子操作数进行乘法运算,得到m2个中间小数乘积;调用G个加法器对m2个中间小数乘积进行叠加与组合,得到小数乘积,G为正整数。
比如,如图10所示的一组FP32操作数的小数部分的乘法运算,将32位的第一操作数拆分后得到A0和A1两个第一子操作数,将32位的第二操作数拆分后得到B0和B1两个第二子操作数;示例性的,m=2,N1=24,N2=11,采用公式(1)-(3)可以计算得P1=2,P2=2,因此,32位第一/第二操作数的拆分位宽可以是(N1+P1)/2=N2+P2=13;进一步地,第一运算单元使用4个乘法器计算得到A0B0、A0B1、A1B0、A1B1,将乘积A0B0的低13位A0B0_L作为R0输出;采用加法器FA1对乘积A0B0的高13位A0B0_H、乘积A1B0的低13位A1B0_L、乘积A0B1的低13位A0B1_L进行相加,将从低位开始的13位作为R1输出;采用加法器FA2对乘积A1B0的高13位A1B0_H、乘积A0B1的高13位A0B1_H、以及FA1的进位C1进行相加,将从低位开始的13位SUM2输入加法器FA3;采用加法器FA3对SUM2与乘积A1B1的低13位A1B1_L进行加和,输出从低位开始的13位R2;采用加法器FA4对乘积A1B1的高13位A1B1_H、FA2的进位C2、以及FA3的进位C3相加,输出和R3;最终得到第一操作数与第二操作数的小数部分的乘积{R3,R2,R1,R0}。
步骤306,基于第一操作数的符号位与指数部分、第二操作数的符号位与指数部分、以及小数乘积,确定出第一操作数与第二操作数的浮点数乘积;将浮点数乘积与第三操作数进行加法运算,得到浮点数和。
乘累加器中还包括第一映射单元、第二运算单元和第二映射单元;芯片通过第一映射单元将小数乘积按照第一指定格式映射至寄存器中;通过第二运算单元从寄存器中读取第一指定格式的小数乘积,基于第一操作数的符号位与指数部分、以及第二操作数的符号位与指数部分,对第一指定格式的小数乘积扩展生成第二指定格式的第一中间结果(即浮点数乘积);基于第三操作数的符号位与指数部分,对第三操作数的小数部分扩展生成第二指定格式的第二中间结果;通过第二映射单元将第一中间结果与第二中间结果相加得到浮点数和。
可选地,小数乘积包括原整数部分和原小数部分;对于小数乘积的映射,第一映射单元按照整数裁剪位宽对原整数部分进行裁剪,得到裁剪后的整数部分;按照小数裁剪位宽对原小数部分进行裁剪,得到裁剪后的小数部分;将裁剪后的整数部分与裁剪后的小数部分映射至寄存器的坐标上,得到第一指定格式的小数乘积。示例性的,第一映射单元采用上述公式(4)-(7)计算出裁剪后的小数部分和整数部分;再采用上述公式(10)-(11)确定出寄存器中未该小数乘积预留的存储空间(即预留空间),采用上述公式(8)-(9)将上述裁剪后的小数部分和整数部分映射至上述预留空间内。
可选地,乘累加器包括K个基本运算单元,相邻两个基本运算单元之间采用级联方式连接,K为正整数;对于第一中间结果与第二中间结果的加和计算,第二映射单元将第一中间结果分解为K个第一数值部分,将第二中间结果分别为K个第二数值部分,且与K个第一数值部分、K个第二数值部分对应生成K个信号值,其中,第t个信号值用于指示第t个基本运算单元与第t+1个基本运算单元之间的连接关系,t为小于或者等于K的正整数;按照操作位宽上数值位置的对应关系将K个第一数值部分与K个第二数值部分对应映射至寄存器的K个存储单元中,得到K个存储单元中的K组数值部分;将K组数值部分读取至K个基本运算单元中,且将K个信号值对应输入K个基本运算单元中;通过K个基本运算单元对K组数值部分进行叠加与组合,得到浮点数和。
示例性的,参考图18和图19,第二映射单元将32位的第一中间结果与第二中间结果分别分解,得到16位的第一数值部分AH与AL、以及16位的第二数值部分BH与BL,将AH与BH对应存储至第2个存储单元、以及将AL与BL对应存储至第1个存储单元,且生成相邻数值部分之间关系来表示相邻基本运算单元之间的级联关系,比如,若AH与AL是将一个第二指定格式的小数乘积分解得到的,则对应的上述级联关系为连接,可以用01表示,若AH与AL是将两个第二指定格式的小数乘积分解得到的,则对应的上述级联关系为断开,可以用00表示;采用两个基本运算单元P2与P1来计算第一中间结果与第二中间结果的和,将第1个存储单元中的AL与BL读取至P1中进行加法计算,将第2个存储单元中的AH与BH读取至P2中进行加法计算,若P2与P1之间的级联关系为连接,可以由P2进行进位计算,最终输出拼接在一起的一个值fix_out0(即浮点数和);若P2与P1之间的级联关系为断开,最终并列输出的两个浮点数和fix_out1,fix_out0
其中,上述第一指定格式的小数乘积是指第一操作数与第二操作数的小数部分的乘积;第二指定格式的小数乘积是第一操作数与第二操作数的乘积。示例性的,有符号的第一操作数NA=(-1)Sa*2Ea*Ma,有符号的第二操作数NB=(-1)Sb*2Eb*Mb,第一指定格式的小数乘积是指Ma与Mb的乘积Ma*Mb,第二指定格式的小数乘积是指NA与NB的乘积(-1)(Sa+Sb)*2(Ea +Eb)*(Ma*Mb)。
步骤307,根据浮点数和输出指定数据格式的运算结果。
其中,浮点数和为定点格式。可选地,指定数据格式包括定点格式或者浮点格式;接收第二选择信号,第二选择信号用于指示指定数据格式是定点格式或者浮点格式;芯片按照第二选择信号所指示的定点格式将定点格式的浮点数和作为运算结果输出;或者,按照第二选择信号所指示的浮点格式将定点格式的浮点数和转换为浮点格式的浮点数和,将浮点格式的浮点数和作为运算结果输出。
综上所述,本实施例提供的浮点运算的控制方法,在不同的浮点运算模式下,芯片可以将高位宽的浮点数拆分为低位宽的子操作数来进行乘累加运算,不同高位宽的浮点数可以拆分为不同数量的低位宽的子操作数,相应地,按照对浮点运算模式的选择,控制乘累加器中的乘法器与加法器进行拆分与重组,使乘累加器中的运算电路成为与浮点运算模式对应的运算电路以进行乘累加运算,使得运算电路能够支持不同位宽的浮点数的乘累加运算,无需在芯片上集成至少两套硬件结构来实现对多种位宽的浮点数的乘累加运算的支持,且对乘法器与加法器可以重复利用,可以减少乘法器与加法器的设置数量,进而有效的减小了芯片的面积,减少了芯片运行时的功耗。
请参考图22,其示出了本申请一个实施例提供的电子设备的结构示意图。该电子设备用于实施上述实施例中提供的浮点运算的控制方法。可选的,电子设备包括智能手机、服务器、物联网(Internet of Things,IoT)设备、云服务器、端侧设备中的至少一种,具体来讲:
电子设备400可以包括RF(Radio Frequency,射频)电路410、包括有一个或一个以上计算机可读存储介质的存储器420、输入单元430、显示单元440、传感器450、音频电路460、WiFi(Wireless Fidelity,无线保真)模块470、包括有一个或者一个以上处理核心的处理器480、以及电源490等部件。本领域技术人员可以理解,图22中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路410可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器480处理;另外,将涉及上行的数据发送给基站。通常,RF电路410包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路410还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobile communication,全球移动通讯系统)、GPRS(General Packet Radio Service,通用分组无线服务)、CDMA(CodeDivision Multiple Access,码分多址)、WCDMA(Wideband Code Division MultipleAccess,宽带码分多址)、LTE(Long Term Evolution,长期演进)、电子邮件、SMS(ShortMessaging Service,短消息服务)等。
存储器420可用于存储软件程序以及模块,处理器480通过运行存储在存储器420的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备400的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器420还可以包括存储器控制器,以提供处理器480和输入单元430对存储器420的访问。
输入单元430可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元430可包括图像输入设备431以及其他输入设备432。图像输入设备431可以是摄像头,也可以是光电扫描设备。除了图像输入设备431,输入单元430还可以包括其他输入设备432。具体地,其他输入设备432可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元440可用于显示由用户输入的信息或提供给用户的信息以及电子设备400的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元440可包括显示面板441,可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板441。
电子设备400还可包括至少一种传感器450,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板441的亮度,接近传感器可在电子设备400移动到耳边时,关闭显示面板441和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于电子设备400还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路460、扬声器461,传声器462可提供用户与电子设备400之间的音频接口。音频电路460可将接收到的音频数据转换后的电信号,传输到扬声器461,由扬声器461转换为声音信号输出;另一方面,传声器462将收集的声音信号转换为电信号,由音频电路460接收后转换为音频数据,再将音频数据输出处理器480处理后,经RF电路410以发送给比如另一电子设备,或者将音频数据输出至存储器420以便进一步处理。音频电路460还可能包括耳塞插孔,以提供外设耳机与电子设备400的通信。
WiFi属于短距离无线传输技术,电子设备400通过WiFi模块470可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图22示出了WiFi模块470,但是可以理解的是,其并不属于电子设备400的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器480是电子设备400的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器420内的软件程序和/或模块,以及调用存储在存储器420内的数据,执行电子设备400的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器480可包括一个或多个处理核心;优选的,处理器480可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器480中。
电子设备400还包括如上述图1至图20任一所示的包括乘累加器的芯片482。该包括乘累加器的芯片482可以实现如上述实施例提供浮点运算的控制方法。图22给出了一种包括乘累加器的芯片482在电子设备400中的连接方式,但包括乘累加器的芯片482在电子设备400中的连接方法不仅限于上述一种方法,还可以与根据需要实现的功能做出适应性的连接,比如,当需要包括乘累加器的芯片482完成图像的处理时,可以直接与图像输入设备431相连。
电子设备400还包括给各个部件供电的电源490(比如电池),优选的,电源可以通过电源管理系统与处理器480逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源490还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,电子设备400还可以包括蓝牙模块等,在此不再赘述。
图23示出了本申请一个实施例提供的服务器的结构示意图。该服务器用于实施上述实施例中提供的浮点运算的控制方法。具体来讲:
所述服务器500包括CPU(Central Processing Unit,中央处理器)501、包括RAM(Random Access Memory,随机存取存储器)502和ROM(Read-Only Memory,只读存储器)503的系统存储器504,以及连接系统存储器504和中央处理单元501的系统总线505。所述服务器500还包括帮助计算机内的各个器件之间传输信息的基本I/O(Input/Output,输入/输出)506,和用于存储操作系统513、应用程序514和其他程序模块515的大容量存储设备507。
所述基本输入/输出系统506包括有用于显示信息的显示器508和用于用户输入信息的诸如鼠标、键盘之类的输入设备509。其中所述显示器508和输入设备509都通过连接到系统总线505的输入输出控制器510连接到中央处理单元501。所述基本输入/输出系统506还可以包括输入输出控制器510以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器510还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备507通过连接到系统总线505的大容量存储控制器(未示出)连接到中央处理单元501。所述大容量存储设备507及其相关联的计算机可读介质为服务器500提供非易失性存储。也就是说,所述大容量存储设备507可以包括诸如硬盘或者CD-ROM(Compact Disc Read-Only Memory,只读光盘)驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM(Erasable Programmable Read-Only Memory,可擦除可编程只读存储器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存(Flash Memory)或其他固态存储其技术,CD-ROM、DVD(Digital VersatileDisc,数字通用光盘)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器504和大容量存储设备507可以统称为存储器。
根据本申请的各种实施例,所述服务器500还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器500可以通过连接在所述系统总线505上的网络接口单元511连接到网络512,或者说,也可以使用网络接口单元511来连接到其他类型的网络或远程计算机系统(未示出)。
所述服务器500还包括如图1至图20任一所示的包括乘累加器的芯片516,乘累加器516与服务器500中的其他模块通过系统总线连接。该包括乘累加器的芯片516可以实现如上述实施例提供的浮点运算的控制方法。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (17)

1.一种包括乘累加器的芯片,其特征在于,所述乘累加器包括:浮点数的输入端、第一选择端、浮点通用单元与输出单元;所述浮点通用单元与所述浮点数的输入端、所述第一选择端分别相连,所述浮点通用单元的输出端与所述输出单元的输入端分别相连;
所述浮点通用单元,用于接收所述浮点数的输入端输入的第一位宽k1的第一操作数、第二操作数与第三操作数;按照所述第一选择端所指示的浮点运算模式将所述第一操作数的小数部分划分为第二位宽k2的m个第一子操作数、且将所述第二操作数的小数部分划分为所述第二位宽k2的m个第二子操作数,所述第二位宽k2=k1/m,m为正整数;基于所述m个第一子操作数与所述m个第二子操作数进行小数部分的乘法运算,得到小数乘积;基于所述第一操作数的符号位与指数部分、所述第二操作数的符号位与指数部分、以及所述小数乘积,确定出所述第一操作数与所述第二操作数的浮点数乘积;将所述浮点数乘积与所述第三操作数进行加法运算,得到浮点数和;
所述输出单元,用于根据所述浮点数和输出指定数据格式的运算结果。
2.根据权利要求1所述的芯片,其特征在于,不同的选择信号对应不同的浮点运算模式;所述浮点通用单元包括:数据提取单元,所述数据提取单元与所述浮点数的输入端、所述第一选择端分别相连;
所述数据提取单元,用于确定出与所述第一选择端输入的选择信号对应的浮点运算模式,所述浮点运算模式所指示的运算电路用于对所述第一位宽k1的浮点数进行乘累加运算,所述第一位宽k1对应浮点数的拆分个数m;从所述第一操作数的小数部分的低位开始按照所述第二位宽k2进行划分,得到所述m个第一子操作数;从所述第二操作数的小数部分的低位开始按照所述第二位宽k2进行划分,得到所述m个第二子操作数。
3.根据权利要求2所述的芯片,其特征在于,所述浮点运算模式所支持的所述第一位宽k1的浮点数的小数部分对应位宽N1,所述乘累加器所支持的最小位宽的操作数的小数部分对应位宽N2;计算得到所述N1除以m的余数,将m减去所述余数得到的差值确定为第一参数P1;计算得到所述N1与所述P1的和除以m的商值,将所述商值减去所述N2的差值确定为第二参数P2;若所述P1与所述P2均为非负整数,则将m确定为所述第一位宽k1的浮点数对应的拆分个数。
4.根据权利要求2所述的芯片,其特征在于,所述浮点通用单元包括:第一运算单元,所述第一运算单元的输入端与所述数据提取单元的输出端相连;所述第一运算单元还包括乘法阵列与加法阵列,所述浮点运算模式所指示的运算电路中包括所述乘法阵列中的m2个乘法器、以及所述加法阵列中的G个加法器;
所述第一运算单元,用于通过所述m2个乘法器对所述m个第一子操作数与所述m个第二子操作数进行乘法运算,得到m2个中间小数乘积;调用所述G个加法器对所述m2个中间小数乘积进行叠加与组合,得到所述小数乘积,G为正整数。
5.根据权利要求4所述的芯片,其特征在于,所述浮点通用单元包括:第一映射单元、第二运算单元与第二映射单元;所述第一映射单元的输入端与所述第一运算单元的输出端相连,所述第一映射单元的输出端与所述第二运算单元相连;所述第二运算单元的输入端与所述数据提取单元的输出端相连、所述第二运算单元的输出端与所述第二映射单元的输入端相连;所述第二映射单元的输出端与所述输出单元的输入端相连;
所述第一映射单元,用于将所述小数乘积按照第一指定格式映射至寄存器中;
所述第二运算单元,用于从所述寄存器中读取所述第一指定格式的小数乘积,基于所述第一操作数的符号位与指数部分、以及所述第二操作数的符号位与指数部分,对所述第一指定格式的小数乘积扩展生成第二指定格式的第一中间结果;基于所述第三操作数的符号位与指数部分,对所述第三操作数的小数部分扩展生成所述第二指定格式的第二中间结果;
所述第二映射单元,用于将所述第一中间结果与所述第二中间结果相加得到所述浮点数和。
6.根据权利要求5所述的芯片,其特征在于,所述第二映射单元包括K个基本运算单元,相邻两个基本运算单元之间采用级联方式连接,K为正整数;
所述第二映射单元,用于将所述第一中间结果分解为K个第一数值部分,将所述第二中间结果分解为K个第二数值部分,且与所述K个第一数值部分、所述K个第二数值部分对应生成K个信号值,其中,第t个信号值用于指示第t个基本运算单元与第t+1个基本运算单元之间的连接关系,t为小于或者等于K的正整数;按照操作位宽上数值位置的对应关系将所述K个第一数值部分与所述K个第二数值部分对应映射至所述寄存器的K个存储单元中,得到所述K个存储单元中的K组数值部分;将所述K组数值部分读取至所述K个基本运算单元中,且将所述K个信号值对应输入所述K个基本运算单元中;通过所述K个基本运算单元对所述K组数值部分进行叠加与组合,得到所述浮点数和。
7.根据权利要求6所述的芯片,其特征在于,所述基本运算单元所支持的操作位宽为L,所述寄存器上的预留空间为(S,T);对所述T与所述S之间的差值除以所述L的商值向上取整,得到所述寄存器上的所述K个存储单元,其中,S是所述预留空间的一个边界坐标,T是所述预留空间的另一个边界坐标,L、T、S为正整数。
8.根据权利要求7所述的芯片,其特征在于,所述第一位宽k1的操作数中指数部分的位宽为e,所述第一指定格式的小数乘积包括整数部分I’和小数部分M’,所述第一操作数与所述第二操作数的小数乘积在所述寄存器中的位置偏移值为Offset;将2e-1、I’与Offset三者的和减去1得到S,将Offset与2的和减去2e-1与M’的和得到的差确定为T,得到所述预留空间(S,T)。
9.根据权利要求5所述的芯片,其特征在于,所述小数乘积包括原整数部分和原小数部分;
第一映射单元,用于按照整数裁剪位宽对所述原整数部分进行裁剪,得到裁剪后的整数部分;按照小数裁剪位宽对所述原小数部分进行裁剪,得到裁剪后的小数部分;将所述裁剪后的整数部分与所述裁剪后的小数部分映射至所述寄存器的坐标上,得到所述第一指定格式的小数乘积。
10.根据权利要求1至9任一所述的芯片,其特征在于,所述浮点数和为定点格式,所述指定数据格式包括定点格式或者浮点格式;所述乘累加器包括第二选择端;
所述输出单元,用于按照所述第二选择端所指示的定点格式将所述定点格式的浮点数和输出为所述运算结果;
或者,
所述输出单元,用于按照所述第二选择端所指示的浮点格式将所述定点格式的浮点数和转换为所述浮点格式的浮点数和,将所述浮点格式的浮点数和输出为所述运算结果。
11.一种终端,其特征在于,所述终端中包括如权利要求1至10任一所述的芯片。
12.一种浮点运算的控制方法,其特征在于,应用于包括乘累加器的芯片中,所述方法包括:
接收第一选择信号;
控制所述乘累加器中的运算电路处于与所述第一选择信号所指示浮点运算模式对应的运算电路,所述浮点运算模式支持第一位宽k1的浮点数的乘累加运算;
接收所述第一位宽k1的第一操作数、第二操作数与第三操作数;
将所述第一操作数的小数部分划分为第二位宽k2的m个第一子操作数、且将所述第二操作数的小数部分划分为所述第二位宽k2的m个第二子操作数,所述第二位宽k2=k1/m,m为正整数;
基于所述m个第一子操作数与所述m个第二子操作数进行小数部分的乘法运算,得到小数乘积;
基于所述第一操作数的符号位与指数部分、所述第二操作数的符号位与指数部分、以及所述小数乘积,确定出所述第一操作数与所述第二操作数的浮点数乘积;将所述浮点数乘积与所述第三操作数进行加法运算,得到浮点数和;
根据所述浮点数和输出指定数据格式的运算结果。
13.根据权利要求12所述的方法,其特征在于,所述运算电路中包括m2个乘法器与G个加法器;
所述基于所述m个第一子操作数与所述m个第二子操作数进行小数部分的乘法运算,得到小数乘积,包括:
通过所述m2个乘法器对所述m个第一子操作数与所述m个第二子操作数进行乘法运算,得到m2个中间小数乘积;
调用所述G个加法器对所述m2个中间小数乘积进行叠加与组合,得到所述小数乘积,G为正整数。
14.根据权利要求13所述的方法,其特征在于,所述将所述浮点数乘积与所述第三操作数进行加法运算,得到浮点数和,包括:
将所述小数乘积按照第一指定格式映射至寄存器中;
从所述寄存器中读取所述第一指定格式的小数乘积,基于所述第一操作数的符号位与指数部分、以及所述第二操作数的符号位与指数部分,对所述第一指定格式的小数乘积扩展生成第二指定格式的第一中间结果;基于所述第三操作数的符号位与指数部分,对所述第三操作数的小数部分扩展生成所述第二指定格式的第二中间结果;
将所述第一中间结果与所述第二中间结果相加得到所述浮点数和。
15.根据权利要求14所述的方法,其特征在于,所述乘累加器包括K个基本运算单元,相邻两个基本运算单元之间采用级联方式连接,K为正整数;
所述将所述第一中间结果与所述第二中间结果相加得到所述浮点数和,包括:
将所述第一中间结果分解为K个第一数值部分,将所述第二中间结果分别为K个第二数值部分,且与所述K个第一数值部分、所述K个第二数值部分对应生成K个信号值,其中,第t个信号值用于指示第t个基本运算单元与第t+1个基本运算单元之间的连接关系,t为小于或者等于K的正整数;
按照操作位宽上数值位置的对应关系将所述K个第一数值部分与所述K个第二数值部分对应映射至所述寄存器的K个存储单元中,得到所述K个存储单元中的K组数值部分;
将所述K组数值部分读取至所述K个基本运算单元中,且将所述K个信号值对应输入所述K个基本运算单元中;
通过所述K个基本运算单元对所述K组数值部分进行叠加与组合,得到所述浮点数和。
16.根据权利要求14所述的方法,其特征在于,所述小数乘积包括原整数部分和原小数部分;
所述将所述小数乘积按照第一指定格式映射至寄存器中,包括:
按照整数裁剪位宽对所述原整数部分进行裁剪,得到裁剪后的整数部分;按照小数裁剪位宽对所述原小数部分进行裁剪,得到裁剪后的小数部分;
将所述裁剪后的整数部分与所述裁剪后的小数部分映射至所述寄存器的坐标上,得到所述第一指定格式的小数乘积。
17.根据权利要求12至16任一所述的方法,其特征在于,所述浮点数和为定点格式,所述指定数据格式包括定点格式或者浮点格式;
所述根据所述浮点数和输出指定数据格式的运算结果,包括:
接收第二选择信号;
按照所述第二选择信号所指示的定点格式将所述定点格式的浮点数和输出为所述运算结果;或者,按照所述第二选择信号所指示的浮点格式将所述定点格式的浮点数和转换为所述浮点格式的浮点数和,将所述浮点格式的浮点数和输出为所述运算结果。
CN202010774707.3A 2020-08-04 2020-08-04 包括乘累加器的芯片、终端及浮点运算的控制方法 Active CN111767025B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202010774707.3A CN111767025B (zh) 2020-08-04 2020-08-04 包括乘累加器的芯片、终端及浮点运算的控制方法
PCT/CN2021/101378 WO2022028134A1 (zh) 2020-08-04 2021-06-22 一种芯片、终端及浮点运算的控制方法和相关装置
US17/898,461 US20230108799A1 (en) 2020-08-04 2022-08-29 Chip, terminal, floating-point operation control method, and related apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010774707.3A CN111767025B (zh) 2020-08-04 2020-08-04 包括乘累加器的芯片、终端及浮点运算的控制方法

Publications (2)

Publication Number Publication Date
CN111767025A true CN111767025A (zh) 2020-10-13
CN111767025B CN111767025B (zh) 2023-11-21

Family

ID=72729347

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010774707.3A Active CN111767025B (zh) 2020-08-04 2020-08-04 包括乘累加器的芯片、终端及浮点运算的控制方法

Country Status (3)

Country Link
US (1) US20230108799A1 (zh)
CN (1) CN111767025B (zh)
WO (1) WO2022028134A1 (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112558920A (zh) * 2020-12-21 2021-03-26 清华大学 有/无符号乘累加装置及方法
CN113032326A (zh) * 2021-03-25 2021-06-25 盛立安元科技(杭州)股份有限公司 一种用于fpga的数据类型转换装置、方法、设备及存储介质
CN113721884A (zh) * 2021-09-01 2021-11-30 北京百度网讯科技有限公司 运算方法、装置、芯片、电子装置及存储介质
WO2022028134A1 (zh) * 2020-08-04 2022-02-10 腾讯科技(深圳)有限公司 一种芯片、终端及浮点运算的控制方法和相关装置
CN115034163A (zh) * 2022-07-15 2022-09-09 厦门大学 一种支持两种数据格式切换的浮点数乘加计算装置
WO2022229724A1 (en) * 2021-04-28 2022-11-03 International Business Machines Corporation Pipelined hardware to accelerate modular arithmetic operations
CN116700670A (zh) * 2023-08-08 2023-09-05 深圳比特微电子科技有限公司 乘累加电路、包含该乘累加电路的处理器和计算装置
CN117111881A (zh) * 2023-07-26 2023-11-24 深存科技(无锡)有限公司 支持多输入多格式的混合精度乘加运算器

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116127255B (zh) * 2022-12-14 2023-10-03 北京登临科技有限公司 卷积运算电路、及具有该卷积运算电路的相关电路或设备
CN116661734B (zh) * 2023-07-26 2023-10-10 深存科技(无锡)有限公司 支持多输入多格式的低精度乘加运算器
CN117472325B (zh) * 2023-12-28 2024-04-30 北京象帝先计算技术有限公司 一种乘法处理器、运算处理方法、芯片及电子设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0108664A2 (en) * 1982-10-04 1984-05-16 Fairchild Semiconductor Corporation Floating point microprocessor
US4928223A (en) * 1982-10-06 1990-05-22 Fairchild Semiconductor Corporation Floating point microprocessor with directable two level microinstructions
CN109739555A (zh) * 2019-01-04 2019-05-10 腾讯科技(深圳)有限公司 包括乘累加模块的芯片、终端及控制方法
US20190244097A1 (en) * 2018-02-07 2019-08-08 Fujitsu Limited Information processing apparatus and information processing method
CN110413254A (zh) * 2019-09-24 2019-11-05 上海寒武纪信息科技有限公司 数据处理器、方法、芯片及电子设备
US20190339937A1 (en) * 2018-05-04 2019-11-07 Microsoft Technology Licensing, Llc Block floating point computations using reduced bit-width vectors
US20200089472A1 (en) * 2018-09-19 2020-03-19 Xilinx, Inc. Multiply and accumulate circuit

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6480872B1 (en) * 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
CN111767025B (zh) * 2020-08-04 2023-11-21 腾讯科技(深圳)有限公司 包括乘累加器的芯片、终端及浮点运算的控制方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0108664A2 (en) * 1982-10-04 1984-05-16 Fairchild Semiconductor Corporation Floating point microprocessor
US4928223A (en) * 1982-10-06 1990-05-22 Fairchild Semiconductor Corporation Floating point microprocessor with directable two level microinstructions
US20190244097A1 (en) * 2018-02-07 2019-08-08 Fujitsu Limited Information processing apparatus and information processing method
US20190339937A1 (en) * 2018-05-04 2019-11-07 Microsoft Technology Licensing, Llc Block floating point computations using reduced bit-width vectors
US20200089472A1 (en) * 2018-09-19 2020-03-19 Xilinx, Inc. Multiply and accumulate circuit
CN109739555A (zh) * 2019-01-04 2019-05-10 腾讯科技(深圳)有限公司 包括乘累加模块的芯片、终端及控制方法
CN110413254A (zh) * 2019-09-24 2019-11-05 上海寒武纪信息科技有限公司 数据处理器、方法、芯片及电子设备
CN111008003A (zh) * 2019-09-24 2020-04-14 上海寒武纪信息科技有限公司 数据处理器、方法、芯片及电子设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
周旭, 唐志敏: "一种快速的浮点乘法器结构", 计算机研究与发展, no. 06, pages 116 - 120 *
李震;ZHI TIAN;LIU ENHE;LIU SHAOLI;CHEN TIANSHI;: "MW-DLA:a dynamic bit width deep learning accelerator", HIGH TECHNOLOGY LETTERS, no. 02, pages 23 - 29 *

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022028134A1 (zh) * 2020-08-04 2022-02-10 腾讯科技(深圳)有限公司 一种芯片、终端及浮点运算的控制方法和相关装置
CN112558920A (zh) * 2020-12-21 2021-03-26 清华大学 有/无符号乘累加装置及方法
CN112558920B (zh) * 2020-12-21 2022-09-09 清华大学 有/无符号乘累加装置及方法
CN113032326A (zh) * 2021-03-25 2021-06-25 盛立安元科技(杭州)股份有限公司 一种用于fpga的数据类型转换装置、方法、设备及存储介质
WO2022229724A1 (en) * 2021-04-28 2022-11-03 International Business Machines Corporation Pipelined hardware to accelerate modular arithmetic operations
GB2620884A (en) * 2021-04-28 2024-01-24 Ibm Pipelined hardware to accelerate modular arithmetic operations
CN113721884A (zh) * 2021-09-01 2021-11-30 北京百度网讯科技有限公司 运算方法、装置、芯片、电子装置及存储介质
CN115034163A (zh) * 2022-07-15 2022-09-09 厦门大学 一种支持两种数据格式切换的浮点数乘加计算装置
CN117111881A (zh) * 2023-07-26 2023-11-24 深存科技(无锡)有限公司 支持多输入多格式的混合精度乘加运算器
CN117111881B (zh) * 2023-07-26 2024-06-04 深存科技(无锡)有限公司 支持多输入多格式的混合精度乘加运算器
CN116700670A (zh) * 2023-08-08 2023-09-05 深圳比特微电子科技有限公司 乘累加电路、包含该乘累加电路的处理器和计算装置
CN116700670B (zh) * 2023-08-08 2024-04-05 深圳比特微电子科技有限公司 乘累加电路、包含该乘累加电路的处理器和计算装置

Also Published As

Publication number Publication date
WO2022028134A1 (zh) 2022-02-10
CN111767025B (zh) 2023-11-21
US20230108799A1 (en) 2023-04-06

Similar Documents

Publication Publication Date Title
CN111767025B (zh) 包括乘累加器的芯片、终端及浮点运算的控制方法
CN109739555B (zh) 包括乘累加模块的芯片、终端及控制方法
CN115934030B (zh) 算数逻辑单元、浮点数乘法计算的方法及设备
CN110929838B (zh) 神经网络中位宽定点化方法、装置、终端和存储介质
CN107797866B (zh) 处理器资源的分配方法及移动终端和介质产品
TWI763079B (zh) 用於浮點運算的乘法器、方法、積體電路晶片和計算裝置
CN117111881B (zh) 支持多输入多格式的混合精度乘加运算器
CN117215646A (zh) 一种浮点运算方法、处理器、电子设备及存储介质
CN117420982A (zh) 包括融合乘累加器的芯片、设备及数据运算的控制方法
CN116661734B (zh) 支持多输入多格式的低精度乘加运算器
US20240176585A1 (en) Data processing method, computer device and storage medium
CN116450086A (zh) 包括乘累加器的芯片、终端和控制方法
JPH11212768A (ja) 対数値算出回路
US9164728B1 (en) Ternary DSP block
CN109582279B (zh) 数据运算装置及相关产品
CN109558109B (zh) 数据运算装置及相关产品
CN111142840A (zh) 基于fpga的数据计算方法和装置
US6725360B1 (en) Selectively processing different size data in multiplier and ALU paths in parallel
CN116860202A (zh) 数据处理方法、处理器及存储介质
CN116756465A (zh) 计算单元、计算核心、数据计算方法、芯片及电子设备
CN113805844A (zh) 一种数据处理方法、装置、电子设备及存储介质
CN116306707A (zh) 一种计算x&amp;(x-1)的加速电路及计算设备
CN117793361A (zh) 数据编码和数据解码的方法、装置、设备
CN117348841A (zh) 数据处理方法、装置、电子设备及可读存储介质
CN115237237A (zh) 能耗管控方法、装置、存储介质及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40031305

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant