Google TPU 乘法矩阵工作原理

Google TPU 乘法矩阵工作原理
最近用到GoogleTPU架构,关于乘法矩阵工作原理自己的理解。
下图为Google TPU 乘法矩阵的结构:在这里插入图片描述如上图所示,输入数据从乘法矩阵左端输入,权重数据从乘法矩阵上端输入,乘法矩阵下端为累加器,乘加结果向下传递。
关键问题1.输入数据怎么输入?
在这里插入图片描述这个图是更详细的乘法矩阵input_data和weight_data的输入。首先,左端702中的[1 1 1…] ,[2 2 2…],[N N N…]为输入的各个channel。所以,输入数据是按照不同的channel进行卷积运算。将各个channel的输入数据串行脉动读入各自对应的cell行。之后从左到右,将数据在各个cell间移动。脉动阵列的数据运算可以参考如下过程(和上图结构略有差别,将gif顺时针旋转90°):
在这里插入图片描述

关键问题2.weight数据怎么输入、需要移动吗?
weight权重从脉动阵列乘法结构上端输入。weight输入
卷积运算的过程是卷积输入窗口和权重窗口进行乘累加运算,根据脉动阵列乘法结构,左端输入为各个channel 的input,首先,各个channel的input0和weight0进行乘法运算,如下图红色块所示。乘加运算结果向下移动,进行累加运算将结果暂存起来放入脉冲乘振列模块下累加的寄存器。之后,输入左移,input1和weight0进行乘加运算,如下图绿色块所示,将结果暂存起来放入脉冲乘振列模块下累加的寄存器,乘加运算结果向下移动,结果暂存,进行累加运算。下一个clk,input2和weight0,进行乘加运算,如下图黄色块所示。乘加运算结果向下移动,进行累加运算,结果放入寄存器。如图中所示,红色是第一次运算,绿色是第二次,黄色是第三次。重要的点在于,这整个运算过程中,权重没有动,只有数据和中间运算结果在动。第一次运算,将input每个channel的每个输入和卷积核的weight0进行卷积运算,结果暂存。
在这里插入图片描述 之后输入各个channel的input和卷积核的weight1进行运算,运算结果和input与weight0 的运算结果累加。之后进行卷积核个数次循环并将结果进行累加。得到第一个输出结果。
这样有一个问题,需要一个较大缓存来存储中间运算结果。如果有什么不对的,欢迎指正。
这篇文章采用了知乎作者汪鹏部分图片,感谢。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值