概述:
本文分析了已有的神经网络加速器,并对其进行了分类:
-
按照数据加载方式:channel-first、channel-last
-
按照对稀疏性的支持:A、W/A、W
SNAP属于channel-first,W/A,其压缩非零格式的数据并以数值-索引的格式输入。
文中还提出了神经网络加速器在设计中面临的主要问题:
-
乘法器(阵列)的利用率
-
数据通路的冲突和内存访问争用
-
卷积结构的变化
两种数据加载顺序:
- channel-first:
![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-16-38-15-image.png?msec=1667047358569)
数据按通道顺序排序,图b、c中展示了数据压缩的格式。一般来说,压缩的一个数据束越大越有利于提高利用率和计算效率,但是应该保证同一束中的激活在同一位置上(行列)。
这样做,完成一次计算之后,将中间结果写入时,访存争用较小。
- channel-last:
![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-16-32-33-image.png?msec=1667047358568)
这种方式的弊端在于PSUM在写入OFM-MEM时对于同一地址的争用较为频繁,尤其是在稀疏度不足时。
数据-索引匹配机制
本文使用了一种索引匹配的结构AIM,用于从输入的数据束中分离出匹配的激活-权重对。
![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-21-04-32-image.png?msec=1667047358567)
前端比较器用于对比激活和权重的通道信息,有匹配的通道就将valid-pos标志位的valid位置一,代表数据匹配,并记录对应数据在激活数据束中的位置。
产生valid-pos标志位后,将其送入sequence decoder,得到相应的权重和激活。由于1个PE中只包含三个乘法器,因此sequence decoder也只有三路数据输出。![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-21-37-15-image.png?msec=1667047358568)AIM中比较器阵列的数量需要trade off,既需要足够多的数量来保证同时生成的激活-权重对,也要考虑由此带来的功耗、面积提升的问题。经过测试,32x32是比较合适的。
两级部分和合并机制
- PE内部,通道维度上的合并
PE的结构如下图所示:
![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-21-45-30-image.png?msec=1667047358562)
同时进行运算的三对数据来自于同一个数据束,根据数据束打包的方式,乘法器计算产生的PSUM的存放地址有下列四种情况:
![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-21-48-56-image.png?msec=1667047358556)
这四种情况由reduction ctrlor根据计算出的地址决定
- 内核中(PE间)像素维度上的合并
对于常规卷积的运算:
col = 0、1、2的权重被广播到PE阵列的各列上,(h,w)=(2,2)、(2,3)、(2,4)的激活数据被广播到各行中。这样,处在对角线位置上的PE产生的数据对应的存储地址是相同的。
对于FC层和PW卷积来说也是类似的,只不过是处在同一行上的PE的输出数据对应的地址相同。
![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-21-59-13-image.png?msec=1667047358572)
这样的机制可以在计算完成后就合并大量部分和,减少访存的次数和争用情况。
芯片的评估
![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-22-05-47-image.png?msec=1667047358568)
芯片中包含激活和权重buffer、全局累加器(用于计算最终的部分和)、计算核以及控制器。片上共计集成了252个16bit 的乘法器和280.6kB的SRAM。
值得注意的是:每个AIM在三个PE之间时分复用。
文中首先使用一个采用channel-last数据流的加速器和SNAP运行稀疏的Resnet-50模型,并将这两者运行的结果与仅支持稠密计算的加速器的运行速度对比:
![](file:///C:/Users/Jingyu_Li/AppData/Roaming/marktext/images/2022-09-20-22-13-07-image.png?msec=1667047358556)
很显然,SNAP的数据流是有优势的,但是随着层数加深,这种优势不再明显。
原因有二:
(1)越深层的网络稀疏度越高,其在输出时导致的访存争用越少,这样channel -first数据流的优势就不再明显了
(2)越稀疏的网络结构,越容易导致各个核、PE之间的工作负载不平衡,这对于索引匹配和部分和合并都有影响。
通俗的讲工作负载不平衡还容易导致工作少的PE的等待工作多的PE。
要解决这样的问题,可以在进行计算前采取更加激进的预处理措施,降低数据的不规则度,也可以适当增大OFM buffer。
文中还将SNAP与之前一些优秀的设计进行了对比:
![](file://C:\Users\Jingyu_Li\AppData\Roaming\marktext\images\2022-09-20-22-21-53-image.png?msec=1667047358569)
总的来说,channel-first 的机制对于解决访存争用的问题很有效,而channel-last 的方案在工作负载不平衡的情况下则有更好的表现。
标签:20,AppData,image,09,Note,images,PE,SNAP From: https://www.cnblogs.com/JerryLiF/p/16839825.html