传统的计算机系统中,数据的计算和存储是分开的,分别在CPU和memory中。大量的数据从memory传输到cpu非常耗能并造成了瓶颈。很多研究针对这问题提出了方案,但大多数是通过将存储芯片集成到CPU上来减少数据传输。在神经网络计算中,这一做法虽然减少了突触权重的传输,却没有减少输入/出数据的传输。本文即是解决这一问题。不同于以往的做法,本文提出了一种架构级别的创新:使memory具有计算功能。
文章提出的新存算融合结构叫做PRIME,其本质是RRAM crossbar array,其特别之处在于这个array按照其eNVM单元的功能被分为三个子阵列:FF array、Mem array、Buffer array。在FF array中每个单元可以作为神经网络的加速器,又可在不需要计算的时候作为普通存储单元。其转换由特别设计的外围电路实现。这样一来,PRIME的优势就很明显了:不需要特别的处理器和复杂的集成技术,其结构设计就是普通的存储器设计,故费用低;使用了存算融合结构和具有高效神经网络计算功能的RRAM。
除了介绍PRIME主要结构和电路之外,还提出了克服精度问题(本设计的主要挑战)的方法,并且设计软/硬件的接口以便软件开发者设置FF array以应用各种神经网络。各个阵列在下面会详细介绍。

神经网络在硬件上的加速

神经网络有一个输入层、一输出层、若干夹在中间的隐层。每一层上的是神经元,神经元有自己值。神经元与神经元之间传递信息时有突触权重。示意图如下

反应到硬件上如下图。

阵列的行的起始端代表输入层,列的末端代表输出层,RRAM单元的电导率是突触权重。输入信号即是输入的模拟电压,输出信号是每列的电流经过激活函数处理后的值,突触权重直接编程到每个单元中。
要用RRAM crossbar array实现神经网络,要有上文提到的专门设计的外围电路(例如模拟计算中的ADC、DAC),还要有sigmoid函数单元和减法单元。

PRIME结构

PRIME结构中有一个控制器,它会控制计算模式和存储模式,并对FF子阵列进行相应的设置。选择距离FF和全局行Buffer(Global row buffer)比较近的memory子阵列作为Buffer子阵列,Buffer通过数据口与FF连接,给FF传数据时不占用Mem的带宽。Buffer阵列的单元在不作为缓存时也可作为memory单元。

FF子阵列

FF的数据移动都是在存储器内的,故可使用的带宽非常宽,并且可以和cpu并行工作。一个FF subarray被分成两个array,一个用来存放负权重,一个存放正权重,这两个array共用一个输入口。
FF根据NN计算的要求对外围电路做了一些修改,详细的讲解可以参考论文:
①NN计算要求所有的数据都同步输入到字线上,故WDD中加入了锁存器;每条字线上都有电流放大器;WDD需要一个多路复用器,在存储模式时只提供两个电平,在计算模式下提供2Pin 个电平。Pin为输入数据bit数。
②列复用器中加入了sigmoid函数单元和减法单元。每个FF array里有两套列复用器,只需要在其中的一副上做上述修改。电压分别与正、负权重进行计算后,通过减法器做减法,得到的电流在通过sigmoid进行归一化,再在SA中进行检测,最后存回到Buffer中。但当一层输出是下一层输入时,可跳过Buffer。
③SA的精度要求比存储器高,精度为输出比特数Po,该设计通过在SA中加入counter实现精度1~Po的调节。对于输入SA的数据,若大于0,则SA直接输出其值,若小于0则输出0。
④Buffer和FF之间有连接单元,连接单元里很多解码器和复用器以保证FF可以访问任何Buffer的物理地址。
从上述电路设计可以看出,存储和计算使用了相同的电路,减少了面积开销。例如SA和WDD的存在就使得DAC和ADC不必要了。
FF在计算和存储模式下数据的流动路径不同
计算模式下:FF从Buffer中取数据到锁存器,锁存器将数据分别送到正负array中,经过计算后的两路电流到减法器,得到的结果送入sigmoid进行归一化,归一化后的数据送入SA检测,得到的最终数据存回Buffer
存储模式下:所有单元都被设置成普通的存储单元,数据直接输入->存储->检测->存入总Buffer。
当FF又存储模式设置为计算模式时,其单元内存储的数据会先转移到特定分配的Mem array中,再把突触权重写入FF单元中。当这些工作完毕,PRIME控制器将外围电路设置为计算模式,FF开始计算。当计算结束后,FF又被设置回存储模式。

Buffer子阵列

Buffer作用是缓存FF array的输入输出数据。RRAM进行计算并不花费时间,是数据在存取上的延迟花费时间。所以把输入输出放入缓存是很有必要的。
Buffer中的数据一是来自于GRB,作为FF array的输入。二是来自FF array,缓存它的输出。GRB中的数据来自Mem subarray。所以计算模式下数据的移动可以表示为:
Mem subarray<—①—>GRB<—②—>Buffer array<—③—>FF array
其中过程①和③是相互独立的,但①和②必须按照次序,而不可同时进行。

PRIME 控制器

控制器负责给出指令。指令分为设置路径指令和数据流动指令。设置路径指令其实就是设置计算模式或存储模式,该指令只在每次设置FF array时执行一次。数据流动指令即指数据在mem\buf\FF之间的传递,这种指令贯穿整个计算过程。

精度问题

假如输入为Pin bit 权重为Pw bit 输出为Po bit。它们所代表的意思是,输入电平有2Pin 个level,权重有2Pw 个level,输出取前Po bit,PN表示输入总数。在最先进的技术中,一个比较可行的设定是:Pin=3 bit,Pw=4bit,Po=6bit。本文采用input and synapse composing 方案(实在不知道怎么翻译…不过这才是要多阅读文献的原因,在学术写作上英文比中文表达更有力^ _^),用保守的设定来实现高计算精度。

方案详述

首先,输入信号和突触权重都被分成高bit部分和低bit部分,分别串行地存入相应的阵列中。计算直接得到的精度是全精度Rfull,目标精度为Rtar,两者相等。根据不同高、低bit输入和权重的组合,Rfull被分为了四个部分,HH、HL、LH、LL,相应的,Rtar也被分为了四个部分。Rtar的精度取决于Po。Rfull的HH部分取Po比特 作为Rtar的HH部分,HL取Po-Pin/2比特,LH取Po-Pw/2比特,LL取Po-(Pin+Pw)/2。此处LL可能出现负值,但前面说过,SA对于负值会输出0。
下面是计算过程:







在crossbar上实现NN算法

前面所述的一切是MLP神经网络算法。
稍作变换可以实现卷积层算法,即将下式映射到crossbar array上:

其中finj 是输入特征映射,fouti是输出特征映射,gi,j是第j个输入和第i输出的卷积核,bi为偏置。就像突触权重一样,gi,j被串行编入到一列中(多列的话操作比较复杂,这里假设一列就能容纳所有卷积核),bi也被编入。然后再进行计算。
还可以实现Pooling layer
文章介绍了max pooling(输出最大值)和mean pooling(输出均值)。
max pooling:本文采用4:1 max pooling,即从4个数据中选出最大值。但它也可以通过多次操作实现n:1,n>4。其原理是将数据两两相减,并把得到的正负号存入winner code存储器,最后电路检测并输出最大值。反应到矩阵上是将{ai}向量与编入RRAM单元的做点积。
mean pooling简单得多,将{1/n,…1/n}编入RRAM单元,然后进行上述点积运算。
PRIME目前不能加速局部响应归一化层(LRN),需要借助CPU进行计算。没有查到多少关于这个层的资料,因为这个层的作用似乎不大,并且已经逐渐被其他技术代替了。[1]

引用注释

[1]https://blog.csdn.net/searobbers_duck/article/details/51645941 作者:江洋大盗与鸭子

PRIME:一种在RRAM-based主存中进行神经网络计算的存算融合结构相关推荐

  1. 桩筏有限元中的弹性板计算_PKPM2010年11月结构技术问题汇总

    2010年11月第一周结构技术问题汇总 1.JCCAD地质资料中只输入一个土层,微风化岩,压缩模量输入30000Mpa,保 存后再进入压缩模量发生变化,如何处理? 答:因为只输入了一个土层.可在微风化 ...

  2. multism中ui和uo应该怎么表示_吐血整理!这篇带你彻底理解主存中存储单元地址的分配...

    在阅读本文之前,建议没有基础的读者先阅读下主存的基本组成结构: 五分钟理解主存储器的基本组成结构 存储单元的字地址: 我们来看张图: 在上面的图中,每一个小矩形代表一个存储单元,大矩形表示主存中的存储 ...

  3. 计算机组成原理学习笔记第4章 4.2——主存中的数据组织

    有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) 目录 0.思维导图 1.存储字长 2.数据存储与边界的关系 ①按边界对齐的数据存储 ②未按边界对齐的数据存储 ③边界 ...

  4. 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...

    原标题:三种电磁流量计运行过程中常见故障解决详情! 昨天给大家介绍了电磁流量计的一些典型故障,今天我们继续来谈电磁流量计的故障问题!电磁流量计在正常的保养与维护之后,在正常使用的过程中依旧是会因为当时 ...

  5. 以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学。对于创建个人的和动态的经历

    以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学.对于创建个人的和动态的经历来 ...

  6. 5种避免C#.NET中因事件造成内存泄漏的技术

    原文来自互联网,由长沙DotNET技术社区编译. 5种避免C#.NET中事件造成的内存泄漏的技术 C#(通常是.NET)中的事件注册是内存泄漏的最常见原因.至少从我的经验来看.实际上,我从事件中看到了 ...

  7. easyui下拉框option写死_JavaScript_jQuery+easyui中的combobox实现下拉框特效,1.第一种写法:Input框中显示: - phpStudy...

    jQuery+easyui中的combobox实现下拉框特效 1.第一种写法:Input框中显示: 2. 第二种用法,在list列表中显示: 类别 3. 第二种的另一种写法: 类别 以上3种方法均可实 ...

  8. 几种在shell命令行中过滤adb logcat输出的方法

    几种在shell命令行中过滤adb logcat输出的方法 分类标签: LogCat  ADB 我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流 ...

  9. 5种样式实现div容器中三图摆放实例对比说明

    代码地址如下: http://www.demodashi.com/demo/11593.html 效果演示: demo点查看效果 需求说明: 如下图所示为设计图,希望在图片上传无规则无规律的情况下实现 ...

最新文章

  1. Map Reduce Shuffle
  2. Facebook推开源软件平台ParlAI,能否解决机器人灵魂缺失问题?
  3. linux-git服务搭建
  4. Linux磁盘分区与挂载
  5. 【C语言】第一章 计算机及程序设计概述 题解
  6. Milking Grid poj2185
  7. 程序员,活得是本事:30 岁后的 人生建议
  8. Luogu P4053 [JSOI2007]建筑抢修
  9. LoadRunner9 5新特性
  10. Java实现在线视频通话
  11. jvisualvm安装插件出现网络问题
  12. 【南航计算机网络实验】Ping 命令的实现
  13. 卫星地面站的星地链路研究
  14. qt.qpa.plugin:Cound not load the QT platform plugin “windows“ in “ “even though it was found.
  15. 基于微信小程序的图书馆管理系统设计与实现(论文+程序设计源码+数据库文件)
  16. 一个和尚挑水吃,两个和尚抬水吃,三个和尚没水吃
  17. js-09二级联动购物车案例
  18. 工商名人堂 爱德华·约翰逊二世---富达基金的崛起(转载自新浪)
  19. 简悦+Logseq 搭建本地化个人知识库
  20. ArcGIS Online试用版注册 并发布要素服务

热门文章

  1. 一个月的时间戳是多少?
  2. 【项目管理】人力资源管理之二:马斯洛需求层次理论
  3. 医院病房管理信息系统PHP版本
  4. kali更新源安装中文输入法
  5. ABAP--ABAP程序员需要参加的课程
  6. 金山毒霸四月安全趋势 继续关注网页挂马
  7. 那些你可能不知道的百度文库/网盘快速下载工具
  8. 几个贼吓人的大佬,各个硬核
  9. qq音乐专辑封面 api
  10. java怎么把整数转成小数_Java - 常规 - 字符串转换为整数或小数