算法如图,比较直观。
一、硬件架构设计
需要解决如下问题:
memorybandwidth。存储读取数据功耗和速度称为瓶颈,速度与conv硬件处理部分不匹配。所以文中很老套的方法,通过line buffer来复用每个tile交叠的部分(垂直和水平都有交叠的部分)。
1、整体架构
所有数据(input feature map, filter)都存在外部存储上。
有多通道(M)的input feature map,line buffer 的每一行存储所有channel的同一行。
Winograd PE 从 line buffer 取出数据。通过FIFO,进入FPGA。
使用double buffer 来 交叠数据。
在前向过程中,filter的数据不能全部存在on-chip memory中,所以把其按照channnel分成几组,每次处理一组。
2、Line Buffer Design
在on-chip memory上存储部分(n+m行)的line,用来data reuse。
每一行的输入line buffer,有 MxW 个元素。输出的line buffer每一行有 NxC 个元素,N是输出的channel数,C是output feature map的宽度。
由于不同的层,其feature map的大小也是不同的,所以这里硬件上取W为所有中最大的的width(ResNet处理ImageNet的话,最大就是第一层输入图像224x224,而MxW最大为112x64)。
为了reuse data,on-chip memory每次存 n+m 行input,也就是2个overlap的kernel的长度。 然后循环位移lines,相当于一个circular buffer。
当电路初始化时,处理电路Winograd engine直接从line