CN115357214A - 一种兼容非对称多精度混合乘累加运算的运算单元 - Google Patents
一种兼容非对称多精度混合乘累加运算的运算单元 Download PDFInfo
- Publication number
- CN115357214A CN115357214A CN202210923139.8A CN202210923139A CN115357214A CN 115357214 A CN115357214 A CN 115357214A CN 202210923139 A CN202210923139 A CN 202210923139A CN 115357214 A CN115357214 A CN 115357214A
- Authority
- CN
- China
- Prior art keywords
- unit
- bits
- data
- numbers
- int8
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- 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/544—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 for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本公开揭示了一种兼容非对称多精度混合乘累加运算的运算单元。这是一种兼容非对称数据格式的,多精度混合乘累加运算的运算单元设计。该PE单元,基于一组定点乘法器(4个5×5乘法器),针对不同精度的数据,对传入数据进行高低位拆分和符号位扩展,并通过控制指定乘法器的激活状态来降低功耗,并且通过精度模式选择和乘法器使能信号来实现对PE单元的空间复用和时间复用,最终完成不同精度数据的乘累加运算。该发明对于神经网络稀疏量化运算中的芯片资源闲置、功耗浪费和面积优化具有重要的意义。
Description
技术领域
本公开属于处理器和计算技术领域,特别涉及一种兼容非对称多精度混合乘累加运算的运算单元。
背景技术
目前主流的并行计算架构(如CPU和GPU)采用大规模运算单元阵列的形式提供并行计算能力,从而加速神经网络的推理计算。乘累加器作为运算单元阵列的基本构成元件,其设计对架构的算力、功耗以及面积的影响至关重要。在保持图像分类、检测、分割等任务的准确率的前提下,为了降低神经网络的计算复杂度,往往将浮点精度的数据非对称量化到动态的4bit、8bit、16bit定点(Dynamic 8-bit Fixed Point)。采用int4、int8、int16代替fp32进行卷积运算,除了明显的位宽节省外,在减少芯片资源占用和降低计算能耗方面也都有数量级的提升。
虽然现有的CPU、DSP、GPU可以支持部分4bit、8bit、16bit低精度的单指令多数据风格的定点运算,但是并未针对深度学习场景进行优化,无法满足连续低bit定点数据的乘累加需求。当其应用于4bit、8bit精度的定点乘加运算时,会造成极大的算力资源、功耗和面积浪费。因此,设计支持多种混合精度乘累加运算且可复用的计算单元,是现代处理器设计减少芯片资源和能耗主要瓶颈之一。
发明内容
鉴于此,本公开提供了一种兼容非对称多精度混合乘累加运算的MAC单元,其特征在于:
所述MAC(Multiple and Accumulate)单元用于实现数据的乘累加计算,分别对应于卷积模式和Depthwise模式;
MAC单元分为PE阵列和ACC单元,其中PE阵列包含64个PE单元,ACC单元包含64个加法器;
Depthwise模式下,PE阵列仅有斜对角线上的PE单元使能。
优选的,
对于Depthwise模式,PE单元中的8个MUL单元的运算结果不进行求和,直接传出PE单元。
优选的,
对于卷积模式,对PE单元中的8个MUL单元的运算结果进行求和,8个17bit数据求和结果Psum为20bit。
优选的,
对于乘法单元即MUL单元,其中,将9×9乘法器结构拆分为4个5×5乘法器,从而支持int4运算,而对于int16和int8的运算,则采用数据拆分的方式进行运算。
优选的,
对于int8的运算,输入的两个8Byte数据A0、W0,各包含8个数,每个数是8bit,将其中一组数记为a、w,对a、w进行高低位拆分和符号位扩展,然后送入PE单元,一个周期可以完成计算。
优选的,
对于int4的运算,输入的两个8Byte数据A0、W0各包含16个数,每个数是4bit,扩展为有符号数后是5bit,两个数分为高低位拼接成一组数为10bit,将其中一组数记为a,w,送入PE单元,一个周期可以完成计算。
优选的,
对于int16的运算,输入的两个16Byte数A0、W0各包含8个数,每个数是16bit,将其中一组数记为a,w,分为高低8bit之后,两两组合送入PE单元,按照int8运算方式,通过分时复用四个周期可以完成计算。
优选的,
对于int4、int8、int16三种精度的混合数据类型组合,其数据范围包括20种组合,其中12种组合A与W的精度相同,8种组合A与W为混合精度;
由int16运算规则可知,可以将输入数据进行高低位拆分后,按照int8的运算规则计算,所以在分析乘法溢出问题时,只需要分析int8的情况即可;
由标准int8运算规则可知,MUL单元在进行int8运算时,将数据符号位扩展为9bit,因此MUL单元实际支持的输入数据范围为[-256,255],满足上述任意混合数据类型与混合精度的运算结果不溢出,硬件支持非对称量化数据的计算。
优选的,
ACC单元包含64个加法器,两输入一输出,用于实现对不同时域下的运算结果进行累加,同时可以对int16运算进行移位加和,以此,PE阵列部分只需要考虑20位Psum的存放,从而简化PE阵列设计,节省资源。
优选的,
卷积模式下,每个PE单元输出一个Psum,PE阵列的64个PE单元共输出64个Psum,根据控制信号可以分别与上一周期输出的64个Psum相加,共需64个加法器;
Depthwise模式下,对于int8、int16运算,每个PE单元输出8个乘积结果,8个MUL单元的运算结果不进行加和,直接传出8个乘法结果ra0~ra7,每个结果为17bit,其中,为兼容int4运算进行符号位扩展到18bit;PE阵列的8个使能的PE单元共输出64个乘积结果。
由此,本公开揭示了一种兼容非对称多精度混合乘累加运算的运算单元。这是一种兼容非对称数据格式的,多精度混合乘累加运算的运算单元设计,本文称作PE(Processing Element)单元。该PE单元,基于一组定点乘法器(4个5×5乘法器),针对不同精度的数据,对传入数据进行高低位拆分和符号位扩展,并通过控制指定乘法器的激活状态来降低功耗,并且通过精度模式选择和乘法器使能信号来实现对PE单元的空间复用和时间复用,最终完成不同精度数据的乘累加运算。该发明对于神经网络稀疏量化运算中的芯片资源闲置、功耗浪费和面积优化具有重要的意义。
附图说明
图1是本公开一个实施例中卷积模式下的MAC阵列的示意图;
图2是本公开一个实施例中Depthwise模式下的MAC阵列的示意图;
图3是本公开一个实施例中卷积模式下的PE单元的示意图;
图4是本公开一个实施例中Depthwise模式下的PE单元的示意图;
图5是本公开一个实施例中,MUL乘法器拆分及使用该结构实现int8的乘法计算的示意图;
图5A是本公开一个实施例中,int4运算时的数据示意图;
图6是本公开一个实施例中,MUL乘法器拆分及使用该结构实现int4的乘法计算的示意图;
图7A至7D是本公开一个实施例中,MUL乘法器拆分及使用该结构实现int16的乘法计算示意图;
图8是本公开一个实施例中,输入数据非对称量化单元的示意图;
图9是本公开一个实施例中,int16卷积模式的示意图;
图10是本公开一个实施例中,int16 Depthwise模式的示意图;
图11A至图11B是本公开一个实施例中,int16-int8混合精度卷积模式的示意图;
图12A至图12B是本公开一个实施例中,int8-int16混合精度卷积模式的示意图。
具体实施方式
为进一步描述本发明,下面结合附图1至图12B对其作进一步说明。
为使本公开实施方式的目的、技术方案和优点更加清楚,下面将结合本公开实施方式对本公开实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本公开一部分实施方式,而不是全部的实施方式。基于本公开中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本公开保护的范围。
因此,以下对在附图中提供的本公开的实施方式的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施方式。基于本公开中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本公开的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”、“顺时针”、“逆时针”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本公开和简化描述,而不是指示或暗示所指的设备或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本公开的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本公开的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本公开中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本公开中的具体含义。
在本公开中,除非另有明确的规定和限定,第一特征在第二特征之“上”或之“下”可以包括第一和第二特征直接接触,也可以包括第一和第二特征不是直接接触而是通过它们之间的另外的特征接触。而且,第一特征在第二特征“之上”、“上方”和“上面”包括第一特征在第二特征正上方和斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”包括第一特征在第二特征正下方和斜下方,或仅仅表示第一特征水平高度小于第二特征。
下面详细描述本公开。
1 MAC单元结构
MAC(Multiple and Accumulate)单元可以实现数据的乘累加计算,具有卷积和Depthwise两种工作模式,其分别对应于图1和图2,MAC单元分为PE阵列和ACC单元。其中PE阵列包含64个PE单元,ACC单元包含64个加法器。Depthwise模式下,PE阵列仅有斜对角线上的PE单元使能。
2 PE单元结构
PE单元(Processing Element)是神经网络计算的一个基本处理单元,主要完成乘法运算和空域上的累加。
卷积模式下的PE单元结构如图3所示,Depthwise模式下的PE单元结构如图4所示,图3、图4中的X单元即为图5中的MUL单元。为了实现一套硬件兼容4bit、8bit、16bit定点乘法运算,每个MUL单元的输出为17bit补码形式,详见后文乘法(MUL)单元结构及运算规则。
对于Depthwise模式,PE单元中的8个MUL单元的运算结果不进行求和,8个乘法结果直接传出PE单元,传入ACC单元。
对于卷积模式,对PE单元中的8个MUL单元的运算结果进行求和,8个17bit数据求和结果Psum为20bit,将其传入ACC单元。
参见图3、图4,其中控制信号(ctrl)如下表1:
表1
3乘法(MUL)单元结构及运算规则
在兼容多精度混合乘累加运算的运算单元设计中,乘法单元的设计处于核心地位。如果只支持单一精度运算,只需要一个乘法器即可,但为了兼容多种精度运算,就需要对乘法器结构进行拆分,或者对计算数据进行拆分。如图5所示,本公开的设计中,乘法单元主要由4个5×5乘法器和3个移位器(图5中与5×5乘法器相连的“s”符号器件)组成,从而支持int4高效运算,而对于int16和int8的运算,则采用数据拆分的方式进行运算。
1)标准的int8运算:
对于int8的运算,输入的两个8Byte数据A0、W0,各包含8个数,分别为a0~a7和w0~w7,每个数是8bit;
a0~a7和w0~w7每个数的对应方式如图3、4所示,共分为8组(将输入同一MUL单元的一组数记为a、w),对a、w进行高低位拆分和符号位扩展,然后送入PE单元,一个周期可以完成计算;
基于a_precision和w_precision信号,激活MUL单元中的4个5×5乘法器;激活mul1和mul2乘法器的移位器,将运算结果左移4位;激活mul3乘法器的移位器,将运算结果左移8位;
如图5所示,将a拆分并进行符号位扩展,高低位的符号位扩展规则略有不同,拆分后的高五位记作a_h分为有无符号位两种情况,拆分后的低五位记作a_l为无符号;同理基于w_precision信号,将w拆分,拆分后的高五位记作w_h分为有无符号位两种情况,拆分后的低五位记作w_l无符号;参见如下表2:
表2
Unsigned | Signed | |
a_h | {1’b0,a[7:4]} | {a[7],a[7:4]} |
a_l | {1’b0,a[3:0]} | |
w_h | {1’b0,w[7:4]} | {w[7],w[7:4]} |
w_l | {1’b0,w[3:0]} |
将拆分后的4个数据分别传入如图5所示对应的5×5乘法器,并将4个乘法器的结果做相应移位并求和,完成一组8bit数据乘法运算。
2)int4运算:
对于int4的运算,输入的两个8Byte数据A0、W0各包含16个数,每个数是4bit,如图5A所示,A0中的16个数分为8份,每份中的两个数分为高低位拼接成一组新数为8bit,得到8个新数构成PE单元中的a0~a7;同理W0中的16个数分为8份,每份中的两个数分为高低位拼接后构成PE单元中的w0~w7;
a0~a7和w0~w7每个数的对应方式如图3、4所示,共分为8组(将输入同一MUL单元的一组数记为a,w),送入PE单元,一个周期可以完成计算;
基于a_precision和w_precision信号,激活MUL单元中的mul0和mul3乘法器;基于mode信号不激活mul3乘法器的移位器,Depthwise模式下,将mul3的运算结果与mul0运算结果相加后输出;卷积模式下,移位器不工作,将mul0与mul3的结果拼接后输出;
如图6所示,将a拆分并进行符号位扩展,拆分后的高五位记作a_h分为有无符号位两种情况,拆分后的低五位记作a_l分为有无符号位两种情况;同理基于w_precision信号,将w拆分,拆分后的高五位记作w_h分为有无符号位两种情况,拆分后的低五位记作w_l分为有无符号位两种情况;参见下表3:
表3
Unsigned | Signed | |
a_h | {1’b0,a[7:4]} | {a[7],a[7:4]} |
a_l | {1’b0,a[3:0]} | {a[3],a[3:0]} |
w_h | {1’b0,w[7:4]} | {w[7],w[7:4]} |
w_l | {1’b0,w[3:0]} | {w[3],w[3:0]} |
将拆分后的4个数据分别传入如图6所示对应的5×5乘法器,并依据mode信号将mul0和mul3两个乘法器的结果求和或拼接,完成两组4bit数据乘法运算。
3)int16运算:
对于int16的运算,输入的两个16Byte数A0、W0各包含8个数,分别为a0~a7和w0~w7,每个数是16bit;
基于a_precision和w_precision信号,激活MUL单元中的4个5×5乘法器;激活mul1和mul2乘法器的移位器,将运算结果左移4位;激活mul3乘法器的移位器,将运算结果左移8位;
a0~a7和w0~w7每个数的对应方式如图3、4所示,共分为8组(将输入同一MUL单元的一组数记为a,w),基于a_precision信号将16bit的a拆分为高低位两个数,拆分后的高位记作a_h,拆分后的低位记作a_l;同理基于w_precision信号,将w拆分为高低位,拆分后的高位记作w_h,拆分后的低位记作w_l;拆分后的每个新数a_l、a_h、w_l、w_h均为8bit;
其中,a_l和w_l恒为无符号数,因此在进行符号位扩展时a_l和w_l只需考虑Unsigned一种情况;a_h和w_h的符号位扩展分为有无符号位两种情况,如下表4所示:
表4
Unsigned | Signed | |
a_h | {1’b0,a[15:8]} | {a[15],a[15:8]} |
a_l | {1’b0,a[7:0]} | |
w_h | {1’b0,w[15:8]} | {w[15],w[15:8]} |
w_l | {1’b0,w[7:0]} |
MUL单元分时复用,四个周期分别输入a_l,w_l;a_h,w_l;a_l,w_h;a_h,w_h;同时传入对应的a_phase和w_phase信号;然后按照int8运算规则再次进行拆分传入对应的5×5乘法器进行计算,因为a0_l是a0的低8位,恒为无符号数,所以按照int8运算规则对a0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况;同理w0_l进行高低位拆分和符号位扩展时,高位只有Unsigned一种情况。
如图7A至7D所示,四个周期输入数据需要进行拆分和符号位扩展,然后输入对应的5×5乘法器;其中图7A对应MUL单元第1周期的输入a_l和w_l;图7B对应MUL单元第2周期的输入a_h和w_l;图7C对应MUL单元第3周期的输入a_l和w_h;图7D对应MUL单元第4周期的输入a_h和w_h;四个周期后完成一组16bit数据乘法运算。
4)MUL单元稀疏性工作模式
在神经网络训练时,通常将权重张量接近0的数值稀疏量化为0,从而减少计算量,节省算力资源。
本公开的MUL单元提供了针对稀疏量化的低功耗工作模式。每一个MUL单元有两个输入,以a0、w0为例,当其中一个输入的值为0时,MUL单元不工作,直接传出数值0,从而减少神经网络稀疏量化运算中的功耗消耗。
5)MUL乘法器算力、面积及功耗分析
在乘法器硬件设计中,乘法器面积及功耗与乘法的精度(位宽)是平方关系,所以8bit乘法器的面积及功耗是16bit乘法器的1/4;本公开的乘法单元主要由4个5×5乘法器(即5bit乘法器)构成,所以其面积和功耗与9×9乘法器(即9bit乘法器)相近;
基于上述PE单元结构和乘法单元结构及运算规则,本公开通过一套硬件逻辑实现了多精度(4bit、8bit、16bit)乘累加运算。相比于实现同样的多精度乘累加运算需要独立的4bit、8bit、16bit三种乘法器,本公开通过硬件复用节省了硬件面积,并且采用补码;
除此之外,本公开的乘法单元在提升算力和节省功耗方面也具有明显的优势。
比如,9×9乘法器与本公开的乘法单元在面积、功耗和功能上最为接近,两个乘法单元每周期都可以完成一组int8乘法运算;同样,9×9乘法器使用本公开的分时复用运算规则,也可以用四周期完成int16乘法运算。但是在完成同样的int4运算时,本公开的乘法单元每周期可以同时完成两组int4乘法运算,而9×9乘法器每周期只能完成一组int4乘法运算,本公开乘法单元的算力是9×9乘法器的2倍。
本公开的乘法单元面积与功耗约为16bit乘法器的1/4,对于int8-int16混合精度乘法运算,使用16bit乘法器需要一周期完成运算,使用本公开的乘法单元需要两周期完成运算,但总功耗约为16bit乘法器的1/2。
4非对称量化
如图8所示,两组数据A0`~A7`和W0`~W7`在进入MAC单元前,要通过非对称量化(Asymmetric Quantization)将浮点精度的数据非对称量化到动态的4bit、8bit、16bit定点,其数据类型可能为有符号(Signed)和无符号(Unsigned);因此传入MUL单元的两个数据,其组合可能为8bit与16bit的混合精度,也可能为有符号与无符号的混合数据类型;
int4、int8、int16三种精度的混合数据类型组合,其数据范围如下表所示,表中前12种组合A与W的精度相同,后8种组合A与W为混合精度和混合数据类型;混合精度乘法输入数据的范围,如下表5:
表5
由int16运算规则可知,可以将输入数据进行高低位拆分后,四个周期的输入的每个数均为8bit,可以按照int8的运算规则计算,所以在分析乘法溢出问题时,只需要分析int8的情况即可;
由标准int8运算规则可知,MUL单元在进行int8运算时,将数据符号位扩展为9bit,因此MUL单元实际支持的输入数据范围为[-256,255],满足上述任意混合数据类型与混合精度的运算结果不溢出,因此,本公开的硬件支持非对称量化数据的计算。除此之外,在进行神经网络训练时,可以将权重张量接近0的数值稀疏量化为0来减少计算能耗。
5 ACC单元结构及运算规则
ACC单元(Accumulation)包含64个加法器(两输入一输出),主要实现对不同时域下的运算结果进行累加,同时可以对int16运算进行移位加和。这样PE阵列部分只需要考虑20位Psum的存放,从而简化PE阵列设计,节省资源。
1)卷积模式:
卷积模式下,需要对同一PE单元不同时域的Psum进行累加。每个PE单元每周期输出一个Psum,PE阵列的64个PE单元每周期共输出64个Psum,根据控制信号每个PE单元的输出Psum可以实现指定次数的累加计算,因此64个PE单元输出的累加共需64个加法器。
ACC单元使用同一套加法器可实现两种功能:
(1)int16运算:对同一PE单元的四个周期的Psum结果进行移位加和;
(2)int4,int8,int16运算:在不同时域下,对同一PE单元的Psum结果进行累加。
对于int16运算,需要四周期完成计算,基于a_pahse和w_phase信号,ACC单元可对同一PE单元四周期的4个计算结果进行移位加和(如图9所示,以PE阵列左上角第一个PE单元为例,A0高位W0高位对应的计算结果左移16位,得到的数记作psum0,有效位为36bit;A0高位W0低位对应的计算结果左移8位,得到的数记作psum1,有效位为28bit;A0低位W0高位对应的计算结果左移8位,得到的数记作psum2,有效位为28bit;A0低位W0低位对应的计算结果不移位,得到的数记作psum3,有效位为20bit),最终得到的运算结果Psum为36bit;
对于int4和int8运算,需要一周期完成计算,ACC单元可以直接对同一PE单元不同时域的Psum进行累加,实现卷积运算channel方向的数据累加。同理,也可以对完成移位加和后的int16运算的36bit结果Psum进行时域的累加,实现16bit卷积运算channel方向的数据累加。
2)Depthwise模式:
Depthwise模式下,对于int8、int16运算,每个PE单元输出8个乘积结果,8个MUL单元的运算结果不进行加和,直接传出8个乘法结果ra0~ra7,每个结果为17bit(为兼容int4运算进行符号位扩展到18bit)。PE阵列的8个使能的PE单元共输出64个乘积结果。
对于int4运算,每个MUL单元的mul0和mul3单元工作,输出两个乘积结果,对这两个结果进行拼接,而不进行加和,所以每个PE单元输出16个乘积结果(拼接后每个PE单元同样输出8个乘法结果ra0~ra7,从而实现硬件单元的复用),每个结果为18bit。PE阵列的8个使能的PE单元共输出128个乘积结果。
Depthwise模式下,PE阵列的输出结果ra0~ra7传入ACC单元;
ACC单元使用同一套加法器可实现两种功能:
(1)int16运算:对同一PE单元的四个周期的乘法结果进行移位加和;
(2)int4,int8,int16运算:在不同时域下,对同一PE单元的乘法结果进行累加。
对于int16运算需要四周期完成,基于a_pahse和w_phase信号,如图4所示,ACC单元可对同一PE单元的8个计算结果ra0~ra7进行移位加和(以a0、w0为例,a0高位w0高位对应的计算结果左移16位,得到数记作r0_0,有效位为32bit;a0高位w0低位对应的计算结果左移8位,得到数记作r0_1,有效位为24bit;a0低位w0高位对应的计算结果左移8位,得到数记作r0_2,有效位为24bit;a0低位w0低位对应的计算结果不移位,得到数记作r0_3,有效位为16bit),最终得到的运算结果r0为33bit,即16bit×16bit的运算结果;
对于int4和int8运算需要一个周期完成,ACC单元可以直接对同一PE单元不同时域的8个乘法结果进行累加,实现Depthwise卷积。同理,也可以对完成移位加和后的int16运算的8个结果进行累加,实现Depthwise卷积。
下面通过更详细的实施例描述:
实施例1:int4卷积模式
控制信号如下,参见下表6:
表6
二进制表示 | |
a_precision | 10 |
w_precision | 10 |
mode | 00 |
a_phase | - |
w_phase | - |
结合图1所示A0~A7,W0~W7为输入数据,结合图3所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,均为8bit,其中高四位为一个数,低四位为一个数(4bit扩展为有符号数后是5bit);
基于a_precision和w_precision信号可知,mul1和mul2乘法器无效;
具体实施步骤如下:
步骤1:
a0,w0输入同一MUL单元,a0和w0分别拆分为高位a0_h,w0_h和低位a0_l,w0_l,并进行符号位扩展,其中a0_h传入mul3乘法器,a0_l传入mul0乘法器,w0_h传入mul3乘法器,w0_l传入mul0乘法器;参见下表7:
表7
步骤2:
基于mode信号为卷积模式可知,MUL中的3个移位器无效,mul0与mul1运算结果直接求和输出ra0;同理,得到a1~a7和w1~w7对应的输出ra1~ra7;
步骤3:
基于mode信号为卷积模式,对ra0~ra7进行求和得到Psum;
步骤4:
同理,对PE阵列第一行输入数据A0、W0~W7重复步骤1~3,得到8个对应的Psum输出,构成输出集合r0;
步骤5:
同理,对PE阵列中的8行PE单元,重复步骤4,得到输出r0~r7,完成一次int4卷积运算;
ACC模式:
由于int4运算a_phase和w_phase信号无效,所以Psum不进行移位,在ACC单元中进行不同时域累加时,直接对同一PE单元的不同周期的Psum结果进行累加即可。
实施例2:int8卷积模式
控制信号如下,参见下表8:
表8
二进制表示 | |
a_precision | 00 |
w_precision | 00 |
mode | 00 |
a_phase | - |
w_phase | - |
结合图1所示A0~A7,W0~W7为输入数据,结合图3所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,均为8bit;
基于a_precision和w_precision信号可知,mul0~mul3乘法器均有效;
具体实施步骤如下:
步骤1:
a0,w0输入同一MUL单元,a0和w0分别拆分为高位a0_h,w0_h和低位a0_l,w0_l,并进行符号位扩展,其中a_h传入mul2和mul3乘法器,a_l传入mul0和mul1乘法器,w_h传入mul1和mul3乘法器,w_l传入mul0和mul2乘法器;参见下表9:
表9
Unsigned | Signed | |
a0_h | {1’b0,a0[7:4]} | {a0[7],a0[7:4]} |
a0_l | {1’b0,a0[3:0]} | |
w0_h | {1’b0,w0[7:4]} | {w0[7],w0[7:4]} |
w0_l | {1’b0,w0[3:0]} |
步骤2:
基于mode信号为卷积模式可知,MUL中的3个移位器有效,mul1和mul2运算结果左移4位,mul3运算结果左移8位,然后对4个乘法器的结果求和输出ra0;同理,得到a1~a7和w1~w7对应的输出ra1~ra7;
步骤3:
基于mode信号为卷积模式,对ra0~ra7进行求和得到Psum;
步骤4:
同理,对PE阵列第一行输入数据A0、W0~W7重复步骤1~3,得到8个对应的Psum输出,构成输出集合r0;
步骤5:
同理,对PE阵列中的8行PE单元,重复步骤4,得到输出r0~r7,完成一次int8卷积运算;
ACC模式:
由于int8运算a_phase和w_phase信号无效,所以Psum不进行移位,在ACC单元中进行不同时域累加时,直接对同一PE单元的不同周期的Psum结果进行累加即可。
实施例3:int16卷积模式
控制信号如下,参见下表10:
表10
结合图1所示A0~A7,W0~W7为输入数据,结合图3所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,均为16bit;
具体实施步骤如下:
步骤1:
对输入同一PE单元的A0和W0中的8个数,分别拆分高低位,构成的集合记为A0_h,W0_h和A0_l,W0_l,每个集合中包含8个数,每个数均为8bit,从而使得int8运算与int16运算兼容,复用一套硬件逻辑,如下表11所示:
表11
以a0和w0为例,a0和w0输入同一MUL单元,a0和w0分别拆分为高位a0_h,w0_h和低位a0_l,w0_l;a0_l和w0_l恒为无符号数,因此在进行符号位扩展时a0_l和w0_l只需考虑Unsigned一种情况;a_h和w_h的符号位扩展分为有无符号位两种情况,参见下表12:
表12
Unsigned | Signed | |
a0_h | {1’b0,a0[15:8]} | {a0[15],a0[15:8]} |
a0_l | {1’b0,a0[7:0]} | |
w0_h | {1’b0,w0[15:8]} | {w0[15],w0[15:8]} |
w0_l | {1’b0,w0[7:0]} |
步骤2:
PE单元分时复用,如图9所示,四个周期分别输入,a0_l和w0_l,a0_h和w0_l,a0_l和w0_h,a0_h和w0_h;同时传入对应的a_phase和w_phase信号;然后按照int8运算规则进行计算,因为a0_l是a0的低8位,恒为无符号数,所以按照int8运算规则对a0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况;同理,w0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况;
按上述方法运算后分别得到同一PE单元在四个周期的运算结果psum0~psum3;
步骤3:
由于int16运算a_phase和w_phase信号有效,因此使能Psum移位器,psum0不移位,psum1和psum2左移8位,psum3左移16位;
步骤4:
移位后,在ACC单元中,对同一PE单元四个周期的运算结果psum0~psum3进行加和,输出Psum;
步骤5:
同理,对输入数据A0~A7,W0~W7重复上述步骤,得到每个PE单元对应的输出Psum,完成一次int16卷积运算。
ACC模式:
由于int16运算a_phase和w_phase信号有效,所以ACC单元中进行不同空域累加时,同一PE单元的不同的数据A、W输入需要完成步骤1~5后,再对其Psum结果进行累加。
实施例4:int4 Depthwise模式
控制信号如下,参见下表13:
表13
二进制表示 | |
a_precision | 10 |
w_precision | 10 |
mode | 10 |
a_phase | - |
w_phase | - |
结合图2所示A0~A7,W0~W7为输入数据,PE阵列只有斜对角线上的8个PE单元工作,其中A0、W0输入第一个PE单元,A1、W1输入第二个PE单元,以此类推;
结合图4所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,均为8bit,其中高四位为一个数,低四位为一个数;
基于a_precision和w_precision信号可知,mul1和mul2乘法器无效;
具体实施步骤如下:
步骤1:
a0,w0输入同一MUL单元,a0和w0分别拆分为高位a_h,w_h和低位a_l,w_l,其中a_h传入mul3乘法器,a_l传入mul0乘法器,w_h传入mul3乘法器,w_l传入mul0乘法器;参见下表14:
Unsigned | Signed | |
a0_h | {1’b0,a0[7:4]} | {a0[7],a0[7:4]} |
a0_l | {1’b0,a0[3:0]} | {a0[3],a0[3:0]} |
w0_h | {1’b0,w0[7:4]} | {w0[7],w0[7:4]} |
w0_l | {1’b0,w0[3:0]} | {w0[3],w0[3:0]} |
步骤2:
基于mode信号为Depthwise模式可知,MUL中的3个移位器无效,mul0与mul1运算结果分别记作ra0_h和ra0_l,拼接后输出ra0;同理,得到a1~a7和w1~w7对应的输出ra1~ra7;
步骤3:
基于mode信号为Depthwise模式,ra0~ra7不进行求和直接输出;
步骤4:
同理,对PE阵列斜对角线上的8个PE单元,重复步骤1~3,得到各自对应的输出ra0~ra7,构成输出集合r0~r7,完成一个周期的int4 Depthwise运算;
ACC模式:
由于int4运算a_phase和w_phase信号无效,所以ra0~ra7不进行移位,在ACC单元中进行不同时域累加时,先将同一PE单元不同周期的ra0~ra7结果拆分(例如ra0拆分为ra0_h和ra0_l),然后对不同时域下的ra0_h和ra0_l分别进行累加即可。
实施例5:int8 Depthwise模式
控制信号如下,参见下表15:
表15
二进制表示 | |
a_precision | 00 |
w_precision | 00 |
mode | 10 |
a_phase | - |
w_phase | - |
结合图2所示A0~A7,W0~W7为输入数据,PE阵列只有斜对角线上的8个PE单元工作;
结合图4所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,均为8bit,其中高两位为符号位扩展;
基于a_precision和w_precision信号可知,mul0~mul3乘法器均有效;
具体实施步骤如下:
步骤1:
a0,w0输入同一MUL单元,a0和w0分别拆分为高位a_h,w_h和低位a_l,w_l,其中a_h传入mul2和mul3乘法器,a_l传入mul0和mul1乘法器,w_h传入mul1和mul3乘法器,w_l传入mul0和mul2乘法器;参见下表16:
步骤2:
基于mode信号为Depthwise模式可知,MUL中的3个移位器有效,mul1和mul2运算结果左移4位,mul3运算结果左移8位,然后对4个乘法器的结果求和输出ra0;同理,得到a1~a7和w1~w7对应的输出ra1~ra7;
步骤3:
基于mode信号为Depthwise模式,ra0~ra7不进行求和直接输出;
步骤4:
同理,对PE阵列斜对角线上的8个PE单元,重复步骤1~3,得到各自对应的输出ra0~ra7,构成输出集合r0~r7,完成一个周期的int8 Depthwise运算;
ACC模式:
由于int8运算a_phase和w_phase信号无效,所以ra0~ra7不进行移位,在ACC单元中进行不同时域累加时,直接对同一PE单元不同周期的ra0~ra7结果分别进行累加即可。
实施例6:int16 Depthwise模式
控制信号如下,参见下表17:
表17
结合图2所示A0~A7,W0~W7为输入数据,PE阵列只有斜对角线上的8个PE单元工作;
结合图4所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,均为16bit;
具体实施步骤如下:
步骤1:
对输入同一PE单元的A0和W0中的8个数,分别拆分高低位,构成的集合记为A0_h,W0_h和A0_l,W0_l,每个集合中包含8个数,每个数均为8bit,从而使得int8运算与int16运算兼容,复用一套硬件逻辑;
以a0和w0为例,a0和w0输入同一MUL单元,a0和w0分别拆分为高位a0_h,w0_h和低位a0_l,w0_l,进行符号位扩展后,参见下表18:
表18
步骤2:
将A0_l和W0_l输入同一PE单元,同时传入对应的a_phase和w_phase信号;然后按照int8 Depthwise运算规则进行计算,因为a0_l是a0的低8位,恒为无符号数,所以按照int8运算规则对a0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况;同理,w0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况;
按上述方法运算后得到该PE单元在一个周期的8个运算结果ra0~ra7,构成输出集合r0_0;
步骤3:
PE单元分时复用,如图10所示,四个周期分别输入a0_l和w0_l,a0_h和w0_l,a0_l和w0_h,a0_h和w0_h,重复步骤1~2,分别得到四个周期下对应的运算结果集合r0_0,r0_1,r0_2,r0_3;
步骤4:
由于int16运算a_phase和w_phase信号有效,因此使能ra0~ra7对应的移位器,r0_0不移位,r0_1和r0_2左移8位,r0_3左移16位;
步骤5:
移位后,在ACC单元中,对同一PE单元四个周期运算结果(r0_0,r0_1,r0_2,r0_3)中的32个数(4组ra0~ra7),进行时域累加,输出r0;
步骤6:
同理,对输入数据A0~A7,W0~W7重复步骤1~5,得到斜对角线上8个PE单元对应的输出r0~r7,完成一次int16 Depthwise运算。
实施例7:int16-int8混合精度卷积模式
控制信号如下,参见下表19:
表19
第一周期 | 第二周期 | |
a_precision | 01 | 01 |
w_precision | 00 | 00 |
mode | 00 | 00 |
a_phase | 0 | 1 |
w_phase | - | - |
结合图1所示A0~A7,W0~W7为输入数据,结合图3所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,其中a0~a7均为16bit;w0~w7均为8bit;
基于a_precision和w_precision信号可知,mul0~mul3乘法器均有效;
具体实施步骤如下:
步骤1:
对输入同一PE单元的A0和W0中的8个数,A0中的8个数拆分高低位,构成的集合记为A0_h和A0_l,每个集合中包含8个数,每个数均为8bit(未进行符号位扩展前),从而使得int8运算与int16运算兼容,复用一套硬件逻辑;
以a0和w0为例,a0和w0输入同一MUL单元,a0拆分为高位a0_h和低位a0_l,进行符号位扩展后,参见下表20:
表20
Unsigned | Signed | |
a0_h | {1’b0,a0[15:8]} | {a0[15],a0[15:8]} |
a0_l | {1’b0,a0[7:0]} |
步骤2:
PE单元分时复用,两个周期分别输入a0_l和w0,a0_h和w0,并同时传入对应的a_phase和w_phase信号;然后按照int8卷积运算规则进行计算,因为a0_l是a0的低8位,恒为无符号数,所以按照int8运算规则对a0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况,如图11A至图11B所示,分别得到计算结果ra0、ra1;
步骤3:
PE单元中的8个MUL单元重复步骤2,两个周期分别得到8个ra0、8个ra1;对8个ra0、8个ra1分别进行加和,得到同一PE单元在两个周期的运算结果psum0和psum1;
步骤4:
由于a_phase信号有效,因此使能Psum移位器,psum0不移位,psum1左移8位;
步骤5:
移位后,在ACC单元中,对同一PE单元两个周期的运算结果psum0和psum1进行加和,输出Psum;
步骤6:
同理,对输入数据A0~A7,W0~W7重复步骤1~5,得到每个PE单元对应的输出Psum,完成一次int16-int8混合精度卷积运算。
实施例8:int8-int16混合精度卷积模式
控制信号如下,参见下表21:
表21
第一周期 | 第二周期 | |
a_precision | 00 | 00 |
w_precision | 01 | 01 |
mode | 00 | 00 |
a_phase | - | - |
w_phase | 0 | 1 |
结合图1所示A0~A7,W0~W7为输入数据,结合图3所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,其中w0~w7均为16bit;a0~a7均为8bit;
基于a_precision和w_precision信号可知,mul0~mul3乘法器均有效;
具体实施步骤如下:
步骤1:
对输入同一PE单元的A0和W0中的8个数,W0中的8个数拆分高低位,构成的集合记为W0_h和W0_l,每个集合中包含8个数,每个数均为8bit(未进行符号位扩展前),从而使得int8运算与int16运算兼容,复用一套硬件逻辑;
以a0和w0为例,a0和w0输入同一MUL单元,w0拆分为高位w0_h和低位w0_l,进行符号位扩展后,参见下表22:
表22
Unsigned | Signed | |
w0_h | {1’b0,w0[15:8]} | {w0[15],w0[15:8]} |
w0_l | {1’b0,w0[7:0]} |
步骤2:
PE单元分时复用,两个周期分别输入w0_l和a0,w0_h和a0,并同时传入对应的a_phase和w_phase信号;然后按照int8卷积运算规则进行计算,因为w0_l是w0的低8位,恒为无符号数,所以按照int8运算规则对w0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况,如图12A至图12B所示,分别得到计算结果ra0、ra1;
步骤3:
PE单元中的8个MUL单元重复步骤2,两个周期分别得到8个ra0、8个ra1;对8个ra0、8个ra1分别进行加和,得到同一PE单元在两个周期的运算结果psum0和psum1;
步骤4:
由于w_phase信号有效,因此使能Psum移位器,psum0不移位,psum1左移8位;
步骤5:
移位后,在ACC单元中,对同一PE单元两个周期的运算结果psum0和psum1进行加和,输出Psum;
步骤6:
同理,对输入数据A0~A7,W0~W7重复步骤1~5,得到每个PE单元对应的输出Psum,完成一次int8-int16混合精度卷积运算。
实施例9:int16-int8混合精度Depthwise模式
控制信号如下,参见下表23:
表23
第一周期 | 第二周期 | |
a_precision | 01 | 01 |
w_precision | 00 | 00 |
mode | 10 | 10 |
a_phase | 0 | 1 |
w_phase | - | - |
结合图2所示A0~A7,W0~W7为输入数据,PE阵列只有斜对角线上的8个PE单元工作;
结合图4所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,其中a0~a7均为16bit;w0~w7均为8bit,高两位为符号位扩展;
具体实施步骤如下:
步骤1:
对输入同一PE单元的A0和W0中的8个数,A0中的8个数拆分高低位,构成的集合记为A0_h和A0_l,每个集合中包含8个数,每个数均为8bit(未进行符号位扩展前),从而使得int8运算与int16运算兼容,复用一套硬件逻辑;
以a0和w0为例,a0和w0输入同一MUL单元,a0拆分为高位a0_h和低位a0_l,进行符号位扩展后,参见下表24:
表24
Unsigned | Signed | |
a0_h | {1’b0,a0[15:8]} | {a0[15],a0[15:8]} |
a0_l | {1’b0,a0[7:0]} |
步骤2:
PE单元分时复用,两个周期分别输入a0_l和w0,a0_h和w0,并同时传入对应的a_phase和w_phase信号;然后按照int8Depthwise运算规则进行计算,因为a0_l是a0的低8位,恒为无符号数,所以按照int8运算规则对a0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况,得到该PE单元两个周期的16个运算结果(两组ra0~ra7),分别构成两组集合r0_0,r0_1;
步骤3:
由于a_phase信号有效,因此使能Psum移位器,Psum0不移位,psum1左移8位;
步骤4:
移位后,在ACC单元中,对同一PE单元两个周期的运算结果r0_0和r0_1进行加和,输出r0;
步骤5:
同理,对输入数据A0~A7,W0~W7重复步骤1~4,得到斜对角线上8个PE单元对应的输出r0~r7,完成一次int8-int16混合精度Depthwise运算。
实施例10:int8-int16混合精度Depthwise模式
控制信号如下,参见下表25:
表25
第一周期 | 第二周期 | |
a_precision | 00 | 00 |
w_precision | 01 | 01 |
mode | 10 | 10 |
a_phase | - | - |
w_phase | 0 | 1 |
如图2所示A0~A7,W0~W7为输入数据,PE阵列只有斜对角线上的8个PE单元工作;
如图4所示,输入数据A0,W0各包含8个数,分别为a0~a7,w0~w7,其中w0~w7均为16bit;a0~a7均为8bit;
具体实施步骤如下:
步骤1:
对输入同一PE单元的A0和W0中的8个数,W0中的8个数拆分高低位,构成的集合记为W0_h和W0_l,每个集合中包含8个数,每个数均为8bit(未进行符号位扩展前),从而使得int8运算与int16运算兼容,复用一套硬件逻辑;
以a0和w0为例,a0和w0输入同一MUL单元,w0拆分为高位w0_h和低位w0_l,进行符号位扩展后,参见下表26:
表26
步骤2:
PE单元分时复用,两个周期分别输入w0_l和a0,w0_h和a0,并同时传入对应的a_phase和w_phase信号;然后按照int8Depthwise运算规则进行计算,因为w0_l是w0的低8位,恒为无符号数,所以按照int8运算规则对w0_l进行高低位拆分和符号位扩展时,其拆分后的高位只有Unsigned一种情况,得到该PE单元两个周期的16个运算结果(两组ra0~ra7),分别构成两组集合r0_0,r0_1;
步骤3:
由于w_phase信号有效,因此使能Psum移位器,Psum0不移位,Psum1左移8位;
步骤4:
移位后,在ACC单元中,对同一PE单元两个周期的运算结果r0_0和r0_1进行加和,输出r0;
步骤5:
同理,对输入数据A0~A7,W0~W7重复步骤1~4,得到斜对角线上8个PE单元对应的输出r0~r7,完成一次int8-int16混合精度Depthwise运算。
综上所述,本公开具有如下特点:
1)本公开采用一套电路同时实现了4bit,8bit,16bit的乘累加运算,并在此过程中使用了补码;
2)本公开采用空间复用的方式实现4bit与8bit运算电路的融合;
3)本公开采用时间复用的方式实现16bit与8bit运算电路的融合;
4)本公开硬件支持非对称量化数据的计算。
尽管以上结合附图对本公开的实施方案进行了描述,但本公开并不局限于上述的具体实施方案和应用领域,上述的具体实施方案仅仅是示意性的、指导性的,而不是限制性的。本领域的普通技术人员在本说明书的启示下和在不脱离本公开权利要求所保护的范围的情况下,还可以做出很多种的形式,这些均属于本公开保护之列。
Claims (10)
1.一种兼容非对称多精度混合乘累加运算的MAC单元,其特征在于:
所述MAC(Multiple and Accumulate)单元用于实现数据的乘累加计算,分别对应于卷积模式和Depthwise模式;
MAC单元分为PE阵列和ACC单元,其中PE阵列包含64个PE单元,ACC单元包含64个加法器;
Depthwise模式下,PE阵列仅有斜对角线上的PE单元使能。
2.根据权利要求1所述的MAC单元,其中,优选的,
对于Depthwise模式,PE单元中的8个MUL单元的运算结果不进行求和,直接传出PE单元。
3.根据权利要求1所述的MAC单元,其中,
对于卷积模式,对PE单元中的8个MUL单元的运算结果进行求和,8个17bit数据求和结果Psum为20bit。
4.根据权利要求2或3所述的MAC单元,其中,
对于乘法单元即MUL单元,其中,将9×9乘法器结构拆分为4个5×5乘法器,从而支持int4运算,而对于int16和int8的运算,则采用数据拆分的方式进行运算。
5.根据权利要求4所述的MAC单元,其中,
对于int8的运算,输入的两个8Byte数据A0、W0,各包含8个数,每个数是8bit,将其中一组数记为a、w,对a、w进行高低位拆分和符号位扩展,然后送入PE单元,一个周期可以完成计算。
6.根据权利要求4所述的MAC单元,其中,
对于int4的运算,输入的两个8Byte数据A0、W0各包含16个数,每个数是4bit,扩展为有符号数后是5bit,两个数分为高低位拼接成一组数为10bit,将其中一组数记为a,w,送入PE单元,一个周期可以完成计算。
7.根据权利要求4所述的MAC单元,其中,
对于int16的运算,输入的两个16Byte数A0、W0各包含8个数,每个数是16bit,将其中一组数记为a,w,分为高低8bit之后,两两组合送入PE单元,按照int8运算方式,通过分时复用四个周期可以完成计算。
8.根据权利要求4所述的MAC单元,其中,
对于int4、int8、int16三种精度的混合数据类型组合,其数据范围包括20种组合,其中12种组合A与W的精度相同,8种组合A与W为混合精度;
由int16运算规则可知,可以将输入数据进行高低位拆分后,按照int8的运算规则计算,所以在分析乘法溢出问题时,只需要分析int8的情况即可;
由标准int8运算规则可知,MUL单元在进行int8运算时,将数据符号位扩展为9bit,因此MUL单元实际支持的输入数据范围为[-256,255],满足上述任意混合数据类型与混合精度的运算结果不溢出,硬件支持非对称量化数据的计算。
9.根据权利要求1所述的MAC单元,其中,
ACC单元包含64个加法器,两输入一输出,用于实现对不同时域下的运算结果进行累加,同时可以对int16运算进行移位加和,因此,PE阵列部分只需要考虑20位Psum的存放,从而简化PE阵列设计,节省资源。
10.根据权利要求1所述的MAC单元,其中,
卷积模式下,每个PE单元输出一个Psum,PE阵列的64个PE单元共输出64个Psum,根据控制信号可以分别与上一周期输出的64个Psum相加,共需64个加法器;
Depthwise模式下,对于int8、int16运算,每个PE单元输出8个乘积结果,8个MUL单元的运算结果不进行加和,直接传出8个乘法结果ra0~ra7,每个结果为17bit,其中,为兼容int4运算进行符号位扩展到18bit;PE阵列的8个使能的PE单元共输出64个乘积结果。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210115365 | 2022-01-30 | ||
CN2022101155822 | 2022-01-30 | ||
CN2022101153653 | 2022-01-30 | ||
CN202210115582 | 2022-01-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115357214A true CN115357214A (zh) | 2022-11-18 |
Family
ID=84034016
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210923139.8A Pending CN115357214A (zh) | 2022-01-30 | 2022-08-02 | 一种兼容非对称多精度混合乘累加运算的运算单元 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115357214A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117348839A (zh) * | 2023-12-06 | 2024-01-05 | 西北工业大学 | 一种多精度低开销加法器 |
-
2022
- 2022-08-02 CN CN202210923139.8A patent/CN115357214A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117348839A (zh) * | 2023-12-06 | 2024-01-05 | 西北工业大学 | 一种多精度低开销加法器 |
CN117348839B (zh) * | 2023-12-06 | 2024-02-13 | 西北工业大学 | 一种多精度低开销加法器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200226444A1 (en) | Systems, apparatus, methods, and architecture for precision heterogeneity in accelerating neural networks for inference and training | |
US4969118A (en) | Floating point unit for calculating A=XY+Z having simultaneous multiply and add | |
CN110383300B (zh) | 一种计算装置及方法 | |
CN110659015A (zh) | 使用分段线性逼近的深度神经网络架构 | |
CN109634558B (zh) | 可编程的混合精度运算单元 | |
CN110705703B (zh) | 基于脉动阵列的稀疏神经网络处理器 | |
US11341400B1 (en) | Systems and methods for high-throughput computations in a deep neural network | |
KR20090071823A (ko) | 다기능 연산장치 및 방법 | |
TWI776213B (zh) | 用於將輸入集相乘之硬體電路及方法,以及非暫時性機器可讀儲存裝置 | |
CN115357214A (zh) | 一种兼容非对称多精度混合乘累加运算的运算单元 | |
CN117170623A (zh) | 面向神经网络计算的多位宽重构近似张量乘加方法与系统 | |
CN110825346B (zh) | 一种低逻辑复杂度的无符号近似乘法器 | |
CN212569855U (zh) | 一种激活函数的硬件实现装置 | |
US20220075598A1 (en) | Systems and Methods for Numerical Precision in Digital Multiplier Circuitry | |
Timarchi et al. | Area-time-power efficient maximally redundant signed-digit modulo 2 n− 1 adder and multiplier | |
KR20230121151A (ko) | 디지털 곱셈기 회로망의 수치 정밀도 | |
Zhang et al. | Quad-multiplier packing based on customized floating point for convolutional neural networks on FPGA | |
CN111860792A (zh) | 一种激活函数的硬件实现装置和方法 | |
Dorrigiv et al. | Conditional speculative mixed decimal/binary adders via binary-coded-chiliad encoding | |
Tan et al. | Efficient Multiple-Precision and Mixed-Precision Floating-Point Fused Multiply-Accumulate Unit for HPC and AI Applications | |
Lyu et al. | Reconfigurable Multifunction Computing Unit Using an Universal Piecewise Linear Method | |
CN221200385U (zh) | 粗粒度可重构浮点处理单元和网格型浮点cgra | |
CN112540946B (zh) | 可重构处理器及其上多种神经网络激活函数计算方法 | |
US20230409285A1 (en) | Multi-dimensional logarithmic number system processor for inner product computations | |
CN113515259B (zh) | 一种适用于浮点格式的复数的近似取模实现电路及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |