在卷积神经网络(CNN)中,特征图是一个4维的张量,分别为batch维度N,通道维度C,特征图高H和特征图宽W,在不同的深度学习框架中,特征图也有着不同的存储格式,例如NCHW和NHWC,两者的区别就是通道所在的维度不同,在不同的情况下,这两种存储格式都有各自的优点,下图即为两种存储格式的示意图。 在使用FPGA设计加速器时,由于FPGA的片上BRAM资源十分有限,无法一次性容纳所有的特征图数据,因此往往会采取分片的策略,即对于一个
C
×
H
×
W
C \times H \times W
C×H×W的特征图来说,我们每次只读取
T
n
×
T
r
×
T
c
T_n\times T_r \times T_c
Tn×Tr×Tc个神经元,待该部分数据使用完毕之后,再读取下一块特征图。在这种策略下,NCHW排布比NHWC排布更占优势,因为它往往可以提供更大的突发传输长度(如果
T
r
>
T
n
T_r>T_n
Tr>Tn),然而,提高一个系统的内存带宽并非只有这一种方法,其他方法还包括增大数据传输的位宽、增大传输接口数。例如,如果激活值被量化为16bit,而zynq7020开发板每一个HP接口的最大数据位宽为64bit,那么如果仅采用NCHW排布方式,我们只能优化突发传输长度,而无法充分利用AXI HP接口64bit位宽的优势。因此,针对这个问题,我们引出了下面要介绍的NC4HW4内存排布格式。
如下图所示,这就是我们要介绍的NC4HW4内存排布格式。 该格式将每四个连续通道的特征图分为一组,在每一组内,这4幅特征图按照NHWC的格式存储。在上图中,经过NC4HW4排布之后,1,2,3,4在内存上相邻,同理,同一像素位置,不同通道的四个神经元5,6,7,8也在内存上相邻。在这种排布方式下,我们可以每次并行的读取4个数据(充分利用了AXI HP接口64bit位宽的优势),同时,相对于传统方法中的NCHW,突发传输长度仍然保持不变(
T
c
T_c
Tc)。