首页 > 其他分享 >Note:SNAP

Note:SNAP

时间:2022-10-29 20:56:56浏览次数:36  
标签:20 AppData image 09 Note images PE SNAP

概述:

本文分析了已有的神经网络加速器,并对其进行了分类:

  • 按照数据加载方式:channel-first、channel-last

  • 按照对稀疏性的支持:A、W/A、W

SNAP属于channel-first,W/A,其压缩非零格式的数据并以数值-索引的格式输入。

文中还提出了神经网络加速器在设计中面临的主要问题:

  1. 乘法器(阵列)的利用率

  2. 数据通路的冲突和内存访问争用

  3. 卷积结构的变化

两种数据加载顺序:

  • 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

相关文章

  • 第3章 Jupyter Notebook, numpy和matplotlib
     3-1jupyternotebook基础Notbook示例  Notbook源码1[1]2forxinrange(5):3print('helloworld')4helloworld5helloworld6hello......
  • The C Learning Note - 1
    ThinkbeforeyoucodeManynoviceprogrammersattempttodiverightintowritingthecode(intheprogramminglanguage)asthefirststep.However,writingthe......
  • Bitcoin Notes
    Abstract.Apurelypeer-to-peerversionofelectroniccashwouldallowonlinepaymentstobesentdirectlyfromonepartytoanotherwithoutgoingthroughaf......
  • Bookxnote+坚果云实现双PC同步
    Bookxnote软件介绍坚果云介绍正文开始总体思路:一台电脑为A,另一台电脑为B,将A电脑本地的文件夹关联坚果云同步文件夹,并在B电脑中重复此操作坚果云上新建一个同步文件夹......
  • 通过SSH远程使用jupyter notebook
    1.背景一直苦恼于本地机器和服务器上都要配置一些机器学习方面的环境,今天花了点时间研究了下Jupternotebook远程访问服务器,所以记录一下。有些步骤非必须,这里尽量写清楚......
  • notepad++格式化json
    1、JsonView插件地址:https://百度网盘/s/11LJU_9ZI0H5TUOPMbE7jRg   验证码:rsjk​2、使用插件把插件放入到notepad++的安装目录下的plugin下3、使用notepad++格式化json......
  • Codeforces 1672 E. notepad.exe
    题意这是一道交互题,有n个字符串,每个字符串长度:0-2000,n:0-2000有一个机器对他进行排版,你可以给他一个每行的最大宽度w,那么每行只能放长度为w的字符;每行相邻两个字符......
  • JAVA DAY1 LEARNING NOTE- Markdown-2022-10-26
    Markdown学习标题三级标题字体Helloworld!Helloworld!Helloworld!Helloworld!引用选择Java走向人生巅峰分割线图片超链接点击跳转到博客列表A......
  • jupyter notebook修改默认目录
    1.打开cmd输入命令​​jupyternotebook--generate-config​​该操作会生成如下文件:C:\Users\你的用户名\.jupyter\jupyter_notebook_config.py2.编辑上述文件:大......
  • 【Note】倍增
    真的不会。QAQ目录简介大家都见过的应用:倍增求\(\text{LCA}\)倍增求\(\text{LCA}\),但是动态加点,但是不会\(lct\)例题:[ZJOI2012]灾难(DAG上的支配树)例题:[APIO2009]会......