具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如上所述,传统方案为了支持FP32的功能消耗了多余电路,导致功耗和面积增加。
为了解决上述问题,本公开提供了一种点积计算装置。
图1示出了根据本公开的第一实施例的点积计算装置100的示意框图。如图1所示,点积计算装置100包括4N个乘法单元110-1至110-4N(下文将乘法单元统称为110)、N个4:2压缩单元120-1至120-N(下文将压缩单元统称为120)、2N个第一移位单元130-1至130-2N(下文将第一移位单元统称为130)、加法树单元140和全加单元150。应当理解,虽然附图中示出N为2的情形,但是这只是举例说明,N可以为任何正整数。
关于4N个乘法单元110,其具有预定输入位宽。预定输入位宽例如包括但不限于8比特,例如乘法单元110为8x8乘法器。8x8乘法器可以是无符号乘法器,输出无符号数后根据乘法结果的符号转换成补码。也可以使用9x9的有符号乘法器,将尾数变成补码后运算并输出补码。应当理解,8比特只是为了举例说明,预定输入位宽也可以是其他值,例如16比特等,本公开的范围在此不受限制。下文以乘法单元110位8x8乘法器为例来举例说明。乘法单元110可以采用任何合适的乘法器或乘法电路来实现。
关于N个4:2压缩单元120,其与4N个乘法单元110对应耦接。N个4:2压缩单元120可以被配置为将4N个乘法单元110的4N个乘法结果压缩成2N个压缩结果。
对于每个4:2压缩单元120,其可以包括4个输入端和2个输出端。4个输入端与4N个乘法单元110中的4个乘法单元110相耦接。2个输出端与2N个第一移位单元130中的2个第一移位单元130相耦接。2个输出端分别输出和值(SUM)与进位值(CARRY),也就是2个压缩结果,使得和值+2*进位值=4个输入之和。以压缩单元120-1为例,其可以将4个乘法单元110-1至110-4的4个乘法结果压缩为2个压缩结果,也就是和值与进位值,使得和值+2*进位值=4个乘法结果之和。4:2压缩单元120可以采用任何合适的4:2压缩器或压缩电路来实现。
关于2N个第一移位单元130,其与N个4:2压缩单元120对应耦接。2N个第一移位单元130可以被配置为对N个4:2压缩单元120的2N个压缩结果进行移位,以生成2N个第一移位结果。第一移位单元130可以采用任何合适的移位器或移位电路来实现。
关于加法树单元140,其与2N个第一移位单元130相耦接。加法树单元140可以被配置为对2N个第一移位单元130的2N个第一移位结果进行压缩,以生成加法树压缩结果。也就是,每个第一移位单元130将其移位结果输出到加法树单元140。加法树单元140可以采用任何合适的加法树电路来实现。
关于全加单元150,其与加法树单元140相耦接。全加单元150可以被配置为对加法树压缩结果求和,以生成点积计算结果。全加单元150可以采用任何合适的全加器或全加电路来实现。
对于FP32浮点数的点积运算(例如N个乘加运算)而言,可以将FP32浮点数*FP32浮点数的尾数乘法部分拆分成4部分输入到4个乘法单元110。FP32浮点数具有1个符号位、8个指数位和23个尾数位,其尾数具有24位精度,可以表示为规格化的1.mant[22:0]或者如果指数为0,则表示为非规格化的0.mant[22:0]。以规格化的1.mant[22:0] 和乘法单元110-1至110-4来举例说明,2个FP32浮点数的尾数乘法可以拆分成以下4个部分:
1)HH 部分1.mant0[22:16]*1.mant1[22:16],例如通过乘法单元110-1来实现;
2)HL部分1.mant0[22:16]*mant1[15:8] ,例如通过乘法单元110-2来实现;
3)LH 部分mant0[15:8]*1.mant1[22:16] ,例如通过乘法单元110-3来实现;
4)LL 部分mant0[15:8]* mant1[15:8] ,例如通过乘法单元110-4来实现。
也就是说,FP32尾数的[7:0]部分被舍弃。
由此,对于诸如包括N个乘加运算的FP32点积运算,仅包括4N个乘法单元,相比于传统方案所需的9N个乘法单元,大大减少了点积计算装置中的乘法单元数量,从而减少了点积计算装置的面积。此外,采用4:2压缩单元,省去了FP32乘法结果的全加器面积和功耗开销。
在一些实施例中,点积计算装置100还可以包括2N个第二移位单元190-1至190-2N,其与4N个乘法单元110中的2N个乘法单元(110-1,110-4…110-4N-3,110-4N)和N个4:2压缩单元120对应耦接。2N个第二移位单元190-1至190-2N中与相同压缩单元120相耦接的每2个第二移位单元可以被配置为对所耦接2个乘法单元110的2个乘法结果对应执行以下操作,以输出到所耦接的压缩单元120:
向左移位预定输入位宽以及向右移位预定输入位宽。
接着上文FP32尾数乘法拆分并以压缩单元120-1和4个乘法单元110-1至110-4举例说明,在压缩单元120-1和2个乘法单元110-1、110-4之间布置2个第二移位单元190-1和190-2。其他压缩单元和乘法单元之间也可以进行类似布置,不再赘述。
在压缩单元120-1与乘法单元110-1之间的第二移位单元190-1被配置为对乘法单元110-1的乘法结果向左移位预定输入位宽,例如对于HH 部分1.mant0[22:16]*1.mant1[22:16]左移8位。
在压缩单元120-1与乘法单元110-4之间的第二移位单元190-2被配置为对乘法单元110-4的乘法结果向右移位预定输入位宽,例如对于LL 部分mant0[15:8]* mant1[15:8]右移8位,也就是LL[15:8]。
可见,压缩单元120-1接收的输入为FP32*FP32的尾数结果中的[31:8]部分。
由此,通过第二移位单元,使得输入到压缩单元的乘法结果反映了先前拆分FP32尾数乘法时各部分乘法结果对应的移位,以便于压缩单元的处理。
除了第二移位单元之外,点积计算装置100还可以包括N个符号位补偿单元(未示出),其与N个4:2压缩单元120、2N个第一移位单元130和4N个乘法单元110中的N个乘法单元110对应耦接。这N个乘法单元与执行向右移位预定输入位宽的N个第二移位单元对应耦接。
N个符号位补偿单元可以被配置为基于输入的N个乘法符号结果和N个乘法单元110的N个乘法结果,对N个4:2压缩单元120的2N个压缩结果进行符号位补偿,以输出到2N个第一移位单元130。
以压缩单元120-1举例说明,在压缩单元120-1和2个第一移位单元130-1和130-2之间布置符号位补偿单元。该符号位补偿单元还与乘法单元110-4相耦接,以接收乘法单元110-4的输出结果,并且接收与乘法单元110-1至110-4相关联的FP32*FP32的乘法符号结果mul_sgn。其他压缩单元、第一移位单元和乘法单元之间也可以类似布置,例如在压缩单元120-N和2个第一移位单元130-2N-1和130-2N之间布置符号位补偿单元,该符号位补偿单元与乘法单元110-4N相耦接,并且接收与乘法单元110-4N-3至110-4N相关联的FP32*FP32的乘法符号结果,不再赘述。
该符号位补偿单元可以被配置为基于乘法单元110-4的输出结果(LL部分mant0[15:8]* mant1[15:8] )和所对应乘法符号结果mul_sgn,对压缩单元120-1的2个压缩结果进行符号位补偿,以输出到2个第一移位单元130-1和130-2。
在一些实施例中,符号位补偿单元还可以被配置为如果确定所耦接压缩单元120的2个压缩结果的最高位的值均为0并且所对应乘法符号结果为正,则按照第一预定补偿模式,对2个压缩结果中的第一压缩结果进行符号位补偿。
具体来说,第一预定补偿模式对2个压缩结果中的第一压缩结果向左移位预定输入位宽并且在第一压缩结果的左侧补充1比特0,以生成第一中间结果,以及在第一中间结果的左侧补充第一数量个0,以生成经符号位补偿的第一压缩结果,第一数量为预定移位宽度减去经第一中间结果的位宽。
例如,以pp0[24:0]表示所耦接压缩单元120-1的第一压缩结果,以pp1[24:0]表示所耦接压缩单元120-1的第二压缩结果,以mul_sgn表示所对应乘法符号结果,也就是与乘法单元110-1至110-4相关联的FP32*FP32的乘法符号结果mul_sgn,Shift_in0和Shift_in1表示经符号位补偿的第一压缩结果和第二压缩结果,作为与压缩单元120-1相耦接的2个第一移位单元130-1和130-2的输入,SHIFT_WIDTH表示预定移位宽度。
如果pp0[24]为0、pp1[24]为0且mul_sgn为正(也就是0),也可以表示为{pp0[24],pp1[24]}==2’b00 && !mul_sgn,则Shift_in0 = {{SHIFT_WIDTH-25-8-1{1’b0}},1’b0,pp0[24:0],8’b0},其中SHIFT_WIDTH-25-8-1表示第一数量,1’b0表示1比特0,8’b0表示8比特0。
备选地或者附加地,在一些实施例中,符号位补偿单元还可以被配置为如果确定所耦接压缩单元120的2个压缩结果的最高位的值均为1并且所对应乘法符号结果为负,则按照第二预定补偿模式,对2个压缩结果中的第一压缩结果进行符号位补偿。
具体来说,第二预定补偿模式对2个压缩结果中的第一压缩结果向左移位预定输入位宽并且在第一压缩结果的左侧补充1比特0,以生成第二中间结果,以及在第二中间结果的左侧补充第一数量个1,以生成经符号位补偿的第一压缩结果,第一数量为预定移位宽度减去第二中间结果的位宽。
如果pp0[24]为1、pp1[24]为1且mul_sgn为负(也就是1),也可以表示为{pp0[24],pp1[24]}==2’b11 && mul_sgn,则Shift_in0 = {{SHIFT_WIDTH-25-8-1{1’b1}},1’b0,pp0[24:0],8’b0},其中1’b1表示1比特1。
符号位补偿单元还可以被配置为如果确定所耦接压缩单元120的2个压缩结果的最高位的值不同、所耦接压缩单元120的2个压缩结果的最高位的值均为0并且所对应乘法符号结果为负、或者所耦接压缩单元120的2个压缩结果的最高位的值均为1并且所对应乘法符号结果为正,则按照第三预定补偿模式,对2个压缩结果中的第一压缩结果进行符号位补偿。
具体来说,第三预定补偿模式对2个压缩结果中的第一压缩结果向左移位预定输入位宽并且在第一压缩结果的左侧补充1比特1,以生成第三中间结果,以及在第三中间结果的左侧补充第一数量个1,以生成经符号位补偿的第一压缩结果,第一数量为预定移位宽度减去第三中间结果的位宽。
对于其他情形,例如pp0[24]为1且pp1[24]为0,或者pp0[24]为0且pp1[24]为1,或者pp0[24]为1、 pp1[24]为1且mul_sgn为正,或者pp0[24]为0、 pp1[24]为0且mul_sgn为负,Shift_in0 = {{SHIFT_WIDTH-25-8-1{1’b1}},1’b1,pp0[24:0],8’b0}。
符号位补偿单元还可以被配置为对2个压缩结果中的第二压缩结果向左移位预定输入位宽并且在右侧补充所耦接乘法单元110的乘法结果中从低到高预定输入位宽的部分结果。
例如,Shift_in1 = {pp1[24:0],LL[7:0]},其中LL[7:0]为所耦接乘法单元110-4的乘法结果(LL部分mant0[15:8]* mant1[15:8] )中从低往高8位的部分结果。
由此,通过符号位补偿单元,省去了进位保存加法器(Carry Saving Adder,CSA)为了移位而进行的移位器宽度扩展。
图2示出了根据本公开的第二实施例的点积计算装置200的示意框图。图2中的4N个乘法单元210-1至210-4N(下文统称为210)、N个4:2压缩单元220-1至220-N(下文统称为220)、2N个第一移位单元230-1至230-2N(下文统称为230)、加法树单元240以及全加单元250分别与图1中的4N个乘法单元110-1至110-4N、N个4:2压缩单元120-1至120-N、2N个第一移位单元130-1至130-2N、加法树单元140以及全加单元150相对应,不再赘述。除了通过点积计算装置200实现FP32的点积运算之外,还可以考虑利用点积计算装置200实现BF16的点积运算。
如图2所示,在一些实施例中,点积计算装置200还可以包括2N个第一选择单元260-1至260-2N(下文将第一选择单元统称为260),其与N个4:2压缩单元220、4N个乘法单元210中的2N个乘法单元210以及2N个第一移位单元230对应耦接。2N个第一选择单元260可以被配置为选择N个4:2压缩单元220的2N个压缩结果或2N个乘法单元210的2N个乘法结果,以输出到2N个第一移位单元230。
参照图2,以压缩单元220-1举例说明, 2个第一选择单元260-1和260-2与压缩单元220-1相耦接。具体来说,第一选择单元260-1可被配置为接收压缩单元220-1的第一压缩结果,以及第一选择单元260-2可被配置为接收压缩单元220-1的第二压缩结果。
第一选择单元260-1还同与压缩单元220-1相耦接的乘法单元210-1相耦接,并且被配置为接收乘法单元210-1的乘法结果。第一选择单元260-2还同与压缩单元220-1相耦接的乘法单元210-3相耦接,并且被配置为接收乘法单元210-3的乘法结果。
第一选择单元260-1的输出端与第一移位单元230-1相耦接,以及第一选择单元260-2的输出端与第一移位单元230-2相耦接。
也就是说,第一选择单元260-1可以被配置为选择乘法单元210-1的乘法结果或压缩单元220-1的第一输出结果,以输出到第一移位单元230-1。第一选择单元260-2可以被配置为选择乘法单元210-3的乘法结果或压缩单元220-1的第二输出结果,以输出到第一移位单元230-2。
对于BF16浮点数的点积运算(例如2N个乘加运算)而言,可以将BF16浮点数的尾数部分乘法通过4N个乘法单元中的2N个乘法单元来实现。以4个乘法单元210-1至210-4为例,将BF16浮点数的尾数部分乘法通过乘法单元210-1和210-3来实现,并且通过控制2个第一选择单元260-1和260-2来将BF16尾数乘法结果输出到第一移位单元230-1和230-2进行移位,以最终实现BF16点积运算。
由此,通过2个第一选择单元可以实现压缩单元的2个压缩结果与2个乘法单元的2个乘法结果之间的选择,从而点积计算装置可以实现BF16点积运算和FP32点积运算之间的切换。
2N个第一选择单元260还可以被配置为响应于与第一预定精度相关联的第一控制信号,选择N个4:2压缩单元220的2N个压缩结果,以及响应于与第二预定精度相关联的第二控制信号,选择2N个乘法单元210的2N个乘法结果。
具体来说,每个第一选择单元260可以被配置为响应于与第一预定精度相关联的第一控制信号,选择所耦接压缩单元220的压缩结果,以及响应于与第二预定精度相关联的第二控制信号,选择所耦接乘法单元210的乘法结果。第一预定精度例如为FP32,第二预定精度例如为BF16。应当理解,这里第一预定精度和第二预定精度仅仅是举例说明,也可以采用其他的合适精度。
也就是说,在接收到针对FP32点积运算的控制信号时,第一选择单元260将所耦接压缩单元220的压缩结果输出到所耦接第一移位单元230。此时,第一移位单元230对压缩结果进行移位,以生成第一移位结果。在接收到针对BF16点积运算的控制信号时,第一选择单元260将所耦接乘法单元210的乘法结果输出到所耦接第一移位单元230。此时,第一移位单元230对乘法结果进行移位,以生成第一移位结果。
由此,通过与不同精度相关联的不同控制信号,点积计算装置可以实现BF16点积运算与FP32点积运算之间的切换。
图3示出了根据本公开的第三实施例的点积计算装置300的示意框图。图3中的4N个乘法单元310-1至310-4N(下文统称为310)、N个4:2压缩单元320-1至320-N(下文统称为320)、2N个第一移位单元330-1至330-2N(下文统称为330)、加法树单元340以及全加单元350分别与图1中的4N个乘法单元110-1至110-4N、N个4:2压缩单元120-1至120-N、2N个第一移位单元130-1至130-2N、加法树单元140以及全加单元150相对应,不再赘述。除了通过点积计算装置300实现FP32的点积运算之外,还可以考虑利用点积计算装置300实现INT8的点积运算。
如图3所示,点积计算装置300还可以包括4N个第二选择单元370,其与2N个第一移位单元330、4N个乘法单元310以及加法树单元340对应耦接。4N个第二选择单元370可以被配置为选择2N个第一移位单元330的2N个第一移位结果或者4N个乘法单元310的4N个乘法结果,以输出到加法树单元340。
以压缩单元320-1为例进行说明,与压缩单元320-1相耦接的4个乘法单元310-1至310-4的4个输出端与4个第二选择单元370-1至370-4相耦接。具体来说,乘法单元310-1的输出端与第二选择单元370-1的一个输入端相耦接,乘法单元310-2的输出端与第二选择单元370-2的一个输入端相耦接,乘法单元310-3的输出端与第二选择单元370-3的一个输入端相耦接,乘法单元310-4的输出端与第二选择单元370-4的一个输入端相耦接。
与压缩单元320-1相耦接的2个第一移位单元330-1和330-2的2个输出端与2个第二选择单元370-1和370-3相耦接。具体来说,第一移位单元330-1的输出端与第二选择单元370-1的另一个输入端相耦接,以及第一移位单元330-2的输出端与第二选择单元370-3的另一个输入端相耦接。第二选择单元370-2的另一个输入端可以接收或者设置为0。第二选择单元370-4的另一个输入端也可以接收或者设置为0。
4个第二选择单元370-1至370-4的4个输出端耦接到加法树单元340。
也就是说,4个第二选择单元370-1至370-4可以选择将4个乘法单元310-1至310-4的4个乘法结果输出到加法树单元340,或者将2个第一移位单元330-1和330-2的2个第一移位结果输出到加法树单元340。
对于INT8点积运算(例如4N个乘加运算)而言,可以通过4N个乘法单元310实现INT8点积运算中的4N个乘法运算。通过控制4N个第二选择单元370输出4N个乘法单元310的4N个乘法结果到加法树单元340,而不经过压缩单元320和第一移位单元330,来实现INT8点积运算。
由此,通过第二选择单元可以实现第一移位结果与乘法结果之间的选择,从而可以实现INT8点积运算与BF16/FP32点积运算之间的切换。
4N个第二选择单元370还可以被配置为响应于与第三预定精度相关联的第三控制信号,选择4N个乘法单元310的4N个乘法结果。此时,加法树单元340对4N个乘法结果进行压缩,以生成加法树压缩结果。4N个第二选择单元370还可以被配置为响应于与第一预定精度或第二预定精度相关联的第四控制信号,选择2N个第一移位单元330的2N个第一移位结果。此时,加法树单元340对2N个第一移位结果进行压缩,以生成加法树压缩结果。
具体来说,4N个第二选择单元370中的每个第二选择单元370可以被配置为响应于与第三预定精度相关联的第三控制信号,选择所耦接乘法单元310的乘法结果,以及还可以被配置为响应于与第一预定精度或第二预定精度相关联的第四控制信号,选择所耦接第一移位单元330的第一移位结果或者0。第一预定精度例如为FP32,第二预定精度例如为BF16,第三预定精度例如为INT8。应当理解,这里的精度仅是举例说明,也可以采用其他合适的精度,本公开的范围在此不受限制。
以4个第二选择单元370-1至370-3举例说明,在接收到针对INT8点积运算的控制信号,第二选择单元370-1至370-3将乘法单元310-1至310-3的4个乘法结果输出到加法树单元340,从而实现INT8点积运算。在接收到针对BF16或BF32点积运算的控制信号时,第二选择单元370-1和370-3将第一移位单元330-1和330-2的2个第一移位结果输出到加法树单元340,第二选择单元370-2和370-4输出0,从而实现BF16或BF32点积运算。
由此,通过与不同精度相关联的不同控制信号,点积计算装置可以实现INT8点积运算与BF16/FP32点积运算之间的切换。
图4示出了根据本公开的第四实施例的点积计算装置400的示意框图。图4中的4N个乘法单元410-1至410-4N(下文统称为410)、N个4:2压缩单元420-1至420-N(下文统称为420)、2N个第一移位单元430-1至430-2N(下文统称为430)、加法树单元440以及全加单元450分别与图1中的4N个乘法单元110-1至110-4N、N个4:2压缩单元120-1至120-N、2N个第一移位单元130-1至130-2N、加法树单元140以及全加单元150相对应。图4中的2N个第一选择单元460-1至460-2N(下文统称为460)与图2中的2N个第一选择单元260-1至260-2N相对应,图4中的4N个第二选择单元470-1至470-4N(下文统称为470)与图3中的4N个第二选择单元370-1至370-4N相对应,不再赘述。
点积计算装置400可以用于FP32:BF16:INT8之间的算力配比为1:2:4的点积运算。通过2N个第一选择单元460可以实现BF16和FP32之间的切换,以及通过4N个第二选择单元470可以实现INT8与BF16/FP32之间的切换。
图5示出了根据本公开的第五实施例的点积计算装置500的示意框图。图5中的5N个乘法单元510-1至510-4N(下文统称为510)、N个4:2压缩单元520-1至520-N(下文统称为520)、2N个第一移位单元530-1至530-2N(下文统称为530)、加法树单元540以及全加单元550分别与图1中的4N个乘法单元110-1至110-4N、N个4:2压缩单元120-1至120-N、2N个第一移位单元130-1至130-2N、加法树单元140以及全加单元150相对应,图5中的2N个第一选择单元560-1至560-2N(下文统称为560)与图2中的2N个第一选择单元260-1至260-2N相对应,图5中的4N个第二选择单元570-1至570-4N(下文统称为570)与图3中的4N个第二选择单元370-1至370-4N相对应,不再赘述。
如图5所示,点积计算装置500还可以包括指数处理单元580。应当理解,虽然仅在图5中示出指数处理单元580,但是这只是举例,图1-图3中也可以包括指数处理单元580。
指数处理单元580与2N个第一移位单元530相耦接。指数处理单元580可以被配置为基于输入的N个或2N个浮点数指数和确定用于2N个第一移位单元530的2N个移位值。
例如,对于具有2N个乘加运算的BF16点积运算而言,乘法单元510-1、510-3…510-4N-3以及510-4N-1这2N个乘法单元各接收2个BF16尾数。2个浮点数相乘时,其对应的2个尾数相乘,对应的2个指数相加。相应地,对于这2N个乘法单元中的每个乘法单元,所接收的2个BF16尾数对应的2个BF16指数和输入到指数处理单元580。也就是说,一共2N个BF16指数和输入到指数处理单元580。指数处理单元580基于这2N个BF16指数和,确定用于2N个第一移位单元530的2N个移位值。
又如,对于具有N个乘加运算的FP32点积运算而言,每4个乘法单元对应一个FP32乘法,也就是对应一个FP32指数和。一共存在N个FP32指数和。这N个FP32指数和输入到指数处理单元580。指数处理单元580基于这N个FP32指数和,确定用于2N个第一移位单元530的2N个移位值。
由此,通过指数处理单元实现尾数乘法结果的正确移位,以用于点积运算中的后续加法操作正确实现。
在一些实施例中,指数处理单元580还可以被配置为确定N个或2N个浮点数指数和中的最大值。指数处理单元580还可以被配置为对于2N个第一移位单元530中的每个第一移位单元530,确定最大值与第一移位单元530所对应的浮点数指数和之间的差,作为用于第一移位单元530的移位值。
以第一移位单元530-1和530-2为例,在BF16模式,第一移位单元530-1所对应的浮点数指数和为与第一移位单元530-1相耦接的乘法单元510-1所对应的浮点数指数和,也就是输入乘法单元510-1的两个BF16尾数对应的两个BF16指数和,因为在BF16模式,乘法单元510-1的乘法结果被第一选择单元560-1选择输出到第一移位单元530-1。类似地,第一移位单元530-2所对应的浮点数指数和为与第一移位单元530-2相耦接的乘法单元510-3所对应的浮点数指数和,也就是输入乘法单元510-3的两个BF16尾数对应的两个BF16指数和,因为在BF16模式,乘法单元510-3的乘法结果被第一选择单元560-2选择输出到第一移位单元530-2。
在FP32模式,第一移位单元530-1所对应的浮点数指数和为与第一移位单元530-1相耦接的4:2压缩单元520-1所对应的浮点数指数和,也就是输入乘法单元510-1至510-4的两个FP32尾数对应的两个FP32指数和。第一移位单元530-2所对应的浮点数指数和为与之相同,因为第一移位单元530-2也耦接到相同压缩单元520-1。
由此,通过浮点数指数和最大值与第一移位单元所对应浮点数指数和之差,可以确定第一移位单元的移位值,便于点积运算后续的加法运算。
通过上文可以看出,对于INT8 4N个乘加的点积,可以通过4N个8x8乘法单元、一个输入是4N组的加法树单元以及一个全加单元来实现。
对于BF16 2N个乘加的点积,可以通过2N个8x8乘法单元、2N个第一移位单元、一个输入是2N组的加法树单元、一个全加单元以及对应2N个BF16点积的指数处理单元来实现。
对于FP32 N个乘加的点积,可以通过4N个8x8乘法单元、N个4:2压缩单元、2N个第一移位单元、一个输入是2N组的加法树单元、一个全加单元以及对应N个FP32点积的指数处理单元。
考虑同一时刻点积计算装置只运行在一种精度模式,点积计算装置100可以包括4N个8x8的乘法单元、N个4:2压缩单元、2N个第一移位单元、一个输入是4N组的加法树单元、一个全加单元以及对应的指数处理单元。
相比于传统方案,该点积计算装置面积小,频率高,同样的乘法器移位器,FP32算力翻倍,采用42压缩表示方法,省去了FP32乘法结果的全加器面积和功耗开销,添加了符号位补偿机制,省去了CSA为了移位而进行的移位器宽度扩展。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。
本公开的以上描述用于使本领域的任何普通技术人员能够实现或使用本公开。对于本领域普通技术人员来说,本公开的各种修改都是显而易见的,并且本文定义的一般性原理也可以在不脱离本公开的精神和保护范围的情况下应用于其它变形。因此,本公开并不限于本文所述的实例和设计,而是与本文公开的原理和新颖性特性的最广范围相一致。