CN117420982A - 包括融合乘累加器的芯片、设备及数据运算的控制方法 - Google Patents
包括融合乘累加器的芯片、设备及数据运算的控制方法 Download PDFInfo
- Publication number
- CN117420982A CN117420982A CN202311373968.4A CN202311373968A CN117420982A CN 117420982 A CN117420982 A CN 117420982A CN 202311373968 A CN202311373968 A CN 202311373968A CN 117420982 A CN117420982 A CN 117420982A
- Authority
- CN
- China
- Prior art keywords
- operand
- updated
- data
- unit
- floating point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000007667 floating Methods 0.000 claims abstract description 309
- 238000006243 chemical reaction Methods 0.000 claims abstract description 67
- 238000012545 processing Methods 0.000 claims description 100
- 238000009825 accumulation Methods 0.000 claims description 8
- 230000004927 fusion Effects 0.000 abstract description 13
- 238000010586 diagram Methods 0.000 description 20
- 238000003860 storage Methods 0.000 description 16
- 102100024061 Integrator complex subunit 1 Human genes 0.000 description 13
- 101710092857 Integrator complex subunit 1 Proteins 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 12
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 9
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 9
- 238000004590 computer program Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 238000013473 artificial intelligence Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 102100029095 Exportin-1 Human genes 0.000 description 3
- 101000767160 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) Intracellular protein transport protein USO1 Proteins 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 108700002148 exportin 1 Proteins 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 101100269618 Streptococcus pneumoniae serotype 4 (strain ATCC BAA-334 / TIGR4) aliA gene Proteins 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本申请公开了一种包括融合乘累加器的芯片、设备及数据运算的控制方法,属于芯片领域。数据格式转换单元用于在输入的第一操作数和第二操作数为第一数据格式的情况下,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,得到自定义数据格式的中间数据;数据分发控制单元,用于从自定义数据格式的中间数据中,拆分得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数;乘累加器单元,用于对第一更新操作数和第二更新操作数进行乘累加运算,得到第一操作数和第二操作数对应的运算结果。该方法可应用于芯片领域,使同一融合乘累加器能够对整数和浮点数进行运算,减小芯片的功耗和面积。
Description
技术领域
本申请涉及芯片技术领域,特别涉及一种包括融合乘累加器的芯片、设备及数据运算的控制方法。
背景技术
乘累加器是进行数据运算的一种处理器,被广泛应用在人工智能(ArtificialIntelligence,AI)芯片、中央处理器(Central Processing Unit,CPU)图形处理器(Graphics Processing Unit,GPU)、数字信号处理器(Digital Signal Processing,DSP)等芯片中,是决定芯片的最终性能表现的关键组件。
乘累加器往往需要支持输入多种数据格式的操作数,比如,不同数据格式的浮点数(例如,FP8、TF24、FP32)和整数(例如,INT8)。相关技术中,乘累加器作为芯片的数据运算的硬件执行单元,整数和浮点数需要被分配到不同的硬件执行单元去运算,导致芯片的功耗和面积太大。
发明内容
本申请提供了一种包括融合乘累加器的芯片、设备及数据运算的控制方法。所述技术方案如下:
根据本申请的一个方面,提供了一种包括融合乘累加器的芯片,所述融合乘累加器包括数据格式转换单元、数据分发控制单元和乘累加器单元;所述数据格式转换单元的输出端与所述数据分发控制单元的输入端相连,所述数据分发控制单元的输出端与所述乘累加器单元的输入端相连;
所述数据格式转换单元,用于在输入的第一操作数和第二操作数为第一数据格式的情况下,对所述第一操作数和所述第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对所述第一操作数和所述第二操作数进行第二数据转换,得到所述自定义数据格式的中间数据;其中,所述第一数据格式和所述第二数据格式是操作数的不同标准格式,所述自定义数据格式是用于融合所述不同标准格式的操作数的自定义格式;
所述数据分发控制单元,用于从所述自定义数据格式的中间数据中,拆分得到所述第一操作数对应的第一更新操作数和所述第二操作数对应的第二更新操作数;将所述第一更新操作数和所述第二更新操作数发送至所述乘累加器单元;
所述乘累加器单元,用于对所述第一更新操作数和所述第二更新操作数进行乘累加运算,得到所述第一操作数和所述第二操作数对应的运算结果。
根据本申请的另一方面,提供了一种数据运算的控制方法,所述方法包括:
在输入的第一操作数和第二操作数为第一数据格式的情况下,对所述第一操作数和所述第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对所述第一操作数和所述第二操作数进行第二数据转换,得到所述自定义数据格式的中间数据;其中,所述第一数据格式和所述第二数据格式是操作数的不同标准格式,所述自定义数据格式是用于融合所述不同标准格式的操作数的自定义格式;
从所述自定义数据格式的中间数据中,拆分得到所述第一操作数对应的第一更新操作数和所述第二操作数对应的第二更新操作数;
对所述第一更新操作数和所述第二更新操作数进行乘累加运算,得到所述第一操作数和所述第二操作数对应的运算结果。
根据本申请的另一方面,提供了一种计算机设备,所述计算机设备包括:如上所述的包括融合乘累加器的芯片。
根据本申请的另一方面,提供了一种计算机设备,所述计算机设备包括:处理器和存储器,所述存储器存储有计算机程序,所述计算机程序由所述处理器加载并执行以实现如上所述的数据运算的控制方法。
根据本申请的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序由处理器加载并执行以实现如上所述的数据运算的控制方法。
根据本申请的另一方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机指令,所述计算机指令存储在计算机可读存储介质中,处理器从所述计算机可读存储介质中获取所述计算机指令,使得所述处理器加载并执行以实现如上所述的数据运算的控制方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
本申请实施例提供了一种包括融合乘累加器的芯片,其中,融合乘累加器包括数据格式转换单元、数据分发控制单元和乘累加器单元;数据格式转换单元,用于在输入的第一操作数和第二操作数为第一数据格式的情况下,对第一操作数和第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对第一操作数和第二操作数进行第二数据转换,得到自定义数据格式的中间数据;其中,第一数据格式和第二数据格式是操作数的不同标准格式,自定义数据格式是用于融合不同标准格式的操作数的自定义格式;数据分发控制单元,用于从自定义数据格式的中间数据中,拆分得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数;将第一更新操作数和第二更新操作数发送至乘累加器单元;乘累加器单元,用于对第一更新操作数和第二更新操作数进行乘累加运算,得到第一操作数和第二操作数对应的运算结果。据此,能够使得该芯片中的同一融合乘累加器能够对整数和浮点数进行运算,提高了芯片的计算面效比,大大节约了芯片中的计算电路的资源开销,提高了硬件利用率,减小了芯片的功耗和面积。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了一个示例性实施例提供的计算机系统的结构框图;
图2示出了一个示例性实施例提供的融合乘累加器的示意图;
图3示出了一个示例性实施例提供的包括融合乘累加器的芯片的示意图;
图4示出了一个示例性实施例提供的浮点数FP8的数据格式转换示意图;
图5示出了一个示例性实施例提供的浮点数FP16的数据格式转换示意图;
图6示出了一个示例性实施例提供的浮点数BF16的数据格式转换示意图;
图7示出了一个示例性实施例提供的浮点数TF32的数据格式转换示意图;
图8示出了一个示例性实施例提供的浮点数FP32的乘累加运算的示意图;
图9示出了一个示例性实施例提供的浮点数FP32的乘累加运算的示意图;
图10示出了一个示例性实施例提供的融合乘累加器的处理过程的示意图;
图11示出了一个示例性实施例提供的乘累加运算单元的运算过程的示意图;
图12示出了一个示例性实施例提供的数据运算的控制方法的流程图;
图13示出了一个示例性实施例提供的计算机设备的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一参数也可以被称为第二参数,类似地,第二参数也可以被称为第一参数。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本申请实施例中涉及的名词进行简单介绍。
乘累加运算(Multiply Accumulate,MAC):将操作数A和操作数B相乘后,将乘积与操作数C相加的运算,也即:Cout=A*B+C。
乘累加器:在数字信号处理器或一些微处理器中,用于实现乘累加运算的硬件电路单元。
整数(Integer,INT),计算机中采用的一种数的表示方法。
浮点数(Floating Point,FP):计算机中采用的一种数的表示方法,与科学计数法相似,任意一个二进制数N,总可以写成:
N=(-1)S*2E*M;
式中,M为浮点数N的小数部分(也称尾数Mantissa,简写为Man),是一个纯小数;E为浮点数N的指数部分(也称阶码Exponent,简写为Exp),是一个整数;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:Central Processing Unit,中央处理器。
CSA:Carry Save Adder,进位保存加法器。
AI:Artificial Intelligence,人工智能。
GPU:Graphics Processing Unit,图形处理器。
DSP:Digital Signal Processor,数字信号处理器。
IEEE:Institute of Electrical and Electronics Engineers,电气电子工程师学会;IEEE格式是指整数和浮点数的标准格式。
MUX:Multiplexer,多路复用器,也可以称为选择器。
CLA:Carry Look-Ahead Adder,超前进位加法器。
LZA:Leading Zero Anticipator,前导零预测器。
图1示出了本申请一个示例性实施例提供的计算机系统100的结构框图。该计算机系统可以实现成为数据运算的控制方法的系统架构。该计算机系统100包括:终端120和服务器140。终端120和/或服务器140中可以分别设置有至少一个包括融合乘累加器的芯片,上述的数据运算的控制方法可以通过该包括融合乘累加器的芯片实现。
终端120中可以设置有包括融合乘累加器的芯片,该芯片用于基于该融合乘累加器,实现对输入的至少两个浮点数进行乘累加运算,或,该芯片用于基于该融合乘累加器,实现对输入的至少两个整数进行乘累加运算。可选地,终端120可以是诸如手机、平板电脑、车载终端(车机)、可穿戴设备、PC(Personal Computer,个人计算机)、无人预定终端等电子设备。
服务器140中可以设置有包括融合乘累加器的芯片,该芯片用于基于该融合乘累加器,实现对输入的至少两个浮点数进行乘累加运算,或,该芯片用于基于该融合乘累加器,实现对输入的至少两个整数进行乘累加运算。可选地,服务器140可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。服务器140可以是上述终端120的后台服务器,用于为上述终端120提供后台服务。
其中,云技术(Cloud Technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
在一些实施例中,上述服务器140还可以实现为区块链系统中的节点。区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链,本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
终端120和服务器140之间可以通过网络进行通信,如有线或无线网络。
本申请实施例提供的数据运算的控制方法,各步骤的执行主体可以是计算机设备中的包括融合乘累加器的芯片,计算机设备是指具备数据计算、处理和存储能力的电子设备。以图1所示的方案实施环境为例,可以由终端120中的包括融合乘累加器的芯片执行数据运算的控制方法,也可以由服务器140中的包括融合乘累加器的芯片执行数据运算的控制方法,或者由终端120和服务器140中的包括融合乘累加器的芯片交互配合执行,本申请对此不作限定。
本领域技术人员可以知晓,上述终端120的数量可以更多或更少。比如:上述终端120可以仅为一个,或为几十个或几百个,或更多数量。本申请实施例对终端120的数量和设备类型不加以限定。
乘累加器往往需要支持输入多种数据格式的操作数,比如,不同数据格式的浮点数(例如,FP8、TF24、FP32)和整数(例如,INT8)。相关技术中,乘累加器作为数据运算的硬件执行单元,整数和浮点数需要由不同的指令被分配到CPU的不同的硬件执行单元去运算,同时,对于不同数据格式的浮点数(例如,FP8、TF24),通常还需要先做格式转换成CPU能够执行的标准浮点格式(例如,FP32)才能进行运算,这个过程需要多条指令才能完成。
上述方式存在的问题至少包括:
1.整数和浮点数需要不同的硬件执行单元,在输入的数据都是浮点数的情况下,则整数的硬件执行单元被闲置浪费,反之,在输入的数据都是整数的情况下,则浮点数的硬件执行单元被闲置浪费,导致乘累加器的功耗和面积太大。
2.不同数据格式的浮点数(例如,FP8、TF24),通常还需要先做格式转换成CPU能够执行的标准浮点格式(例如,FP32)才能进行运算,这个过程需要多条指令进行预处理,包括:加法操作、移位操作等,导致计算效率低下。
本申请实施例针对上述问题提供解决方法:
1.本申请实施例提供了包括融合整数和浮点数的乘累加计算电路,提高了计算面效比(算力面积之比)。
2.本申请实施例提供了自定义数据格式,通过将不同数据格式的整数和/或浮点数转化成该自定义格式,再输入乘累加计算电路,使得同一套乘累加计算电路可以适应不同数据格式的浮点数输入和/或整数输入。
示例性的,本申请实施例提供了一种包括融合乘累加器的芯片。图2示出了本申请一个示例性实施例提供的融合乘累加器160的示意图。融合乘累加器160包括数据格式转换单元162、数据分发控制单元164和乘累加器单元168;数据格式转换单元162的输出端与数据分发控制单元164的输入端相连,数据分发控制单元164的输出端与乘累加器单元168的输入端相连。
数据格式转换单元162,用于在输入的第一操作数181(被乘数a)和第二操作数182(乘数b)为第一数据格式的情况下,对第一操作数181和第二操作数182进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数181和第二操作数182为第二数据格式的情况下,对第一操作数181和第二操作数182进行第二数据转换,得到自定义数据格式的中间数据。
在一个示例性实施中,第一数据格式和第二数据格式是操作数的不同标准格式(IEEE格式),自定义数据格式是用于融合不同标准格式的操作数的自定义格式。可选地,第一数据格式包括8位整数INT8,例如,有符号整数signed-INT8、无符号整数un-signed-INT8,第二数据格式包括浮点数,例如,8位浮点数FP8(E5M2、E4M3)、16位浮点数FP16(1.5.10;其中,符号位为1比特bit,指数部分为5bit,小数部分为10bit,总共16bit)、BF16(1.8.7)、24位浮点数TF24(1.8.11,按3字节Byte存储)、32位浮点数TF32(1.8.11,按4Byte存储)、FP32(1.8.23)。自定义数据格式的中间数据是位宽为22bit的数据。
数据分发控制单元164,用于从自定义数据格式的中间数据中,拆分得到第一操作数181对应的第一更新操作数183(被乘数X)和第二操作数182对应的第二更新操作数184(乘数Y);将第一更新操作数183和第二更新操作数184发送至乘累加器单元168。
乘累加器单元168,用于对第一更新操作数183和第二更新操作数184进行乘累加运算,得到第一操作数181和第二操作数182对应的运算结果185(乘积A)。可选地,本实施例还可以设置更多的乘累加器单元168,不同的乘累加器单元168对应不同的位宽,数据分发控制单元164还可以根据操作数的第一数据格式与第二数据格式的类型,将第一更新操作数183和第二更新操作数184发送至合适位宽的乘累加器单元168中进行运算,这部分将在后续实施例描述。
综上所述,本申请实施例提供的包括融合乘累加器的芯片,整数和浮点数可以输入到同一套融合乘累加器中进行运算,通过将整数和浮点数转化为自定义数据格式,使得同一套乘累加器可以使用不同数据格式的浮点数输入和/或整数输入,从而减小了乘累加器的功耗和面积,提高了计算效率。
图3示出了本申请的一个示例性实施例提供的包括融合乘累加器210的芯片200的示意图。在实施例的设置中,融合乘累加器210包括数据格式转换单元220、数据分发控制单元240和乘累加器单元260,数据格式转换单元220的输出端与数据分发控制单元240的输入端相连,数据分发控制单元240的输出端与乘累加器单元260的输入端相连。
数据格式转换单元220是用于将输入的操作数进行数据转换的单元,该数据转换方式基于输入的操作数的数据格式确定。
示例性的,数据格式转换单元220,用于在输入的第一操作数和第二操作数为第一数据格式的情况下,对第一操作数和第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对第一操作数和第二操作数进行第二数据转换,得到自定义数据格式的中间数据。
第一操作数和第二操作数是需要进行乘累加运算的操作数。每次运算时输入的第一操作数和第二操作数的数据格式相同。比如,本次运算(第1次运算)时输入的第一操作数和第二操作数均是第一数据格式的操作数,或,本次运算(第2次运算)时输入的第一操作数和第二操作数均是第二数据格式的操作数。可以理解的是,第1次运算与第2次运算输入的操作数的数据格式可以不同。
在一个示例性实施中,第一数据格式和第二数据格式是操作数的不同标准格式(IEEE格式),自定义数据格式是用于融合不同标准格式的操作数的自定义格式,即,无论输入的是何种标准格式的操作数,数据格式转换单元220均可以采用相对应的转换方式将其转换为自定义数据格式,以便进行后续运算。
可选地,第一数据格式包括8位整数INT8,例如,有符号整数signed-INT8、无符号整数un-signed-INT8,第二数据格式包括浮点数,例如,8位浮点数FP8(E5M2、E4M3)、16位浮点数FP16(1.5.10)、BF16(1.8.7)、24位浮点数TF24(1.8.11)、32位浮点数TF32(1.8.11)、FP32(1.8.23)。上述的第一、第二仅用于区分不同的数据格式,在另一些实施例中,第一数据格式和第二数据格式的具体类型可以互换,本实施例对此不做限制。
在一种可能的实施例中,自定义数据格式的中间数据是位宽为22bit的数据。该自定义数据格式包括以下至少一种数据域段:
符号域段,用于表征中间数据的符号。
数值域段,用于表征中间数据的数值。
保留域段,用于将中间数据的位宽维持为指定位宽。
在一些实施例中,数据域段中填充的是中间数据的数值部分的具体比特值。由于浮点数的数值部分包括指数部分和小数部分,则该数据域段还可以进一步划分为指数部分对应的指数部分数据域段和小数部分对应的小数部分数据域段。其中,指数部分数据域段用于填充指数部分的具体比特值,小数部分数据域段用于填充小数部分的具体比特值。
在一些实施例中,该指定位宽是指本实施例设置的自定义数据格式的中间数据的位宽。指定位宽为22Bit。可以理解的是,指定位宽还可以设置为其他的位宽,本实施例的22bit是保证芯片算力的情况下,节约面积和功耗的设计。
可以理解的是,上述自定义数据格式的各个数据域段分别对应于不同的域段位置,域段位置与数据域段的对应关系可以预先存储在该芯片中,不同芯片中存储的该对应关系可以是相同的或不相同的,本实施例对此不作限制。
例如,两个无符号8位整数分别表示为第一整数INT0和第二整数INT1,22bit的自定义数据的域段位置包括第21位至第0位,自定义数据格式的数据域段包括符号域段、数值域段和保留(Reserved,Rsv)域段。
在一种域段位置的设置中,INT0、INT1的符号位0分别填充在符号域段上,符号域段可以在第21位和第20位,第21位表示INT0的符号位,第20位表示INT1的符号位。INT0、INT1的数值部分分别填充在数值域段上,INT1的数值部分在第19位至第12位,INT0的数值部分在第11位至第4位,保留域段包括第3位至第0位,即低位填充4个0,表示为4’b0。本实施例如表1所示:
表1数据域段及其域段位置
在另一种域段位置的设置中,INT0、INT1的符号位0分别填充在符号域段上,符号域段可以在第21位和第20位,第21位表示INT1的符号位,第20位表示INT0的符号位。INT0、INT1的数值部分分别填充在数值域段上,INT1的数值部分在第19位至第12位,INT0的数值部分在第7位至第0位,保留域段包括第11位至第8位,填充4个0,表示为4’b0。本实施例如表2所示:
表2数据域段及其域段位置
数据分发控制单元240是用于将操作数分发至乘累加器单元260的单元。
示例性的,数据分发控制单元240,用于从自定义数据格式的中间数据中,拆分得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数;将第一更新操作数和第二更新操作数发送至乘累加器单元。
第一更新操作数是第一操作数和第二操作数经过数据格式转换后,从中间数据中拆分得到的第一操作数对应的操作数。第二更新操作数是第一操作数和第二操作数经过数据格式转换后,从中间数据中拆分得到的第二操作数对应的操作数。其中,由于中间数据是按照操作数的符号位、数值部分进行放置的,因此需要将符号位和数值部分进行重新组合确定相应的更新操作数进行后续运算。
乘累加器单元260是用于将操作数进行乘法运算以及加法运算的单元。
示例性的,乘累加器单元260,用于对第一更新操作数和第二更新操作数进行乘累加运算,得到第一操作数和第二操作数对应的运算结果。
综上所述,本申请实施例提供了一种包括融合乘累加器的芯片,其中,融合乘累加器包括数据格式转换单元、数据分发控制单元和乘累加器单元;数据格式转换单元,用于在输入的第一操作数和第二操作数为第一数据格式的情况下,对第一操作数和第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对第一操作数和第二操作数进行第二数据转换,得到自定义数据格式的中间数据;其中,第一数据格式和第二数据格式是操作数的不同标准格式,自定义数据格式是用于融合不同标准格式的操作数的自定义格式;数据分发控制单元,用于从自定义数据格式的中间数据中,拆分得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数;将第一更新操作数和第二更新操作数发送至乘累加器单元;乘累加器单元,用于对第一更新操作数和第二更新操作数进行乘累加运算,得到第一操作数和第二操作数对应的运算结果。使得该芯片中的同一融合乘累加器能够对整数和浮点数进行运算,提高了计算面效比,减小了芯片的功耗和面积。
以下实施例对包括融合乘累加器的芯片中的各个单元进行介绍。
·数据格式转换单元220
在一些实施例中,数据格式转换单元220包括数据确定单元、数据更新单元和数据处理单元。其中,数据确定单元的输出端的其中一端与数据更新单元的输入端相连,数据更新单元的输出端与数据处理单元的输入端相连,数据确定单元的输出端的另外一端与数据处理单元的输入端相连。对于第一操作数和第二操作数中的第i操作数,数据格式转换单元220存在如下处理:
数据确定单元,用于对于第一操作数和第二操作数中的第i操作数,确定第i操作数的数值部分和符号位。
数据更新单元,用于对数值部分进行更新,确定第i操作数的更新数值部分。
数据处理单元,用于基于第i操作数的符号位和更新数值部分,得到自定义数据格式的中间数据。
在一些实施例中,操作数包括整数或浮点数,整数或浮点数均分别包括数值部分和符号位。数据格式转换单元220先确定出操作数的数值部分和符号位,对数值部分进行更新,得到更新数值部分,然后,基于更新数值部分和符号位即可确定出自定义数据格式的中间数据。
在一些实施例中,自定义数据格式的位宽为22bit。可选地,一行22bit自定义数据格式的中间数据,可以同时放置第一操作数和第二操作数,即第一操作数和第二操作数对应有一行22bit自定义数据格式的中间数据。或,一行22bit自定义数据格式的中间数据,可以放置一个第一操作数或放置一个第二操作数,即第一操作数对应有一行22bit自定义数据格式的中间数据、第二操作数对应有一行22bit自定义数据格式的中间数据。或,第一操作数需要首先拆分成第一子操作数和第二子操作数,一行22bit自定义数据格式的中间数据,可以放置一个第一子操作数或放置一个第二子操作数,即第一子操作数对应有一行22bit自定义数据格式的中间数据、第二子操作数对应有一行22bit自定义数据格式的中间数据,第一操作数对应有两行22bit自定义数据格式的中间数据。本实施例需要根据操作数具体的数据格式确定,后续以表格的形式进行说明。
以下实施例对整数和浮点数对应的数据格式转换的处理分别进行介绍。
·对于整数的处理
在一些实施例中,输入的第一操作数和第二操作数为第一数据格式,第一数据格式包括整数格式,则第一操作数包括第一整数,第二操作数包括第二整数,第i操作数包括第i整数;对于第一整数和第二整数中的第i整数,数据格式转换单元220存在如下处理:
数据确定单元,用于对于第一整数和第二整数中的第i整数,确定第i整数的数值部分和符号位。
数据更新单元,用于对数值部分进行更新,确定第i整数的更新数值部分。
数据处理单元,用于基于第i整数的符号位和更新数值部分,得到自定义数据格式的中间数据。
在一些实施例中,数据更新单元,用于在第i整数为负整数的情况下,将数值部分取反并加一,确定第i整数的更新数值部分。其中,考虑到将数值部分取反并加一可能会产生进位,因此设置更新数值部分对应的位宽(8bit)大于原本的数值部分对应的位宽(7bit)。具体地,对数值部分[6:0]取反并加一恢复至原码。本实施例也可以称为预处理,目的是避免后续运算需要处理负数。其中,数据更新单元在第i整数为正整数的情况下则对数值部分不做任何处理。
以下实施例结合不同整数的处理进行说明。
作为示例,将2个8bit无符号数INT0和INT1进行数据格式转换后,22bit自定义数据格式的中间数据如下表3所示:
表3
其中,第21位表示INT0的符号位,第20位表示INT1的符号位。INT1的数值部分在第19位至第12位,INT0的数值部分在第11位至第4位,保留域段包括第3位至第0位,即低位填充4个0。
作为示例,将2个8bit有符号数INT0和INT1进行预处理,在INT0为负整数的情况下,将INT0的数值部分[6:0]取反并加一,确定更新数值部分。记处理后的2个8bit整数为INT0’,INT1’,则22bit自定义数据格式的中间数据如下表4所示:
表4
其中,第21位表示INT0’的符号位,第20位’表示INT1的符号位。INT1’的数值部分在第19位至第12位,INT0’的数值部分在第11位至第4位,保留域段包括第3位至第0位,即低位填充4个0。
上述实施例提供了对整数进行数据格式转换的方式,能够将8位整数转换为22bit自定义数据格式的中间数据,使得融合乘累加器能够实现对整数的运算。
·对于浮点数的处理
在一些实施例中,输入的第一操作数和第二操作数为第二数据格式,第二数据格式包括浮点格式,第一操作数包括第一浮点数,第二操作数包括第二浮点数,第i操作数包括第i浮点数,数值部分包括指数部分和小数部分;对于第一浮点数和第二浮点数中的第i浮点数,数据格式转换单元220用于执行以下处理:
数据确定单元,用于对于第一浮点数和第二浮点数中的第i浮点数,确定第i浮点数的指数部分、小数部分和符号位;
数据更新单元,用于将指数部分进行更新,确定第i浮点数的更新指数部分;将小数部分进行更新,确定第i浮点数的更新小数部分;
数据处理单元,用于基于第i浮点数的符号位、更新指数部分和更新小数部分,得到自定义数据格式的中间数据。
在一些实施例中,当第i浮点数的浮点类型为FP32时,还需要先将该第i浮点数拆分为第一子浮点数和第二子浮点数,然后分别对第一子浮点数和第二子浮点数进行上述的指数部分更新与小数部分更新。则有如下处理:
数据确定单元,用于确定第i浮点数中的指数部分、小数部分和符号位;基于第i浮点数中的指数部分、小数部分和符号位进行拆分,确定第一子浮点数的指数部分、小数部分和符号位,以及,确定第二子浮点数的指数部分、小数部分和符号位;
数据更新单元,用于将第一子浮点数的指数部分进行更新,确定第一子浮点数的更新指数部分,以及,将第二子浮点数的指数部分进行更新,确定第二子浮点数的更新指数部分;将第一子浮点数的小数部分进行更新,确定第一子浮点数的更新小数部分,以及,将第二子浮点数的小数部分进行更新,确定第二子浮点数的更新小数部分;
数据处理单元,用于分别基于第一子浮点数的符号位、更新指数部分和更新小数部分,以及,基于第二子浮点数的符号位、更新指数部分和更新小数部分,得到自定义数据格式的中间数据。
上述实施例提供了对不同数据格式的浮点数进行数据格式转换的方式,能够将不同浮点格式的浮点数均可以转换为22bit自定义数据格式的中间数据,使得融合乘累加器能够实现对浮点数的运算,而且能够适应不同浮点类型的浮点数。
·对于浮点数的指数部分的处理
在一些实施例中,数据更新单元,用于在第i浮点数的指数部分不满足非常规条件的情况下,将指数部分加上第一预设值,得到第i浮点数的更新指数部分;在第i浮点数的指数部分满足非常规条件的情况下,将指数部分加上第二预设值再减去小数部分的移位位数,得到第i浮点数的更新指数部分。
其中,非常规(de-normal)条件是指指数部分为零。不满足非常规条件即第i浮点数的指数部分不全为0。满足非常规条件即第i浮点数的指数部分全为0。第一预设值与浮点数的浮点类型相匹配,第二预设值包括第一预设值加上自定义值,小数部分的移位位数是基于对第i浮点数的小数部分的处理得到的。
可选地,浮点数的浮点类型包括FP8(E5M2、E4M3)、FP16、BF16、TF24、TF32、FP32的至少之一。不同的浮点类型对应有不同的第一预设值,第一预设值是基于浮点数的指数部分的位宽确定的,或,第一预设值是基于浮点数的长短确定的,其中,长浮点数包括FP32、FP16等,短浮点数包括FP8。第二预设值是基于第一预设值进行设置的,第二预设值为第一预设值与自定义值之和。
在一种可能的实施方式中,FP8对应的第一预设值是32、自定义值是1、第二预设值是33,FP16对应的第一预设值是368、自定义值是1、第二预设值是369,BF16对应的第一预设值是256、自定义值是1,TF24和TF32对应的第一预设值均为256、自定义值是1、第二预设值均是257,FP32中的第一子浮点数对应的第一预设值为256、自定义值是1、第二预设值是257,FP32中的第二子浮点数对应的第一预设值为256-12、自定义值是1、第二预设值是257-12。
在对第i浮点数的处理过程中,由于第i浮点数的小数部分可能会进行移位,而当小数部分进行移位时,移位后的小数部分会增大,则第i浮点数的指数部分需要减小以维持原本的第i浮点数的大小不变。本实施例中,通过上述对指数部分的处理,可以得到第i浮点数的更新指数部分,该更新指数部分的位宽大于原本的指数部分的位宽,这种方式能够提供第i浮点数的小数部分移位(mantissa shift)导致的指数部分调整所需下行空间。本实施例中得到更新指数部分的方式,对于数字电路是非常容易实现的,只需在指数部分的高位添加一个1(1表示为1’b1)即可,无需使用加法器。
在一些实施例中,当第i浮点数的浮点类型为FP32时,数据更新单元,用于在第i浮点数的指数部分不满足非常规条件的情况下,将第一子浮点数的指数部分加上第一子浮点数对应的第一预设值,得到第一子浮点数的更新指数部分、将第二子浮点数的指数部分加上第二子浮点数对应的第一预设值,得到第二子浮点数的更新指数部分;在第i浮点数的指数部分满足非常规条件的情况下,将第一子浮点数的指数部分加上第一子浮点数对应的第二预设值再减去第一子浮点数的小数部分的移位位数,得到第一子浮点数的更新指数部分、将第二子浮点数的指数部分加上第二子浮点数对应的第二预设值再减去第二子浮点数的小数部分的移位位数,得到第二子浮点数的更新指数部分。
上述实施例提供了对浮点数的指数部分的处理方式,通过上述处理,能够使得浮点数的指数部分提供小数部分的移位导致的指数部分调整所需的下行空间。
·对于浮点数的小数部分的处理
在一些实施例中,数据更新单元,用于将第i浮点数的小数部分添加隐藏比特值(add hidden bit),得到第i浮点数的处理小数部分;寻找第i浮点数的处理小数部分中的前导一位置(find leading one position);基于前导一位置,确定第i浮点数的小数部分的移位位数(man shift amount);按照小数部分的移位位数,对小数部分进行移位,得到第i浮点数的更新小数部分。
示例性的,隐藏比特值是基于指数部分确定的,当指数部分为0,则隐藏比特值为0,当指数部分不为0,则隐藏比特值为1。通过上述方式可以得到第i浮点数的更新小数部分,且第i浮点数的更新小数部分可以统一成1.xx格式,具体是基于处理小数部分中的前导一位置对小数部分进行移位来实现的。
例如,在将第i浮点数的小数部分添加隐藏比特值之后,如果处理小数部分为1.01,则前导一位置为小数点之前的1,则此时的移位位数是0。如果处理小数部分为0.10,则前导一位置为小数点之后的1,且小数点需要后移1位才能变成1.0,则此时的移位位数是1。如果处理小数部分是0.010,则前导一位置为小数点之后的1,且小数点需要后移2位才能变成1.0,则此时的移位位数是2。
在一些实施例中,当第i浮点数的浮点类型为FP32时,数据更新单元,用于将第i浮点数的小数部分(23bit)添加隐藏比特值,得到第i浮点数的处理小数部分(24bit);将该处理小数部分拆分成第一子浮点数的处理小数部分(12bit)和第二子浮点数的处理小数部分(12bit);寻找第一子浮点数的处理小数部分中的前导一位置、寻找第二子浮点数的处理小数部分中的前导一位置;基于第一子浮点数对应的前导一位置,确定第一子浮点数的小数部分的移位位数、基于第二子浮点数对应的前导一位置,确定第二子浮点数的小数部分的移位位数;按照第一子浮点数的小数部分的移位位数,对第一子浮点数的小数部分进行移位,得到第一子浮点数的更新小数部分、按照第二子浮点数的小数部分的移位位数,对第二子浮点数的小数部分进行移位,得到第二子浮点数的更新小数部分。
上述实施例中,对第i浮点数的小数部分进行更新,使得第i浮点数的更新小数部分能够统一成1.xx格式,有益效果至少包括以下两点:其一,避免后续的乘累加运算中需要处理de-normal;其二,将小数部分的有效bit放置到高位,从而能够尽量减少乘累加运算中的对齐移位(align shift)所导致的精度损失。
以下实施例结合不同浮点类型的浮点数的处理进行说明。
·浮点数FP8的处理
图4示出了本申请一个示例性实施例提供的浮点数FP8的数据格式转换的示意图。以第一浮点数和第二浮点数均为E5M2(1.5.2)类型的FP8为例,数据格式转换单元220对输入该FP8的处理步骤简述如下,其中,步骤2、步骤3-7、步骤8-13这三部分可以是并列执行或先后执行,本实施例对此不作限制。
1.获取输入的E5M2(1.5.2)类型的浮点数FP8;
2.确定该FP8的符号位,符号位为1bit(Sign 1bit);
3.确定该FP8的指数部分,指数部分为5bit(Exp 5bit);
4.确定该FP8的指数部分是否满足非常规条件(de-normal),de-normal是指指数部分为0;不满足则执行步骤5,满足则执行步骤6;
5.将该FP8的指数部分+32(Exp+32);
6.将该FP8的指数部分+33-小数部分的移位位数(Exp+33-man shift amount);
7.基于步骤5或步骤6得到该FP8的更新指数部分,更新指数部分为6bit(Exp’6bit);
8.确定该FP8的小数部分,小数部分为2bit(Mantissa 2bit);
9.将小数部分加上隐藏比特值(add hidden bit);
10.确定步骤9得到的处理小数部分为1.xx格式或是0.xx格式;
11.寻找处理小数部分中的前导一位置(find leading one position),基于前导一位置,确定该FP8的小数部分的移位位数;
12.按照步骤11得到的小数部分的移位位数,对小数部分进行移位,使小数部分变成1.xx格式;
13.基于步骤12得到该FP8的更新小数部分,更新小数部分为3bit(Man’3bit);
14.基于该FP8的符号位、更新指数部分和更新小数部分,得到22bit自定义数据格式的中间数据。
以2个浮点数FP8为例,22bit自定义数据格式的中间数据如下表5所示:
表5
其中,第一行表示E5M2类型的2个FP8对应的22bit自定义数据格式的中间数据,第21位S0表示第一个FP8的符号位,第20位S1表示第二个FP8的符号位,第一个FP8的更新小数部分Man0’在第11位至第9位,共3bit,第一个FP8的更新指数部分Exp0’分布在第1位至第0位以及第15位至第12位,共6bit;第二个FP8的更新小数部分Man1’在第19位至第17位,共3bit,第二个FP8的更新指数部分Exp1’分布在第7位至第2位,共6bit;第16位和第8位是保留域段,比特值均为0。
其中,第二行表示E4M3类型的2个FP8对应的22bit自定义数据格式的中间数据,第21位S0表示第一个FP8的符号位,第20位S1表示第二个FP8的符号位,第一个FP8的更新小数部分Man0’在第11位至第8位,共4bit,第一个FP8的更新指数部分Exp0’分布在第1位至第0位以及第15位至第12位,共6bit;第二个FP8的更新小数部分Man1’在第19位至第16位,共3bit,第二个FP8的更新指数部分Exp1’分布在第7位至第2位,共6bit。
本实施例中,将浮点数的原本的小数部分统一转换成1.xx格式,其中,若原本的小数部分是全0则无法转化,此时需要特别标记值为0。这种方式能够避免后续需要处理de-normal,还能小数部分的有效bit放置到高位,尽量减少后续的对齐移位所导致的精度损失。通过将指数部分+32,使得处理后的指数部分提供小数移位导致的指数部分调整所需下行空间,而将指数部分+32对于数字电路是非常容易实现的,只需要在高位添加1个1’b1即可,无需使用加法器,能够提高计算效率。
·浮点数FP16的处理
图5示出了本申请一个示例性实施例提供的浮点数FP16的数据格式转换的示意图。以第一浮点数和第二浮点数均为FP16(1.5.10)为例,数据格式转换单元220对输入该FP16的处理步骤简述如下,其中,步骤2、步骤3-7、步骤8-13这三部分可以是并列执行或先后执行,本实施例对此不作限制。
1.获取输入的浮点数FP16;
2.确定该FP16的符号位,符号位为1bit(Sign 1bit);
3.确定该FP16的指数部分,指数部分为5bit(Exp 5bit);
4.确定该FP16的指数部分是否满足非常规条件(de-normal),de-normal是指指数部分为0;不满足则执行步骤5,满足则执行步骤6;
5.将该FP16的指数部分+368(Exp+368);
6.将该FP16的指数部分+369-小数部分的移位位数(Exp+369-man shiftamount);
7.基于步骤5或步骤6得到该FP16的更新指数部分,更新指数部分为9bit(Exp’9bit);
8.确定该FP16的小数部分,小数部分为10bit(Mantissa 10bit);
9.将小数部分加上隐藏比特值(add hidden bit);
10.确定步骤9得到的处理小数部分为1.xx格式或是0.xx格式;
11.寻找处理小数部分中的前导一位置(find leading one position),基于前导一位置,确定该FP16的小数部分的移位位数;
12.按照步骤11得到的小数部分的移位位数,对小数部分进行移位,使小数部分变成1.xx格式;
13.基于步骤12得到该FP16的更新小数部分,更新小数部分为11bit(Man’11bit);
14.基于该FP16的符号位、更新指数部分和更新小数部分,得到22bit自定义数据格式的中间数据。
以1个浮点数FP16为例,22bit自定义数据格式的中间数据如下表6所示:
表6
其中,第21位S表示FP16的符号位,FP16的更新小数部分Man’在第11位至第1位,共11bit,FP16的更新指数部分Exp’在第20位至第12位,共9bit;保留域段位于第0位,比特值一般设置为0。
本实施例中,FP16的指数部分+368,使得指数部分从5bit扩展至9bit,这种方式同时能够兼容FP32(1.8.23),避免后续乘累加器需要处理不同的指数部分含义,能够提高芯片的计算效率。
·浮点数BF16的处理
图6示出了本申请一个示例性实施例提供的浮点数BF16的数据格式转换的示意图。以第一浮点数和第二浮点数均为BF16(1.8.7)为例,数据格式转换单元220对输入该BF16的处理步骤简述如下,其中,步骤2、步骤3-7、步骤8-13这三部分可以是并列执行或先后执行,本实施例对此不作限制。
1.获取输入的浮点数BF16;
2.确定该BF16的符号位,符号位为1bit(Sign 1bit);
3.确定该BF16的指数部分,指数部分为8bit(Exp 8bit);
4.确定该BF16的指数部分是否满足非常规条件(de-normal),de-normal是指指数部分为0;不满足则执行步骤5,满足则执行步骤6;
5.将该BF16的指数部分+256(Exp+368);
6.将该BF16的指数部分+257-小数部分的移位位数(Exp+257-man shiftamount);
7.基于步骤5或步骤6得到该BF16的更新指数部分,更新指数部分为9bit(Exp’9bit);
8.确定该BF16的小数部分,小数部分为7bit(Mantissa 7bit);
9.将小数部分加上隐藏比特值(add hidden bit);
10.确定步骤9得到的处理小数部分为1.xx格式或是0.xx格式;
11.寻找处理小数部分中的前导一位置(find leading one position),基于前导一位置,确定该BF16的小数部分的移位位数;
12.按照步骤11得到的小数部分的移位位数,对小数部分进行移位,使小数部分变成1.xx格式;
13.基于步骤12得到该BF16的更新小数部分,更新小数部分为11bit(Man’11bit);
14.基于该BF16的符号位、更新指数部分和更新小数部分,得到22bit自定义数据格式的中间数据。
以1个浮点数BF16为例,22bit自定义数据格式的中间数据如下表7所示:
表7
其中,第21位S表示BF16的符号位,BF16的更新小数部分Man’在第11位至第4位,共8bit,BF16的更新指数部分Exp’在第20位至第12位,共9bit;保留域段位于第3位至第0位,比特值一般设置为0。
本实施例中,指数部分+256可以提供小数部分移位导致的指数部分调整所需下行空间,而指数部分+256对于数字电路是非常容易实现的,只需要在高位添1个1’b1即可,无需使用加法器,能够提高计算效率。
·浮点数TF32或TF24的处理
图7示出了本申请一个示例性实施例提供的浮点数TF32的数据格式转换的示意图。以第一浮点数和第二浮点数均为TF32(1.8.11)为例,数据格式转换单元220对输入该TF32的处理步骤简述如下,其中,步骤2、步骤3-7、步骤8-13这三部分可以是并列执行或先后执行,本实施例对此不作限制。需要说明的是,第一浮点数和第二浮点数均为TF24(1.8.11)时的处理方式与完全TF32相同。
1.获取输入的浮点数TF32;
2.确定该TF32的符号位,符号位为1bit(Sign 1bit);
3.确定该TF32的指数部分,指数部分为8bit(Exp 8bit);
4.确定该TF32的指数部分是否满足非常规条件(de-normal),de-normal是指指数部分为0;不满足则执行步骤5,满足则执行步骤6;
5.将该TF32的指数部分+256(Exp+256);
6.将该TF32的指数部分+257-小数部分的移位位数(Exp+257-man shiftamount);
7.基于步骤5或步骤6得到该TF32的更新指数部分,更新指数部分为9bit(Exp’9bit);
8.确定该TF32的小数部分,小数部分为11bit(Mantissa 11bit);
9.将小数部分加上隐藏比特值(add hidden bit);
10.确定步骤9得到的处理小数部分为1.xx格式或是0.xx格式;
11.寻找处理小数部分中的前导一位置(find leading one position),基于前导一位置,确定该TF32的小数部分的移位位数;
12.按照步骤11得到的小数部分的移位位数,对小数部分进行移位,使小数部分变成1.xx格式;
13.基于步骤12得到该TF32的更新小数部分,更新小数部分为12bit(Man’12bit);
14.基于该TF32的符号位、更新指数部分和更新小数部分,得到22bit自定义数据格式的中间数据。
以1个浮点数TF32或TF24为例,22bit自定义数据格式的中间数据如下表8所示:
表8
其中,第一行表示TF32对应的22bit自定义数据格式的中间数据,第21位S表示TF32的符号位,TF32的更新小数部分Man’在第11位至第0位,共12bit,TF32的更新指数部分Exp’在第20位至第12位,共9bit。
其中,第二行表示TF24对应的22bit自定义数据格式的中间数据,第21位S表示TF24的符号位,TF24的更新小数部分Man’在第11位至第0位,共12bit,TF24的更新指数部分Exp’在第20位至第12位,共9bit。
还需要说明的是,在相关技术定义的TF24的一种数据格式中,该数据格式包括第18位至第0位,第18位是TF24的符号位、第17位至第10位为TF24的指数部分(8bit)、第9位至第0位是TF24的小数部分(10bit)。考虑到本实施例的大乘累加器单元支持12bit位宽的输入,在本实施例的TF24跟随相关技术的定义时,则大乘累加器单元存在1bit的算力被浪费。因此,本实施例中,将TF24的小数部分扩展1bit(10bit=>11bit),能够不增加电路面积(存储空间按Byte对齐,不使用也是空置),同时又提高了精度,能够充分发掘电路硬件潜力。
·浮点数FP32的处理
对于2个浮点数FP32相乘,需要将其中一个浮点数FP32的处理小数部分(24bit)拆分成2个12bit,分别与另一个浮点数FP32的处理小数部分的拆分结果相乘,最后再把4个乘积累加,得到原始的2个浮点数FP32的乘积结果。
图8示出了本申请一个示例性实施例提供的浮点数FP32的乘累加运算的示意图。以2个浮点数FP32的浮点数A和浮点数B为例,需要将浮点数A(FP32)拆分为子浮点数a0和子浮点数a1,A(FP32)=a0+a1;将浮点数B(FP32)拆分为子浮点数b0和子浮点数b1,B(FP32)=b0+b1。将a0和b0输入乘法器51相乘,将a0和b1输入乘法器52相乘,将a1和b0输入乘法器53相乘,将a1和b1输入乘法器54相乘,将4个乘积输入至加法器55相加,得到A*B乘积。
图9示出了本申请一个示例性实施例提供的浮点数FP32的乘累加运算的示意图。以第一浮点数和第二浮点数均为FP32(1.8.23)为例,数据格式转换单元220对输入其中一个FP32的处理步骤简述如下,其中,步骤2、步骤3-7、步骤8-14这三部分可以是并列执行或先后执行,本实施例对此不作限制。
1.获取输入的浮点数FP32(1.8.23);
2.确定该FP32的符号位,符号位为1bit(Sign 1bit);
3.确定该FP32的指数部分,指数部分为8bit(Exp 8bit);
4.确定该FP32的指数部分是否满足非常规条件(de-normal),de-normal是指指数部分为0;不满足则执行步骤5,满足则执行步骤6;
5.对于FP32的第一子浮点数对应的第一更新指数部分,第一更新指数部分=指数部分+256(Exp0=Exp+256);对于FP32的第二子浮点数对应的第二更新指数部分,第二更新指数部分=指数部分+256-12(Exp1=Exp+256-12);
6.对于FP32的第一子浮点数对应的第一更新指数部分,第一更新指数部分=指数部分+257-第一小数部分的移位位数(Exp0=Exp+257-man0 shift amount);对于FP32的第二子浮点数对应的第二更新指数部分,第二更新指数部分=指数部分+257-12-第二小数部分的移位位数(Exp1=Exp+257-12-man1 shift amount);
7.基于步骤5或步骤6得到该FP32的第一子浮点数的第一更新指数部分,第一更新指数部分为9bit(Exp0’9bit);基于步骤5或步骤6得到该FP32的第二子浮点数的第二更新指数部分,第二更新指数部分为9bit(Exp1’9bit);
8.确定该FP32的小数部分,小数部分为23bit(Mantissa 23bit);
9.将小数部分加上隐藏比特值(add hidden bit);
10.确定步骤9得到的处理小数部分(24bit)为1.xx格式或是0.xx格式;
11-1.将处理小数部分(24bit)拆分为第一子浮点数的第一小数部分(12bit);
11-2.将处理小数部分(24bit)拆分为第二子浮点数的第二小数部分(12bit);
12-1.寻找第一小数部分中的前导一位置(find leading one position),基于前导一位置,确定第一子浮点数的第一小数部分的移位位数;
12-2.寻找第二小数部分中的前导一位置(find leading one position),基于前导一位置,确定第二子浮点数的第二小数部分的移位位数;
13-1.按照步骤12-1得到的第一小数部分的移位位数,对第一小数部分进行移位,使第一小数部分变成1.xx格式;
13-2.按照步骤12-2得到的第二小数部分的移位位数,对第二小数部分进行移位,使第二小数部分变成1.xx格式;
14.基于步骤13-1得到第一子浮点数的第一更新小数部分,第一更新小数部分为12bit(Man0 12bit);基于步骤13-2得到第二子浮点数的第二更新小数部分,第二更新小数部分为12bit(Man0 12bit);
15.基于该第一子浮点数的符号位、第一更新指数部分和第一更新小数部分,得到22bit自定义数据格式的中间数据,基于该第二子浮点数的符号位、第二更新指数部分和第二更新小数部分,得到22bit自定义数据格式的中间数据,即一个FP32得到22bit自定义数据格式的中间数据*2。
以1个浮点数FP32为例,22bit自定义数据格式的中间数据如下表9所示:
表9
其中,第一行表示FP32的第一子浮点数对应的22bit自定义数据格式的中间数据,第21位S表示第一子浮点数的符号位,第一子浮点数的第一更新小数部分Man0’在第11位至第0位,共12bit,FP32的第一更新指数部分Exp0’在第20位至第12位,共9bit。
其中,第二行表示FP32的第二子浮点数对应的22bit自定义数据格式的中间数据,第21位S表示第二子浮点数的符号位,第二子浮点数的第二更新小数部分Man1’在第11位至第0位,共12bit,第二子浮点数的第二更新指数部分Exp1’在第20位至第12位,共9bit。
上述各实施例中的自定义格式的中间数据,总结如表10所示:
表10
上述实施例中的自定义数据的数据域段的域段位置设计,能够使得数据分发控制单元240所需要的多路复用器(MUX)尽可能简单,能够简化芯片的数据分发电路,从而更节约芯片的面积,且减少功耗。
例如,从表10可以看出,对于自定义数据格式的中间数据的第11位至第0位,具体到无符号INT8中的第11位至第0位、有符号INT8中的第11位至第0位、FP8(E5M2)中的第11位至第8位、FP8(E4M3)中的第11位至第8位、FP16的第11位至第0位、BF16的第11位至第0位、TF32的第11位至第0位、TF24的第11位至第0位、FP32的第11位至第0位,bit[11:8]完全不需要MUX,bit[7:0]仅需要使用到简单的二选一MUX。对于自定义数据格式的中间数据的第20位至第12位,具体到FP8(E4M3)中的第15位至第12位、FP16的第15位至第12位、BF16的第20位至第12位、TF32的第20位至第12位、TF24的第20位至第12位、FP32的第20位至第12位,bit[20:12]仅需使用到简单的二选一MUX。对于自定义数据格式的中间数据的第21位,完全无需使用MUX。
·数据分发控制单元240
在一些实施例中,乘累加器单元包括至少两个。至少两个乘累加器单元对应的位宽不同。其中,至少两个乘累加器中的一个乘累加器的位宽为12bit*12bit,该乘累加器也称为大乘累加器,其输出为24bit,另一个乘累加器的位宽为8bit*8bit,该乘累加器也称为小乘累加器,其输出为16bit。则数据分发控制单元240的输出端分别与至少两个乘累加器的输入端相连。数据分发控制单元240需要根据输入的操作数的第一数据格式或第二数据格式,选择将第一更新操作数和第二更新操作数分发至合适的乘累加器中进行后续运算。
在一个可能的实施方式中,数据分发控制单元240包括拆分单元和分发单元。其中,由于中间数据是按照操作数的符号位、数值部分进行放置的,因此数据分发控制单元240需要将符号位和数值部分进行重新组合确定相应的更新操作数进行后续运算。具体地,数据分发控制单元240用于执行以下处理:
拆分单元,用于从自定义数据格式的中间数据中,拆分得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数;
分发单元,用于在输入的第一操作数和第二操作数为第一数据格式的情况下,将第一更新操作数和第二更新操作数发送至至少两个乘累加器单元中的第一乘累加器单元,第一乘累加器单元是至少两个乘累加器单元中的任一乘累加器单元;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,将第一更新操作数和第二更新操作数发送至至少两个乘累加单元中的第二乘累加器单元,第二乘累加器单元是至少两个乘累加器单元中位宽大于阈值的乘累加器单元。
可选地,第一数据格式包括8位整数INT8,例如,有符号整数、无符号整数,第二数据格式包括浮点数,例如,8位浮点数FP8(E5M2、E4M3)、16位浮点数FP16(1.5.10)、BF16(1.8.7)、24位浮点数TF24(1.8.11,按3字节Byte存储)、32位浮点数TF32(1.8.11,按4Byte存储)、FP32(1.8.23)。
示例性的,第一乘累加器单元是至少两个乘累加器单元中的任一乘累加器单元,第二乘累加器单元是至少两个乘累加器单元中位宽大于阈值的乘累加器单元,也即大乘累加器单元。需要说明的是,在本实施例中,当第二数据格式为FP8时,数据分发控制单元240还可以用于将第一更新操作数和第二更新操作数发送至至少两个乘累加器单元中的第一乘累加器单元,第一乘累加器单元是至少两个乘累加器单元中的任一乘累加器单元。
在一些实施例中,拆分单元包括域段确定单元和数据拆分单元;拆分单元拆分出第一更新操作数和第二更新操作数包括如下处理:
域段确定单元,用于确定第一数据格式或第二数据格式指示的自定义数据格式的目标数据域段;
数据拆分单元,用于从自定义数据格式的中间数据中,拆分出目标数据域段对应的中间数据,得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数。
可选地,第一数据格式和第二数据格式分别指示有操作数的符号位、数值部分在自定义数据格式中的目标数据域段。例如,如表10所示,当第一操作数为FP16时,则域段确定单元确定出第一更新操作数的符号位在第21位、更新指数部分在第20至第12位、更新小数部分在第11位至第1位。则数据拆分单元通过拆分出相应的目标数据域段对应的中间数据,即可组合出该第一更新操作数。
图10示出了本申请一个示例性实施例提供的融合乘累加器的处理过程的示意图。以一个融合乘累加器10中包括一个数据格式转换单元20、一个数据分发控制单元30、一个大乘累加单元41(位宽为12bit*12bit)和一个小乘累加单元43(位宽为8bit*8bit)为例。
当输入的操作数的数据格式为FP16、BF16、TF32、TF24、FP32时,一个融合乘累加器10只能允许一对乘数进行运算,具体地,允许图10中的(1)部分的被乘数a011、乘数b012进行计算,将被乘数a011转换为自定义数据格式的被乘数X22,将乘数b012转换为自定义数据格式的被乘数Y24,通过数据分发控制单元30拆分得到被乘数x031和乘数y032,则输出只有一个乘积有效,即图10中的(1)部分的乘积A42。此时,大乘累加器41路径开启,小乘累加器43路径关闭以节约功耗。
当输入的操作数的数据格式为INT8、FP8时,一个融合乘累加器10一次可以允许两对乘数进行运算,具体地,允许图10中的(1)部分的被乘数a011、乘数b012、被乘数a113、乘数b114进行计算,将被乘数a011和/或被乘数a113转换为自定义数据格式的被乘数X22,将乘数b012和/或被乘数b114转换为自定义数据格式的被乘数Y24,通过数据分发控制单元30拆分得到被乘数x031、乘数y032、被乘数x133、乘数y134,则输出两个乘积有效,即图10中的(1)部分的乘积A42和乘积B44。此时,大乘累加器单元41和小乘累加器单元43的路径可以同时开启,相比FP16、BF16、TF32、TF24、FP32数据格式,芯片的算力可以翻倍。
如图10中的(2)部分所示,总结来说,在得到自定义数据格式的中间数据60之后,数据分发控制单元30用于从自定义数据格式的中间数据60中,拆分得到第一操作数对应的第一更新操作数62和第二操作数对应的第二更新操作数64。其中,在输入的操作数的数据格式为FP16、BF16、TF32、TF24、FP32时,一个融合乘累加器一次可以允许一对乘数输入进行计算,输出只有一个乘积有效,此时,该融合乘累加器中的大乘累加器单元41路径开启,小乘累加器单元43路径关闭以节约功耗。当输入的操作数的数据格式为INT8、FP8时,一个融合乘累加器一次可以允许两对乘数输入进行运算,输出两个乘积有效,此时,该融合乘累加器中的大乘累加器单元41和小乘累加器单元43的路径可以同时开启,相比FP16、BF16、TF32、TF24、FP32数据格式,芯片的算力可以翻倍。
上述实施例中,数据分发控制单元能够从自定义数据格式的中间数据中,根据输入的操作数的数据格式,拆分得到更新操作数,并将更新操作数送往相应的乘累加器单元,则本次运算时未使用到的乘累加器单元的路径可以关闭,能够节省功耗。
·乘累加器单元260
在一些实施例中,乘累加器单元包括至少两个。至少两个乘累加器单元对应的位宽不同。当数据分发控制单元240将第一更新操作数和第二更新操作数送至乘累加器单元的入口,则后续乘累加器单元需要将第一更新操作数和第二更新操作数进行乘累加运算,以得到第一操作数和第二操作数对应的结果。
在一些实施例中,乘累加器单元可以采用通用的乘法器和加法器实现。本实施例的乘累加器单元还加入了对输入的操作数的数据格式的类型感知,需要说明的是,此时的数据格式的类型被划分为三大类,即:INT8,FP8,非FP8的其他浮点类型。通过加入数据格式的类型感知,可以控制至少两个乘累加器单元(大小乘累加器单元)的开关,使得乘累加器单元的路径开启或关闭,进一步达到节省芯片功耗的目的。
在一种可能的实施方式中,除了不同乘累加器单元的位宽不同之外,每个乘累加器单元的运算原理是相同的。第一乘累加器单元包括第j乘累加器单元、第二乘累加器单元包括第j乘累加器单元。对于第一乘累加器单元和第二乘累加器单元中的第j乘累加器单元,第j乘累加器单元包括运算确定单元、异或操作单元、乘法运算单元、加法运算单元和结果输出单元;
运算确定单元,用于确定第一更新操作数的第一符号位和第一更新数值部分,以及,确定第二更新操作数的第二符号位和第二更新数值部分;
异或操作单元,用于对第一符号位和第二符号位进行异或操作,统计运算结果中包含的负数个数;
乘法运算单元,用于对第一更新数值部分和第二更新数值部分进行乘法运算,得到处理数值部分;
加法运算单元,用于基于运算结果中包含的负数个数和处理数值部分进行加法运算,得到第一更新操作数和第二更新操作数的乘累加结果;
结果输出单元,用于基于第一更新操作数和第二更新操作数的乘累加结果,得到第一操作数和第二操作数对应的运算结果。
示例性的,乘累加器单元对于第一更新操作数和第二更新操作数,需要分别将第一更新操作数拆分为第一符号位和第一更新数值部分、将第二更新操作数拆分为第二符号位和第二更新数值部分之后进行乘法运算与加法运算。
以下实施例对整数和浮点数对应的乘累加运算的处理分别进行介绍。
·对于整数的处理
在一些实施例中,输入的第一操作数和第二操作数为第一数据格式,第一数据格式包括整数格式,则第一操作数包括第一整数,第一更新操作数包括第一更新整数,第二操作数包括第二整数,第二更新操作数包括第二更新整数。此时至少两个乘累加器单元中的大小乘累加器单元路径可以全部开启。则对于第j个乘累加器存在以下处理:
运算确定单元,用于确定第一更新整数的第一符号位和第一更新数值部分,以及,确定第二更新整数的第二符号位和第二更新数值部分;
异或操作单元,用于对第一符号位和第二符号位进行异或操作,统计运算结果中包含的负数个数;
乘法运算单元,用于对第一更新数值部分和第二更新数值部分进行乘法运算,得到处理数值部分;
加法运算单元,用于基于运算结果中包含的负数个数和处理数值部分进行加法运算,得到第一更新整数和第二更新整数的乘累加结果(INT multiply add result);
结果输出单元,用于将第一更新整数和第二更新整数的乘累加结果,确定为第一整数和第二整数对应的运算结果。
可选地,上述的异或操作(XOR)单元可以通过异或逻辑操作并结合符号计数器(Sign count)实现,乘法运算单元可以基于通用乘法器实现,加法运算单元可以基于保留进位加法器CSA实现,上述结果输出单元可以基于MUX实现。
·对于浮点数的处理
在一些实施例中,输入的第一操作数和第二操作数为第二数据格式,第二数据格式包括浮点格式,第一操作数包括第一浮点数,第一更新操作数包括第一更新浮点数,第二操作数包括第二浮点数,第二更新操作数包括第二更新浮点数,数值部分包括指数部分和小数部分;则第j乘累加器单元中的乘法运算单元还包括指数部分运算单元和小数部分运算单元;
运算确定单元,用于确定第一更新浮点数的第一符号位、第一更新指数部分和第一更新小数部分;以及,确定第二更新浮点数的第二符号位、第二更新指数部分和第二更新小数部分;
异或操作单元,用于对第一符号位和第二符号位进行异或操作,统计运算结果中包含的负数个数;
指数部分运算单元,用于将第一更新指数部分和第二更新指数部分进行求和处理,得到处理指数部分;
小数部分运算单元,用于对第一更新小数部分和第二更新小数部分进行相乘处理,得到相乘小数部分;按照处理指数部分中的全局最大指数部分,对相乘小数部分进行移位,得到处理小数部分;
加法运算单元,用于基于运算结果中包含的负数个数、处理小数部分进行加法运算,得到第一更新操作数和第二更新操作数的乘累加结果;
结果输出单元,用于基于处理指数部分,并对第一更新操作数和第二更新操作数的乘累加结果进行标准化处理,得到第一操作数和第二操作数对应的运算结果。
可选地,上述的异或操作(XOR)单元可以通过异或逻辑操作并结合符号计数器(Sign count)实现,乘法运算单元可以基于通用乘法器实现,加法运算单元可以基于保留进位加法器CSA实现,上述结果输出单元可以基于MUX实现。
以下实施例结合一种可能的乘累加器单元的结构,对第一更新操作数和第二更新操作数的乘累加运算的过程进行说明。
图11示出了本申请一个示例性实施例提供的乘累加运算单元的运算过程的示意图。其中,融合乘累加器中包括2个乘累加器单元,分别是位宽为12bit*12bit的大乘累加器单元、位宽为8bit*8bit的小乘累加器单元。图11中的虚框70内部为小乘累加器单元对应的电路,该小乘累加器单元在输入的操作数为INT或FP8数据格式下才启动工作,图11中除了虚框70之外的结构处于常开状态。
还需说明的是,图11中区分了指数部分和小数部分,对于FP8则图11中的路径可以全开,对于INT则只有符号位与异或操作通路,以及虚框70的小乘累加器单元工作。其中,INT的数值部分走小数部分这一条路径,指数部分这一条路径则关闭,关闭方式包括在指数部分这一条路径中输入mute到0。在一些实施例中,关于符号位与异或操作通路,还可以进一步细分:由于无符号整数一定是正数,无需使用该通路统计负数个数,因此,当输入的操作数为无符号整数则该通路可以关闭,当输入的操作数为有符号整数则该通路才打开工作。
以融合乘累加器中包括2个乘累加器单元,分别是位宽为12bit*12bit的大乘累加器单元、位宽为8bit*8bit的小乘累加器单元为例,对从自定义数据格式中拆分出的第一更新操作数a和第二更新操作数b或第一更新操作数c和第二更新操作数d(图11中的a,b有8对、c,d有8对)进行乘累加运算,结合图11步骤简述如下,其中,步骤1-3、步骤4-6、步骤7-8这三部分可以是同时执行或并列执行;步骤21-23、步骤24-26、步骤27-28这三部分可以是同时执行或并列执行;当图11中的路径全开时上述六个部分也可以是同时执行或并列执行,本实施例对此不作限制。
1.确定a,b分别对应的符号位(sign S0),继续执行步骤2;
2.对符号位进行异或操作(XOR),继续执行步骤3;
3.统计a,b中的负数个数(sign cnt),继续执行步骤11;
4.确定a,b分别对应的指数部分(Exp0),继续执行步骤5;
5.将a,b分别对应的指数部分进行求和处理,得到处理指数部分,继续执行步骤6;
6.寻找处理指数部分中的最大指数部分(find max),继续执行步骤9;
7.确定a,b分别对应的小数部分(Man0),继续执行步骤8;
8.对于a,b分别对应的小数部分进行相乘处理,得到相乘小数部分,继续执行步骤10;
9.确定全局最大指数部分(find the global exp max),将全局最大指数部分通知至步骤10和步骤29;
10.按照步骤9确定的处理指数部分中的全局最大指数部分,对步骤8得到的相乘小数部分进行移位,得到处理小数部分,继续执行步骤11;
11.采用CSA基于运算结果中包含的负数个数、处理小数部分进行加法运算;当操作数a,b有8对的情况下,则通过本步骤11,对负数个数这1个数,以及对8对操作数a,b对应的8个乘积结果进行处理,处理后得到2个乘积结果,表示成如图11的步骤11所示的CSA:9:2;继续执行步骤12;
21.确定c,d分别对应的符号位(sign S0),继续执行步骤22;
22.对符号位进行异或操作(XOR),继续执行步骤23;
23.统计c,d中的负数个数(sign cnt),继续执行步骤30;
24.确定c,d分别对应的指数部分(Exp0),继续执行步骤25;
25.将c,d分别对应的指数部分进行求和处理,得到处理指数部分,继续执行步骤26;
26.寻找处理指数部分中的最大指数部分(find max),继续执行步骤9;
27.确定c,d分别对应的小数部分(Man0),继续执行步骤28;
28.对于c,d分别对应的小数部分进行相乘处理,得到相乘小数部分,继续执行步骤29;
29.按照步骤9确定的处理指数部分中的全局最大指数部分,对步骤28得到的相乘小数部分进行移位,得到处理小数部分,继续执行步骤30;
30.采用CSA基于运算结果中包含的负数个数、处理小数部分进行加法运算;当操作数c,d有8对的情况下,则通过本步骤11,对负数个数这1个数,以及对8对操作数c,d对应的8个乘积结果进行处理,处理后得到2个乘积结果,表示成如图11的步骤30所示的CSA:9:2;继续执行步骤12;
12.采用CSA基于步骤11和步骤30的乘积结果进行加法运算,处理后得到2个乘积结果,表示成如图11的步骤12所示的CSA:4:2;继续先后执行步骤13与步骤14,或同步执行步骤13与步骤14;
13.采用超前进位加法器CLA进行处理可以得到一个运算结果,当输入的操作数为整数则执行步骤17,当输入的操作数为浮点数则通过步骤15确定该运算结果对应的符号位和小数部分;
14.采用前导零预测器LZA寻找前导一位置,以确定隐藏比特值(hidden bit)的位置,继续执行16;
15.确定步骤13的运算结果对应的符号位和小数部分,继续执行步骤16;
16.基于步骤9确定的全局最大指数部分(the global max exp)、步骤15确定的符号位和小数部分、步骤14的前导一位置进行标准化处理,得到输入的操作数对应的运算结果;继续执行18;
17.将步骤13的运算结果确定为INT乘累加结果(INT multiply add result);
18.采用MUX选择输出步骤16或步骤17的运算结果;
19.输出运算结果,运算结果为标准IEEE格式下的FP32或INT8数据格式。
上述实施例中,整数和浮点数可以使用同一套进位保存加法器CSA,实现了电路资源的复用,节约了芯片的面积和功耗。
图12示出了本申请一个示例性实施例提供的数据运算的控制方法的流程图,该方法由计算机设备执行,该计算机设备可以是图1所示的终端120和/或服务器140,终端120和/或服务器140中设置有包括融合乘累加器的芯片,该方法具体可以由包括融合乘累加器的芯片执行,该方法可选包括步骤320、步骤340和步骤360:
步骤320,在输入的第一操作数和第二操作数为第一数据格式的情况下,对第一操作数和第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对第一操作数和第二操作数进行第二数据转换,得到自定义数据格式的中间数据;其中,第一数据格式和第二数据格式是操作数的不同标准格式,自定义数据格式是用于融合不同标准格式的操作数的自定义格式。
步骤340,从自定义数据格式的中间数据中,拆分得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数。
步骤360,对第一更新操作数和第二更新操作数进行乘累加运算,得到第一操作数和第二操作数对应的运算结果。
综上所述,本申请实施例提供了一种数据运算的控制方法,该方法由包括融合乘累加器的芯片执行,其中,在输入的第一操作数和第二操作数为第一数据格式的情况下,对第一操作数和第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对第一操作数和第二操作数进行第二数据转换,得到自定义数据格式的中间数据;其中,第一数据格式和第二数据格式是操作数的不同标准格式,自定义数据格式是用于融合不同标准格式的操作数的自定义格式;从自定义数据格式的中间数据中,拆分得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数;对第一更新操作数和第二更新操作数进行乘累加运算,得到第一操作数和第二操作数对应的运算结果。据此,该包括融合乘累加器的芯片中的同一融合乘累加器能够对整数和浮点数进行运算,从而提高了芯片的计算面效比,大大节约了芯片中的计算电路的资源开销,提高了硬件利用率,减小了芯片的功耗和面积。
在一些实施例中,对于第一操作数和第二操作数中的第i操作数,步骤320可以实现为以下步骤420、步骤440和步骤460:
步骤420,对于第一操作数和第二操作数中的第i操作数,确定第i操作数的数值部分和符号位。
步骤440,对数值部分进行更新,确定第i操作数的更新数值部分。
步骤460,基于第i操作数的符号位和更新数值部分,得到自定义数据格式的中间数据。
在一种可能的实施方式中,第一数据格式包括整数格式,第一操作数包括第一整数,第二操作数包括第二整数,第i操作数包括第i整数;对于第一整数和第二整数中的第i整数,步骤420实现为步骤420-1、步骤440实现为步骤440-1、步骤460实现为步骤460-1:
步骤420-1,对于第一整数和第二整数中的第i整数,确定第i整数的数值部分和符号位。
步骤440-1,对数值部分进行更新,确定第i整数的更新数值部分。
步骤460-1,基于第i整数的符号位和更新数值部分,得到自定义数据格式的中间数据。
在一些实施例中,在步骤440-1中,在第i整数为负整数的情况下,将数值部分取反并加一,确定第i整数的更新数值部分。
在一种可能的实施方式中,第二数据格式包括浮点格式,第一操作数包括第一浮点数,第二操作数包括第二浮点数,第i操作数包括第i浮点数,数值部分包括指数部分和小数部分;对于第一浮点数和第二浮点数中的第i浮点数,步骤420可以实现为步骤420-2、步骤440实现为步骤440-2、步骤460实现为步骤460-2:
步骤420-2,对于第一浮点数和第二浮点数中的第i浮点数,确定第i浮点数的指数部分、小数部分和符号位。
步骤440-2,将指数部分进行更新,确定第i浮点数的更新指数部分;将小数部分进行更新,确定第i浮点数的更新小数部分。
步骤460-2,基于第i浮点数的符号位、更新指数部分和更新小数部分,得到自定义数据格式的中间数据。
在一些实施例中,步骤440-2具体实现为:在第i浮点数的指数部分不满足非常规条件的情况下,将指数部分加上第一预设值,得到第i浮点数的更新指数部分;在第i浮点数的指数部分满足非常规条件的情况下,将指数部分加上第二预设值再减去小数部分的移位位数,得到第i浮点数的更新指数部分;
其中,非常规条件是指指数部分为零,第一预设值与浮点数的浮点类型相匹配,第二预设值包括第一预设值加上自定义值,小数部分的移位位数是基于对第i浮点数的小数部分的处理得到的。
在一些实施例中,步骤460-2具体实现为:将第i浮点数的小数部分添加隐藏比特值,得到第i浮点数的处理小数部分;寻找第i浮点数的处理小数部分中的前导一位置;基于前导一位置,确定第i浮点数的小数部分的移位位数;按照小数部分的移位位数,对小数部分进行移位,得到第i浮点数的更新小数部分。
在一些实施例中,上述自定义数据格式包括以下至少一种数据域段:
符号域段,用于表征中间数据的符号;
数值域段,用于表征中间数据的数值;
保留域段,用于将中间数据的位宽维持为指定位宽。
在一种可能的实施方式中,步骤340可以实现为步骤520和步骤540:
步骤520,确定第一数据格式或第二数据格式指示的自定义数据格式的目标数据域段。
步骤540,从自定义数据格式的中间数据中,拆分出目标数据域段对应的中间数据,得到第一操作数对应的第一更新操作数和第二操作数对应的第二更新操作数。
在一些实施例中,步骤360可以实现为步骤610、步骤620、步骤630、步骤640和步骤650:
步骤610,确定第一更新操作数的第一符号位和第一更新数值部分,以及,确定第二更新操作数的第二符号位和第二更新数值部分。
步骤620,对第一符号位和第二符号位进行异或操作,统计运算结果中包含的负数个数。
步骤630,对第一更新数值部分和第二更新数值部分进行乘法运算,得到处理数值部分。
步骤640,基于运算结果中包含的负数个数和处理数值部分进行加法运算,得到第一更新操作数和第二更新操作数的乘累加结果。
步骤650,基于第一更新操作数和第二更新操作数的乘累加结果,得到第一操作数和第二操作数对应的运算结果。
在一种可能的实施方式中,第一数据格式包括整数格式,第一操作数包括第一整数,第一更新操作数包括第一更新整数,第二操作数包括第二整数,第二更新操作数包括第二更新整数;步骤610实现为步骤610-1、步骤620实现为步骤620-1、步骤630实现为步骤630-1、步骤640实现为步骤640-1、步骤650实现为步骤650-1:
步骤610-1,确定第一更新整数的第一符号位和第一更新数值部分,以及,确定第二更新整数的第二符号位和第二更新数值部分。
步骤620-1,对第一符号位和第二符号位进行异或操作,统计运算结果中包含的负数个数。
步骤630-1,对第一更新数值部分和第二更新数值部分进行乘法运算,得到处理数值部分。
步骤640-1,基于运算结果中包含的负数个数和处理数值部分进行加法运算,得到第一更新整数和第二更新整数的乘累加结果。
步骤650-1,将第一更新整数和第二更新整数的乘累加结果,确定为第一整数和第二整数对应的运算结果。
在一种可能的实施方式中,第二数据格式包括浮点格式,第一操作数包括第一浮点数,第一更新操作数包括第一更新浮点数,第二操作数包括第二浮点数,第二更新操作数包括第二更新浮点数,数值部分包括指数部分和小数部分;乘法运算单元还包括指数部分运算单元和小数部分运算单元;步骤610实现为步骤610-2、步骤620实现为步骤620-2、步骤630实现为步骤630-2、步骤640实现为步骤640-2、步骤650实现为步骤650-2:
步骤610-2,确定第一更新浮点数的第一符号位、第一更新指数部分和第一更新小数部分;以及,确定第二更新浮点数的第二符号位、第二更新指数部分和第二更新小数部分。
步骤620-2,对第一符号位和第二符号位进行异或操作,统计运算结果中包含的负数个数。
步骤630-2,将第一更新指数部分和第二更新指数部分进行求和处理,得到处理指数部分;对第一更新小数部分和第二更新小数部分进行相乘处理,得到相乘小数部分;按照处理指数部分中的全局最大指数部分,对相乘小数部分进行移位,得到处理小数部分。
步骤640-2,基于运算结果中包含的负数个数、处理小数部分进行加法运算,得到第一更新操作数和第二更新操作数的乘累加结果。
步骤650-2,基于处理指数部分,并对第一更新操作数和第二更新操作数的乘累加结果进行标准化处理,得到第一操作数和第二操作数对应的运算结果。
需要说明的是,上述提供的一个或多个数据运算的控制方法的实施例中的具体限定可以参见上文中对于包括融合乘累加器的芯片的限定,在此不再赘述。
本申请实施例还提供了一种计算机设备,该计算机设备包括:如上所述的包括融合乘累加器的芯片。
本申请实施例还提供了一种计算机设备,该计算机设备包括:处理器和存储器,存储器中存储有计算机程序;处理器,用于执行存储器中的计算机程序以实现上述各方法实施例提供的数据运算的控制方法。
示例地,图13是本申请一个示例性实施例提供的计算机设备1000的结构框图。可选地,该计算机设备1000为服务器1000。
通常,服务器1000包括有:处理器1001和存储器1002。
处理器1001可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1001可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器1001也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(CentralProcessing Unit,CPU);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1001可以在集成有图像处理器(Graphics Processing Unit,GPU),GPU用于负责显示屏所需要显示的内容的渲染和绘制。在一些实施例中,处理器1001还可以包括人工智能(Artificial Intelligence,AI)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1002可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1002还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1002中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1001所执行以实现本申请中方法实施例提供的数据运算的控制方法。
在一些实施例中,服务器1000还可选包括有:输入接口1003和输出接口1004。处理器1001、存储器1002和输入接口1003、输出接口1004之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与输入接口1003、输出接口1004相连。输入接口1003、输出接口1004可被用于将输入/输出(Input/Output,I/O)相关的至少一个外围设备连接到处理器1001和存储器1002。在一些实施例中,处理器1001、存储器1002和输入接口1003、输出接口1004被集成在同一芯片或电路板上;在一些其他实施例中,处理器1001、存储器1002和输入接口1003、输出接口1004中的任意一个或两个可以在单独的芯片或电路板上实现,本申请实施例对此不加以限定。
本领域技术人员可以理解,图13中示出的结构并不构成对计算机设备1000的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
本申请提供了一种芯片,所述芯片包括上述的融合乘累加器。本申请还提供了一种芯片,所述芯片包括可编程逻辑电路和/或程序指令,当芯片在计算机设备上运行时,用于实现上述方法实施例提供的数据运算的控制方法,该计算机设备中包括上述的包括融合乘累加器的芯片。
本申请提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序由处理器加载并执行以实现上述方法实施例提供的数据运算的控制方法。
本申请提供了一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取所述计算机指令,处理器执行所述计算机指令,使得所述计算机设备的处理器加载并执行以实现上述方法实施例提供的数据运算的控制方法。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的计算机可读存储介质可以是只读存储器,磁盘或光盘等。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (15)
1.一种包括融合乘累加器的芯片,其特征在于,所述融合乘累加器包括数据格式转换单元、数据分发控制单元和乘累加器单元;所述数据格式转换单元的输出端与所述数据分发控制单元的输入端相连,所述数据分发控制单元的输出端与所述乘累加器单元的输入端相连;
所述数据格式转换单元,用于在输入的第一操作数和第二操作数为第一数据格式的情况下,对所述第一操作数和所述第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对所述第一操作数和所述第二操作数进行第二数据转换,得到所述自定义数据格式的中间数据;其中,所述第一数据格式和所述第二数据格式是操作数的不同标准格式,所述自定义数据格式是用于融合所述不同标准格式的操作数的自定义格式;
所述数据分发控制单元,用于从所述自定义数据格式的中间数据中,拆分得到所述第一操作数对应的第一更新操作数和所述第二操作数对应的第二更新操作数;将所述第一更新操作数和所述第二更新操作数发送至所述乘累加器单元;
所述乘累加器单元,用于对所述第一更新操作数和所述第二更新操作数进行乘累加运算,得到所述第一操作数和所述第二操作数对应的运算结果。
2.根据权利要求1所述的芯片,其特征在于,所述数据格式转换单元包括数据确定单元、数据更新单元和数据处理单元;
所述数据确定单元,用于对于所述第一操作数和所述第二操作数中的第i操作数,确定所述第i操作数的数值部分和符号位;
所述数据更新单元,用于对所述数值部分进行更新,确定所述第i操作数的更新数值部分;
所述数据处理单元,用于基于所述第i操作数的所述符号位和所述更新数值部分,得到所述自定义数据格式的中间数据。
3.根据权利要求2所述的芯片,其特征在于,所述第一数据格式包括整数格式,所述第一操作数包括第一整数,所述第二操作数包括第二整数,所述第i操作数包括第i整数;
所述数据确定单元,用于对于所述第一整数和所述第二整数中的第i整数,确定所述第i整数的数值部分和符号位;
所述数据更新单元,用于对所述数值部分进行更新,确定所述第i整数的更新数值部分;
所述数据处理单元,用于基于所述第i整数的所述符号位和所述更新数值部分,得到所述自定义数据格式的中间数据。
4.根据权利要求3所述的芯片,其特征在于,所述数据更新单元,用于在所述第i整数为负整数的情况下,将所述数值部分取反并加一,确定所述第i整数的更新数值部分。
5.根据权利要求2所述的芯片,其特征在于,所述第二数据格式包括浮点格式,所述第一操作数包括第一浮点数,所述第二操作数包括第二浮点数,所述第i操作数包括第i浮点数,所述数值部分包括指数部分和小数部分;
所述数据确定单元,用于对于所述第一浮点数和所述第二浮点数中的第i浮点数,确定所述第i浮点数的指数部分、小数部分和符号位;
所述数据更新单元,用于将所述指数部分进行更新,确定所述第i浮点数的更新指数部分;将所述小数部分进行更新,确定所述第i浮点数的更新小数部分;
所述数据处理单元,用于基于所述第i浮点数的所述符号位、所述更新指数部分和所述更新小数部分,得到所述自定义数据格式的中间数据。
6.根据权利要求5所述的芯片,其特征在于,所述数据更新单元,用于在所述第i浮点数的指数部分不满足非常规条件的情况下,将所述指数部分加上第一预设值,得到所述第i浮点数的更新指数部分;在所述第i浮点数的指数部分满足所述非常规条件的情况下,将所述指数部分加上第二预设值再减去小数部分的移位位数,得到所述第i浮点数的更新指数部分;
其中,所述非常规条件是指所述指数部分为零,所述第一预设值与所述浮点数的浮点类型相匹配,所述第二预设值包括所述第一预设值加上自定义值,所述小数部分的移位位数是基于对所述第i浮点数的小数部分的处理得到的。
7.根据权利要求5所述的芯片,其特征在于,所述数据更新单元,用于将所述第i浮点数的小数部分添加隐藏比特值,得到所述第i浮点数的处理小数部分;寻找所述第i浮点数的处理小数部分中的前导一位置;基于所述前导一位置,确定所述第i浮点数的小数部分的移位位数;按照所述小数部分的移位位数,对所述小数部分进行移位,得到所述第i浮点数的更新小数部分。
8.根据权利要求1或7任一所述的芯片,其特征在于,所述自定义数据格式包括以下至少一种数据域段:
符号域段,用于表征所述中间数据的符号;
数值域段,用于表征所述中间数据的数值;
保留域段,用于将所述中间数据的位宽维持为指定位宽。
9.根据权利要求1至7任一所述的芯片,其特征在于,所述乘累加器单元包括至少两个,所述数据分发控制单元包括拆分单元和分发单元;
所述拆分单元,用于从所述自定义数据格式的中间数据中,拆分得到所述第一操作数对应的第一更新操作数和所述第二操作数对应的第二更新操作数;
所述分发单元,用于在输入的所述第一操作数和所述第二操作数为所述第一数据格式的情况下,将所述第一更新操作数和所述第二更新操作数发送至所述至少两个乘累加器单元中的第一乘累加器单元,所述第一乘累加器单元是所述至少两个乘累加器单元中的任一乘累加器单元;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,将所述第一更新操作数和所述第二更新操作数发送至所述至少两个乘累加单元中的第二乘累加器单元,所述第二乘累加器单元是所述至少两个乘累加器单元中位宽大于阈值的乘累加器单元。
10.根据权利要求9所述的芯片,其特征在于,所述拆分单元包括域段确定单元和数据拆分单元;
所述域段确定单元,用于确定所述第一数据格式或第二数据格式指示的所述自定义数据格式的目标数据域段;
所述数据拆分单元,用于从所述自定义数据格式的中间数据中,拆分出所述目标数据域段对应的中间数据,得到所述第一操作数对应的第一更新操作数和所述第二操作数对应的第二更新操作数。
11.根据权利要求9所述的芯片,其特征在于,对于所述第一乘累加器单元和所述第二乘累加器单元中的第j乘累加器单元,所述第j乘累加器单元包括运算确定单元、异或操作单元、乘法运算单元、加法运算单元和结果输出单元;
所述运算确定单元,用于确定所述第一更新操作数的第一符号位和第一更新数值部分,以及,确定所述第二更新操作数的第二符号位和第二更新数值部分;
所述异或操作单元,用于对所述第一符号位和所述第二符号位进行异或操作,统计运算结果中包含的负数个数;
所述乘法运算单元,用于对所述第一更新数值部分和所述第二更新数值部分进行乘法运算,得到处理数值部分;
所述加法运算单元,用于基于所述运算结果中包含的负数个数和所述处理数值部分进行加法运算,得到所述第一更新操作数和所述第二更新操作数的乘累加结果;
所述结果输出单元,用于基于所述第一更新操作数和所述第二更新操作数的乘累加结果,得到所述第一操作数和所述第二操作数对应的运算结果。
12.根据权利要求11所述的芯片,其特征在于,所述第一数据格式包括整数格式,所述第一操作数包括第一整数,第一更新操作数包括第一更新整数,所述第二操作数包括第二整数,所述第二更新操作数包括第二更新整数;
所述运算确定单元,用于确定所述第一更新整数的第一符号位和第一更新数值部分,以及,确定所述第二更新整数的第二符号位和第二更新数值部分;
所述异或操作单元,用于对所述第一符号位和所述第二符号位进行异或操作,统计运算结果中包含的负数个数;
所述乘法运算单元,用于对所述第一更新数值部分和所述第二更新数值部分进行乘法运算,得到处理数值部分;
所述加法运算单元,用于基于所述运算结果中包含的负数个数和所述处理数值部分进行加法运算,得到所述第一更新整数和所述第二更新整数的乘累加结果;
所述结果输出单元,用于将所述第一更新整数和所述第二更新整数的乘累加结果,确定为所述第一整数和所述第二整数对应的运算结果。
13.根据权利要求11所述的芯片,其特征在于,所述第二数据格式包括浮点格式,所述第一操作数包括第一浮点数,所述第一更新操作数包括第一更新浮点数,所述第二操作数包括第二浮点数,所述第二更新操作数包括第二更新浮点数,所述数值部分包括指数部分和小数部分;所述乘法运算单元还包括指数部分运算单元和小数部分运算单元;
所述运算确定单元,用于确定所述第一更新浮点数的第一符号位、第一更新指数部分和第一更新小数部分;以及,确定所述第二更新浮点数的第二符号位、第二更新指数部分和第二更新小数部分;
所述异或操作单元,用于对所述第一符号位和所述第二符号位进行异或操作,统计运算结果中包含的负数个数;
所述指数部分运算单元,用于将所述第一更新指数部分和所述第二更新指数部分进行求和处理,得到处理指数部分;
所述小数部分运算单元,用于对所述第一更新小数部分和所述第二更新小数部分进行相乘处理,得到相乘小数部分;按照所述处理指数部分中的全局最大指数部分,对所述相乘小数部分进行移位,得到处理小数部分;
所述加法运算单元,用于基于所述运算结果中包含的负数个数、所述处理小数部分进行加法运算,得到所述第一更新操作数和所述第二更新操作数的乘累加结果;
所述结果输出单元,用于基于所述处理指数部分,并对所述第一更新操作数和所述第二更新操作数的乘累加结果进行标准化处理,得到所述第一操作数和所述第二操作数对应的运算结果。
14.一种计算机设备,其特征在于,所述计算机设备包括如权利要求1至13任一所述的包括融合乘累加器的芯片。
15.一种数据运算的控制方法,其特征在于,所述方法包括:
在输入的第一操作数和第二操作数为第一数据格式的情况下,对所述第一操作数和所述第二操作数进行第一数据转换,得到自定义数据格式的中间数据;或,在输入的第一操作数和第二操作数为第二数据格式的情况下,对所述第一操作数和所述第二操作数进行第二数据转换,得到所述自定义数据格式的中间数据;其中,所述第一数据格式和所述第二数据格式是操作数的不同标准格式,所述自定义数据格式是用于融合所述不同标准格式的操作数的自定义格式;
从所述自定义数据格式的中间数据中,拆分得到所述第一操作数对应的第一更新操作数和所述第二操作数对应的第二更新操作数;
对所述第一更新操作数和所述第二更新操作数进行乘累加运算,得到所述第一操作数和所述第二操作数对应的运算结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311373968.4A CN117420982A (zh) | 2023-10-20 | 2023-10-20 | 包括融合乘累加器的芯片、设备及数据运算的控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311373968.4A CN117420982A (zh) | 2023-10-20 | 2023-10-20 | 包括融合乘累加器的芯片、设备及数据运算的控制方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117420982A true CN117420982A (zh) | 2024-01-19 |
Family
ID=89524233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311373968.4A Pending CN117420982A (zh) | 2023-10-20 | 2023-10-20 | 包括融合乘累加器的芯片、设备及数据运算的控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117420982A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891430A (zh) * | 2024-03-18 | 2024-04-16 | 中科亿海微电子科技(苏州)有限公司 | 一种应用于fpga嵌入式dsp的浮点乘加结构 |
-
2023
- 2023-10-20 CN CN202311373968.4A patent/CN117420982A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891430A (zh) * | 2024-03-18 | 2024-04-16 | 中科亿海微电子科技(苏州)有限公司 | 一种应用于fpga嵌入式dsp的浮点乘加结构 |
CN117891430B (zh) * | 2024-03-18 | 2024-05-14 | 中科亿海微电子科技(苏州)有限公司 | 一种应用于fpga嵌入式dsp的浮点乘加结构 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115934030B (zh) | 算数逻辑单元、浮点数乘法计算的方法及设备 | |
CN107608715B (zh) | 用于执行人工神经网络正向运算的装置及方法 | |
US9519460B1 (en) | Universal single instruction multiple data multiplier and wide accumulator unit | |
US7188133B2 (en) | Floating point number storage method and floating point arithmetic device | |
CN109739555A (zh) | 包括乘累加模块的芯片、终端及控制方法 | |
CN108139912B (zh) | 在浮点运算期间计算和保留误差边界的装置和方法 | |
CN117420982A (zh) | 包括融合乘累加器的芯片、设备及数据运算的控制方法 | |
CN111381808B (zh) | 乘法器、数据处理方法、芯片及电子设备 | |
US20170017467A1 (en) | Integer/floating point divider and square root logic unit and associates methods | |
CN117215646A (zh) | 一种浮点运算方法、处理器、电子设备及存储介质 | |
CN113625989B (zh) | 数据运算装置、方法、电子设备及存储介质 | |
CN117648959A (zh) | 支持神经网络运算的多精度操作数运算装置 | |
Dorrigiv et al. | Low area/power decimal addition with carry-select correction and carry-select sum-digits | |
US8898214B2 (en) | Method and apparatus to perform floating point operations | |
CN116795324A (zh) | 混合精度浮点乘法装置和混合精度浮点数处理方法 | |
Mounica et al. | Efficient implementation of mixed‐precision multiply‐accumulator unit for AI algorithms | |
CN113625990B (zh) | 浮点转定点装置、方法、电子设备及存储介质 | |
Amaricai et al. | Low‐precision DSP‐based floating‐point multiply‐add fused for Field Programmable Gate Arrays | |
Neto et al. | Decimal addition on FPGA based on a mixed BCD/excess-6 representation | |
CN109558109B (zh) | 数据运算装置及相关产品 | |
CN109582279B (zh) | 数据运算装置及相关产品 | |
US6895424B2 (en) | Method and circuit for alignment of floating point significants in a SIMD array MPP | |
CN111313905A (zh) | 一种浮点数转换方法及装置 | |
US8185723B2 (en) | Method and apparatus to extract integer and fractional components from floating-point data | |
JPH04172526A (ja) | 浮動小数点除算器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |