2020ISSCC 基于SRAM的存内计算15.5阅读记录

Note:因为只是笔者的阅读记录,所以内容组织上较为混乱!(如有错误,可评论指出!谢谢!)

1、2's complement

此即二补数,是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。在中国大陆地区通常称作补码。 一个数字的二补数就是将该数字作位反相计算(即一补数),再将结果加 1,即为该数字的二补数。在二补数系统中,一个负数就是用其对应正数的二补数来表示。

2、ppt图里面的MACV字母下面的12~20代表的意思是,在HMACRB模块输出的值的位宽,当输入激活值与权值都是4bit的时候,输出是12bit,如果都是8bit的,则输出是20bit;

3、不仅有水平的GBL,而且还有垂直的GBL;

4、整体架构就是,一共4Kb,分成两个512*64的大array,然后每个这个大array中包含了四个大的MMACCB,即多位乘累加计算块,这四个计算块排成四行;然后在每个计算块中又分成了八个Wbw-MACA,即逐位权值乘累加单元阵列,这八个单元阵列排成一行的形式,然后每个单元阵列中有八个6TSRAM单元排成一行,用来存储一个8bit的权值,然后这个单元阵列中具体有多少行,看图上标的应该是16行,但是计算出来的应该是有32行,不过估计应该是16,因为那篇TCAD的文章就是将这样一个单元阵列作为一个权重组;

那如果一个单元阵列中确实是16行的话,即存储16个权值的话,那前面说的每个大array中就不止包含四个MMACCB了,而是包含了32个了;??

接上面的,每个单元阵列中有64个BMU,目前来看的话BMU的排布是八行八列的形式,然后每个BMU中还包含一个LCC,所以综上的每个单元阵列每行只有8bit,所以就是说每个BMU是个16行一列的形式,即一个单元阵列就是TCAD文章中的一个权重组,里面可以存储16个8bit的权重;

哎,上面说的每个单元阵列中的一行就是一个权重,又理解错了,虽然它确实是8个bit,但是卷积核中的每个权值不是这么存储的,结合前面的,每个单元阵列中共有64个BMU,然后他们是8*8的形式排列,每个BMU是16行一列,所以其实就是每个单元阵列中存了16*8个8bit的权值,这16*8个8bit的权值分成了八列,每一列都是16个bbit的权值,每一列的16个权值的每一位都分别处在这一列的8个BMU中,也就是说第一个权值的第0位在第0个BMU的第一行,然后这个BMU的第二行放的不在是这个权重的第1位,而是第二个权重的第0位,也就是说,这一列的第一个BMU中,存放的是16个权值的所有的第0位;

结合上面这张图,可以看到,最右边的表格其实是一个单元阵列,即Wbw-MACA,其中包含了64个BMU,从图中也能看到上面一排的下面一排的BMU,以及他们下面的LCC,结合左边的指针以及LCC中的公式,其实可以知道,(先说一下存储的权重排布问题,因为权重基本都是四维的,所以可以认为这个单元阵列中存储的是16组卷积核的前8个通道的权值,即第一行的8个权值的第0位均来自第一组卷积核的8个连续排布的通道,然后在每列剩余的7个BMU中,存储剩下的7个bit,然后其余15组卷积核的存储同理),每次只激活每行BMU中的一行SRAM单元,然后一共8行BMU,所以每次总共激活八行SRAM单元,而且这八行的SRAM存储的是同一组卷积核中的8个通道的相同位置的那8个权值,这样的话就能继续下去了;

下面详细说一下是如何算出一组卷积核中8个通道的8个权值与相应的8个输入值的乘累加过程:ok,我们知道他们如何存储的,然后在某一个周期,同时激活八行BMU中的相同位置的八行SRAM单元,不妨先将拿第一列BMU来说,输入的8bit的激活值将于八行中的8个1bit的权值分别相乘,这里暂时不讨论乘出来的结果是什么样的,但是可以知道相应的BMU中的LCC中已经得到了这个输入与单比特权值的乘积结果;相应的这样的其余7个BMU的LCC中也得到了相应通道上的权值与激活值的乘积结果,不过目前这些结果都是单比特权值与8bit输入的乘积结果,然后这一行得到的LCC中的结果将被同时送到WBW-LMAR模块中,即权值逐位的低乘累加读出模块,然后将这8个结果累加到一起;

综上,因为同时激活的是八行SRAM单元,所以进行的就是每一个8bit输入与一个8bit权值的每一位的乘法之后,在每一行的BMU单元连接的两个WBW-LMAR模块中进行累加,(为什么这里说的是每一行BMU中有两个WBW-LMAR模块了,是因为文章说的,而且PPT里面的图也画出来了,每一行的BM接出来两根GBL的输出,然后这两个输出分别接到一个WBW-LMAR模块上,这么说也不是没道理,因为要将8bit输入一下与一个1bit的权值进行乘法,属实有点浪费时间,所以按照文章的意思,每个BMU中的LCC是用于4bit输入与1bit权值的乘法的,所以如果输入是8bit的,那就需要分成两次来进行,这也就是为什么会连接两根GBL的输出;),所以,所以,在相应的8行SRAM单元的MAC操作结束后,相应的累加结果会出现在16个WBW-LMAR模块中,然后DWCC即数字的权重配置电路将会把这16个权值与他们的相应位置值结合到一起,得到最后正确的、接近全精度的输出值;

我前面的又理解错了,8个单元阵列并不是排成一行,而是真的是排成一列,然后不是每个单元阵列中有64个BMU嘛,这64BMU也真的是排成了一排,所以也就是说这64个BMU形成一个16*64的SRAM阵列,然后一个乘累加块有8个单元阵列就是8*16*64=128*64,然后一边有4个乘累加块,所以得到4*128*64=512*64,这样才最终完全符合了图中所示啊!

然后前面说的具体在乘累加操作,还是以8bit的输入为例吧!对于8bit的输入,将分成两个阶段来输入进来,例如先输入低4比特,然后计算完之后在下一个阶段再输入高四位;输入进来的四位也会分开进行乘法操作,具体如何,后面再说;这里主要探讨一下乘累加到DWCC的流程;还是那样,从上面输入进来n个输入,这里的n最大可达到64(其实图里面画的是16,主要是因为最多存储一组卷积核的16个通道相同位置的8bit权值),因为现在的BMU是排成一排了,然后每一行的BMU中,实际上就是每一行的单元阵列中存储的是一组卷积核的连续16个通道的相同位置的权值的第相同位,例如第一行的BMU中,存的就是16通道上第0个权值的第0位的数值;然后依次类推,在这第一个大乘累加块的8行单元阵列中,就会依次存下这16个权值的所有的第0位,第1位,一直到第7位;

然后乘的过程倒是和上面的理解基本一直,不过就是将输入进来的4bit分成了两两一组的形式,然后2bit分别进行乘法,然后16个输入相同位置2bit输入与1bit权值乘法的结果将累加到一起,从该行单元阵列连接的其中一个WBW-LMAR模块中输出,然后另外的2bit也是同样操作,然后从另一个WBW-LMAR模块中输出;

可以想到,在8行单元阵列中,这些操作是同时进行的,所以在第二个阶段结束之后,就能得到16个8bit输入与16个8bit权值乘累加的各部分累加值,即pMACV,然后这些值从16个WBW-LMAR模块中与他们相应的位置信息结合,在DWCC模块中得到最终的正确结果;

至于前面说的现在每一排BMU不是有64列吗,但是这64列不是也不会一起激活,因为一次激活这么多的话,在GBL上的电流可能或者说电压就会超过了后面模块的sensing margin,所以应该就是如图所示的那样,一次只会激活一行中的16列的SRAM单元;(又错了,文章后面又说到可以选择一次激活32列的BMU,就看怎么选吧!)

后面一段说到,这样进行的两两一组的乘累加,最后形成的结果的电压等级的数量相较于逐字的乘累加结构是要小一点的,也因此获得了更大的感知容限sensing margin;

算了一下这篇文章和上一篇文章中出现的Tac,在输入权值都是8bit的情况下,需要8.4ns,所以最后最大的频率也不过是1000/8.4=119Mhz;昨天那篇202116.3的话,是7.2ns,那最大频率为138Mhz;

如果输入是4bit,权值是8bit,那么只需要one cycle即可完成16个输入与权值的乘累加,并得到接近全精度的输出;但是如果输入也是8bit,那么至少需要两个周期才能完成了,因为文中的意思就是8Bit的输入就相当于再重复一次前面的4bit输入时的操作;

PPT里面有张图算了一下,就是每一行输出的2bit输入与权值的乘累加结果的分布范围,因为2bit能代表4个不同值,所以最后16个结果累加的话,就会有0~48个不同的等级值,但是作者再cifar100的数据集上的统计结果表明,大部分值都分布在0~32之间,所以那个VSA,即电压型灵敏放大器用的是5bit的输入,但是最后输出倒是6bit的,不过这一位都统一设置成了0;

最后从16个WBW-LMAR模块中会输出16个6bit的部分累加结果,然后全部送到DWCC中进行处理;

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joejwu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值