提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、数据复用的作用
  • 二、基本参数和卷积模型介绍
  • 二.数据复用方式
    • 1.IR模式
    • 2.OR模式
    • 3.WR模式
  • 总结

前言

本人想要入门数字ic,这系列文章主要记录一下阅读《人工智能芯片设计》这本书的收获,供自己然后参考,也许会有理解错误之处,望各位能私信我指出错误改正

一、数据复用的作用

深度学习中卷积层是非常重要的一层,他重复的运算量可以达到总计算量的90%以上,因此如何加速卷积层的运算,是提升运算速度重要的一环。

芯片通常有三种数据复用模式:输入数据复用(IR),输出数据复用(OR),权重数据复用(WR)

本文将对IR模式进行重点介绍,另外两种复用方式可从IR模式类比得到,因觉得篇幅重复过长,自行推导

二、基本参数和卷积模型介绍


卷积中我们采用了M个K×K×N的三位卷积核,输入的三维特征图尺寸为H×L×N,卷积后得到了R×C×M的三维特征图,扫描步长为S

为了衡量数据复用方式的优化,我们通过对片内和片外数据访问次数的大小进行对比,访问次数公式表示为

二.数据复用方式

1.IR模式

IR的伪代码表示如下

for(r=0; r<R; r+=Tr)        //loop Rfor(c=0; c<C; c+=Tc)        //loop Cfor(n=0; n<N; n+=Tn)        //loop Nfor(m=0; m<M; m+=Tm)        //loop M/*片上核心中完成部分*/for(tm=m; tm<min(m+Tm,M); tm++)        //loop Tmfor(tn=n; tn<min(n+Tn,N); tn++)        //loop Tnfor(tr=r; tr<min(r+Tr,R); tr++)        //loop Trfor(tc=c; tc<min(c+Tc,C); tc++)        //loop Tc/*卷积核卷积*/for(i=0; i<K; i++)for(j=0; j<K; j++)O[tm][tr][tc] += W[tm][tn][i][j] * I[tn][i][j]

此处不太好理解,我在这做个假设,假设输入特征图为64×64×128,步长为1,假设有256个3×3×128的卷积核,因为输入缓存有限,故我们每次计算的时候将输入特征图分块放到输入缓存中,设每次只取出16164大小的输入特征图,同理权重缓存只加载334*256的卷积核分块(即CE=4,K=3,Tl×Th×Tn=16×16×4,卷积可推出输出特征分块为Tr×Tc=14×14)

①(计算核心)
第一次运算时,将取出输入缓存中的特征图分块(1到16行,1到16列,1到4通道)取出,取出权重缓存的卷积核块(第一个卷积核的1到4通道),卷积核分块移窗卷积,最后生成的输出特征图分块(1到14行,1到14列)放入输入缓存

第二次运算时,将输入特征图分块保持不变,重新加载第二个卷积核分块(第二个卷积核的1到4通道),移窗卷积,最后生成的输出特征图分块(1到14行,1到14列)与输入缓存中的数据相加

以此类推。。。。。直到完成256次操作,得到输出特征图的分块1(1到14行,1到14列,通道1到256)

②(输出部分和的操作内容)
我们取出输入缓存中的特征图分块(1到16行,1到16列,5到8通道),取出权重缓存中的(256个卷积核的5到8通道),加载第一个卷积核块(第一个卷积核的5到8通道),重复进行上边的256次操作,得到输出特征图2(1到14行,1到14列,通道1到256,虽然输出特征图分块尺寸不变,但是其内部的数字是这两次操作的叠加)
以此类推。。。。。直到完成N/Tn=128/4=32次操作,得到最终的输出特征图的分块(1到14行,1到14列,通道1到256)


之后我们的输入特征图分块首次进行左右方向的滑窗操作(之前都是在通道数上进行滑窗),新的输入特征图分块为(1到16行,15到31列,1到4通道),重复上述的①②操作,得到输出特征图分块的(1到14行,15到15列,通道1到256)

重复上述操作,最终得到完整的输出特征图(②嵌套了①,③嵌套了②)

片上缓存总访问次数

片外DRAM

2.OR模式

OR的伪代码表示如下

for(r=0; r<R; r+=Tr)        //loop Rfor(c=0; c<C; c+=Tc)        //loop Cfor(m=0; m<M; m+=Tm)        //loop Mfor(n=0; n<N; n+=Tn)        //loop N/*片上核心中完成部分*/for(tm=m; tm<min(m+Tm,M); tm++)        //loop Tmfor(tn=n; tn<min(n+Tn,N); tn++)        //loop Tnfor(tr=r; tr<min(r+Tr,R); tr++)        //loop Trfor(tc=c; tc<min(c+Tc,C); tc++)        //loop Tc/*卷积核卷积*/for(i=0; i<K; i++)for(j=0; j<K; j++)O[tm][tr][tc] += W[tm][tn][i][j] * I[tn][i][j]

每次取出输入特征块后进行一次滑窗卷积,出来的输出特征图分块保留在输出部分和中,更新一次权重和输入缓存下一个通道,进行运算,与前一次的输出部分和进行累加,最后再一次性将输出特征图分块放入输出缓存中

进行输入特征图分块左右上下方向上的滑窗,重复上一次操作

片上缓存总访问次数

片外DRAM

3.WR模式


WR的伪代码表示如下

for(m=0; m<M; m+=Tm)        //loop Mfor(n=0; n<N; n+=Tn)        //loop Nfor(r=0; r<R; r+=Tr)        //loop Rfor(c=0; c<C; c+=Tc)        //loop C/*CE中完成部分*/for(tm=m; tm<min(m+Tm,M); tm++)        //loop Tmfor(tn=n; tn<min(n+Tn,N); tn++)        //loop Tnfor(tr=r; tr<min(r+Tr,R); tr++)        //loop Trfor(tc=c; tc<min(c+Tc,C); tc++)        //loop Tc/*卷积核卷积*/for(i=0; i<K; i++)for(j=0; j<K; j++)O[tm][tr][tc] += W[tm][tn][i][j] * I[tn][i][j][j]

每次加载Tm个Tn通道的卷积核,不断再H和L方向上滑窗更新输入特征图得到一个完整的输出特征图,再更新第二层Tm个Tn通道的卷积核,不断再H和L方向上滑窗更新输入特征图得到一个完整的输出特征图,输出特征图与上一次循环进行累加,以此类推

片上缓存总访问次数

片外DRAM

总结

可以观测出来,通过改变循环内外层关系,可以做到输入特征,输出部分和,权重的最大化利用。

随着特征图二维尺寸的增加,通道内的数据复用性增大,但计算核心内能暂存的特征图通道数却在减小,并减少了通道间的复用性,三种模式片内外访问次数与缓存容量相关,因此曹勇固定的复用模式和分块参数不是最好的选择,常常采用混合数据复用的方式,给神经网络的每一层分配一个最优的数据复用模式和分块参数

一,三种基础的数据复用模式 IR,OR,WR相关推荐

  1. 弘辽科技:适合淘宝新手的三种基础引流技巧

    原标题<弘辽科技:适合淘宝新手的三种基础引流技巧> 要想网店生意好,那流量是必不可缺少的因素,因为流量是一家网店运营的基础,没有流量的店铺基本上无法维持正常运营的.作为一家网店的运营者,大 ...

  2. 三种256MB SPIFLASH的高性能模式和软复位学习笔记

    三种256MB SPIFLASH的高性能模式和软复位学习笔记 WINBONE CONTINUE READ MODE The Fast Read Dual I/O The Fast Read Quad ...

  3. html引入外部css_CSS 三种基础选择器

    本节我们来学习 CSS 中的选择器,选择器是 CSS 里面一个很重要的概念,HTML 中的所有标签样式,都是通过不同的 CSS 选择器进行控制的.我们只需要通过选择器,就可以对不同的 HTML 标签进 ...

  4. uniapp怎么引入css_CSS 三种基础选择器

    本节我们来学习 CSS 中的选择器,选择器是 CSS 里面一个很重要的概念,HTML 中的所有标签样式,都是通过不同的 CSS 选择器进行控制的.我们只需要通过选择器,就可以对不同的 HTML 标签进 ...

  5. Extjs中三种不同的数据提交方式

    Extjs中三种不同的数据提交方式 Extjs的三种提交方式: 表单Ajax提交,普通提交,单独Ajax提交: 1.表单ajax提交(默认提交方式) 提交函数:当按下表单中的提交按钮时执行下面的btn ...

  6. 三种批量插入数据的方法

    批量插入数据 本文将介绍三种批量插入数据的方法.第一种方法是使用循环语句逐个将数据项插入到数据库中:第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server ...

  7. ASTER GDEM V02(30m)、ASTER GDEM V03(30m)、TanDEM(90m)三种全球DEM数据的质量对比

    [20201213]三种全球DEM数据的质量对比 DEM数据介绍网址 质量对比 DEM数据介绍网址 目前各科研机构提供的免费DEM数据种类较多,以下两篇文章有较为详细的介绍以及下载方法: CSDN博客 ...

  8. 定义一个DataType(数据类型)类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。

    实验思路: DataType类内的私有类型要包含字符型.整型.浮点型三种类型的数据,构造函数要分别写出有字符型.整型.浮点型的形参来初始化. #include <iostream> usi ...

  9. 三种最流行的商业模式解析:让顾客感觉占便宜,你才能赚更多钱

    商业模式是一切企业的经营根本,在所有商业模式中,盈利模式是祖师爷爷,商业模式其实就是最赚钱的模式.但是真正能够了解甚至能够运用得好的人是非,常少的,期间以傻逼者居多,破产者无数. 以下三种模式,是商业 ...

最新文章

  1. 区块链+5G=智慧城市?
  2. JS组件系列——自己动手扩展BootstrapTable的 冻结列 功能:彻底解决高度问题
  3. php中的fpm_详解PHP中PHP-FPM是什么?有什么用?
  4. 什么是量子计算机?用一个简单例子来解释
  5. Oracle中 drop user 和 drop user cascade 的区别
  6. git 如何忽略掉文件夹_#PY小贴士# 我的git仓库为什么每次提交都有很多改动?
  7. 力扣18. 四数之和(JavaScript)
  8. python基本判断语句_python两种简洁的条件判断语句写法
  9. 微服务浅述---架构演进
  10. 用 JMeter 测试 MySQL 数据库
  11. jQuery实现一个简单的选项卡效果
  12. Java HashMap 默认排序
  13. DSP28335串口打印 printf
  14. 安卓调试工具 adb 命令大全
  15. 初学者学习哪种编程语言比较适合呢?
  16. 对于计算机系统结构,下列哪些是透明的?(计算机系统结构期末习题解析,史上最全)
  17. 2019 FeatherNets: Convolutional Neural Networks as Light as Feather for Face Anti-spoofing
  18. 动画效果编程基础详解--Animation Android
  19. 云端IDE:阿里云机器学习与PAI-DSW | 《阿里云机器学习PAI-DSW入门指南》
  20. Pillow的使用-Image篇

热门文章

  1. himall商城品牌信息
  2. 衍射光学:超短激光脉冲如何影响光束整形光学
  3. 深入理解c语言——‘\0’ ,‘0’, “0” ,0之间的区别
  4. 标签平滑 label smoothing
  5. (一)Alian 的 Spring Cloud Bom(Bom即材料清单)
  6. 读书笔记:C和指针3
  7. 只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》
  8. 工业互联网---人工智能技术-仿谷歌图片搜索算法SimilarImageSearch
  9. 文件服务器设置共享后拒绝访问,设置DAG共享见证服务器“拒绝访问”报错解决方法...
  10. Mac版亚信如何卸载