矩阵乘法优化——Booth编码优化及稀疏运算
举例说明两个8bit乘法在Booth编码下的计算
核心概念
在标准的 8-bit 乘法中,如果你直接乘,需要处理 8 次移位和加法。 Booth 算法(Radix-4)通过将乘数每 3 位一组进行编码,每次处理 2 个 bit,将运算次数减少到 4 次(也就是生成 4 个部分积)。
编码规则: 对于分组的3bit位(b2,b1,b0)编码结果:Value = -2*b2+b1+b0
具体例子
假设计算矩阵乘中的一个单元乘法:Result = A * B,其中A = 5 = 8'b0000 0101; B = -13 = (补码)8'b1111 0011,所以可以得到结果为-65。
使用Booth编码计算:
-
分组补0:将8bit乘数-13的分组,即5bit的高位组MSG,和4bit的低位组LSG,其中第4位比特位被高位组和低位组共用.即
MSG = 1111 0;LSG = 0011, 对于LSG需要在末尾补0达到高位低位都是5位,所以新的MSG = 11110;LSG = 00110。然后需要再对MSG和LSG进行每3bit位一组的分组,中间比特位被共用:补码:1111 0011 MSG =11110 LSG = 00110 Gruop2: 110 Gruop0: 110 Gruop3: 111 Group1: 001 -
生成Booth码:
组 编码 权重 Group 0 (110) -2*(1) + 1 + 0 = -1 20 Group 1 (001) -2*(0) + 0 + 1 = +1 22 Group 2 (110) -2*(1) + 1 + 0 = -1 24 Group 3 (111) -2*(1) + 1 + 1 = 0 26 -
计算:
计算规则为乘数分别乘Booth编码再乘对应权重:
- Group0编码为-1,权重为20=1,计算为
5*(-1)* 1 = -5 - Group1编码为+1,权重为22=4,计算为
5*(+1)* 4 = 20 - Group2编码为-1,权重为24=16,计算为
5*(-1)* 16 = -80 - Group3编码为 0,权重为26=64,计算为
5*(0)* 64 = 0
累加所有-5+20-80=-65
注意: 对于编码为0,可以直接跳过计算,对于编码为1乘数直接乘权重,对于编码为-1,直接对乘数补码取反加1。对于-2可以直接取反加1,再右移一位。乘权重直接移位即可。
关于FBS(Filtered Bit-Group Sparsification)稀疏运算
假设原始二进制: 0 1 0 1 1 0 1 1,其中MSG=01011, LSG=1011补零后 LSG=10110。
分析MSG:
MSG 的 Booth 码为 [1, 2]。非零项数量为2,然后进行约束检查: 论文要求 MSG 最多非零项数量2个。所以合格,即保留MSG所有Booth位。
分析LSG:
LSG 的 Booth 码为 [-1, -1]。非零项数量为2,然后进行约束检查: 论文要求 LSG 最多非零项数量1个。所以不合格,需要将其中一个Booth位变为0。
对LSG稀疏处理:
方案 A:
保留Booth码高位,丢弃低位,所以目标LSG的Booth码变为[-1,0],然后寻找新的5-bit数对应[-1,0]来替换原来的LSG=10110。Booth码低位为0,所以可以是000或者111.(满足-2*(b2)+b1+b0=0),Booth码高位为1,可以是101或者110。中间位需要匹配,而且最后一位必须为0,所以可以的组合只有11000。与 Booth 码原值误差|-5 - (-4)|=1
方案 B:
保留低位,目标LSG的Booth码变为[0,-1],与 Booth 码原值[-1,-1]误差为|5-(-1)|=4,直接不考虑。
本文来自博客园,作者:{ziyang Li},转载请注明原文链接:https://www.cnblogs.com/ziy123/p/19489177

浙公网安备 33010602011771号