基于脉动阵列实现矩阵卷积(FPGA)
摸了很久🐟,才想起来还有一篇脉动阵列实现简单矩阵卷积的东西没写。今天就来通过google的tpu结构,来谈一下通过脉动阵列实现矩阵卷积,并且来写一个简单的3x3矩阵的2x2卷积核的卷积。
脉动阵列
脉动阵列的基本原理在之前的一篇已经写的很清楚了。可以翻到前面看一下脉动阵列的加速矩阵乘法的文章。这里就不赘述了。
脉动阵列实现矩阵卷积
其实这个概念已经是比较成熟了的东西了,谷歌的TPU架构让这个老东西回到大众视野里(虽然已经是18年的东西了),当时去年Google也出了一款tpu的芯片,还是值得期待一下的。
关于卷积大家应该很直观就能想象到下面这副图:
看动态图是比较简单的,但是实际上硬件执行卷积行为是需要花费额外的时钟周期和资源去做这件事情,不断进行乘加、累加操作,占用资源比较大。Google的工程师们想到可以通过脉动阵列来解决这个问题,使得数据重复读取的次数降低,让数据流动起来。
实现卷积阵列的原理,这里可以参考