精华内容
下载资源
问答
  • 文章经授权转载自半导体行业观察(ID:icbank)最近,内存内计算成了热门关键词。今年早些时候,IBM发布了基于相变内存(PCM)的内存内计算,在此之后基于Flash...
        

    640?wx_fmt=gif

    文章经授权转载自半导体行业观察(ID:icbank


    最近,内存内计算成了热门关键词。今年早些时候,IBM发布了基于相变内存(PCM)的内存内计算,在此之后基于Flash内存内计算的初创公司Mythic获得了来自软银领投的高达4000万美元的B轮融资,而在中国,初创公司知存科技也在做内存内计算的尝试。本文将对内存内计算的原理以及其市场前景做一些分析。


    冯诺伊曼架构之痛


    冯诺伊曼架构是计算机的经典架构,同时也是目前计算机以及处理器芯片的主流架构。在冯诺伊曼架构中,计算/处理单元与内存是两个完全分离的单元:计算/处理单元根据指令从内存中读取数据,在计算/处理单元中完成计算/处理,并存回内存。


    640?wx_fmt=png


    冯诺伊曼架构是经典的计算机体系架构,也构成了过去近一个世纪的计算机科学的基础。然而,冯诺伊曼架构在构建之初只是一个理论模型,在建立该模型时做了一个合理的假设就是处理器和内存的速度很接近。当然,冯诺伊曼在当时没有办法预测到未来集成电路发展对于计算机造成的深远变化。计算机处理器的性能随着摩尔定律高速发展,其性能随着晶体管特征尺寸的缩小而直接提升,因此在过去数十年中其性能提升可谓是天翻地覆,现在一颗手机中处理器的性能已经比30年前超级计算机中的处理器还要强。另一方面,计算机的主要内存使用的是DRAM方案,DRAM是基于电容充放电实现的高密度存储方案,其性能(速度)取决于两方面,即内存中电容充放电的读取/写入速度以及DRAM与处理器之间的接口带宽。DRAM电容充放电的读取/写入速度随着摩尔定律有一定提升,但是速度并不如处理器这么快,另一方面DRAM与处理器之间的接口属于混合信号电路,其带宽提升速度主要是受到PCB板上走线的信号完整性所限制,因此从摩尔定律晶体管尺寸缩小所获得的益处并不大。这也造成了DRAM的性能提升速度远远慢于处理器速度,目前DRAM的性能已经成为了整体计算机性能的一个重要瓶颈,即所谓阻碍性能提升的“内存墙”。


    640?wx_fmt=jpeg


    除了性能之外,内存对于能效比的限制也成了传统冯诺伊曼体系计算机的一个瓶颈。这个瓶颈在人工智能应用快速普及的今天尤其显著。这一代人工智能基于的是神经网络模型,而神经网络模型的一个重要特点就是计算量大,而且计算过程中涉及到的数据量也很大,使用传统冯诺伊曼架构会需要频繁读写内存。目前的DRAM一次读写32bit数据消耗的能量比起32bit数据计算消耗的能量要大两到三个数量级,因此成为了总体计算设备中的能效比瓶颈。如果想让人工智能应用也走入对于能效比有严格要求的移动端和嵌入式设备以实现“人工智能无处不在”,那么内存访问瓶颈就是一个不得不解决的问题。


    640?wx_fmt=png



    内存内计算的原理


    为了解决“内存墙”问题,一个最近得到越来越多关注的思路就是做内存内计算。2018年的国际固态半导体会议(ISSCC,发表最领先的芯片设计成果,称为“芯片界的奥林匹克”)有专门一个议程,其中的论文全部讨论内存内计算;到了2019年,根据最新发布的ISSCC 2019预览,也有5篇关于内存内计算的论文,不过分散在不同的议程中。内存计算的主要改进就是把计算嵌入到内存里面去,这样内存就不仅仅是一个存储器,还是一个计算器。这样一来,在存储/读取数据的时候就同时完成了运算,因此大大减少了计算过程中的数据存取的耗费。


    640?wx_fmt=jpeg


    内存内计算现在还处于探索阶段,有很多种具体实现方式。举一个ISSCC 2018年论文中的例子。这个内存内计算的电路由MIT的研究组提出,主要用途是加速卷积计算。我们知道,卷积计算可以展开成带权重的累加计算,从另一个角度来看其实就是多个数的加权平均。因此,该电路实现的就是电荷域的加权平均,其中权重(1-bit)储存在SRAM中,输入数据(7-bit数字信号)经过DAC成为模拟信号,而根据SRAM中的对应权重,DAC的输出在模拟域被乘以1或者-1,然后在模拟域做平均,最后由ADC读出成为数字信号。具体来说,由于乘法的权重是1-bit(1或-1),因此可以简单地用一个开关加差分线来控制,如果是权重是1就让差分线一边的电容充电到DAC输出值,反之则让差分线另一边充到这个值。平均也很简单,几条差分线简单地连到一起就是在电荷域做了平均了。


    640?wx_fmt=jpeg


    当然,内存内计算的电路并不止于一种,其计算的精度也并不限于1-bit计算。但是,从以上的例子我们可以看出内存内计算的核心思想,一般是把计算都转化为带权重加和计算,把权重存在内存单元中,然后在内存的核心电路(如读出电路)上做修改,从而让读出的过程就是输入数据和权重在模拟域做点乘的过程,相当于实现了输入的带权重累加,即卷积。因为卷积是人工智能以及其他计算的核心组成部分,因此内存内计算可以被广泛使用在这类应用中。内存内计算会使用模拟电路做计算,这也是它和传统使用数字逻辑做计算的不同之处。


    内存内计算的两大推动力以及市场前景


    人们十几年之前就认识到了“内存墙”的问题,但是为什么内存内计算在这两年才火起来呢?我们认为,最近内存内计算兴起的背后有两大动力。


    第一个动力是基于神经网络的人工智能的兴起,尤其是人工智能希望能普及到移动端和嵌入式设备中,这样能效比很高的内存内计算就获得了关注。另外,神经网络的一个特点是对于计算精度的误差拥有较高的容忍度,因此内存内计算的模拟计算中引入的误差往往可以被神经网络所接受,也可以说内存内计算和人工智能(尤其是嵌入式人工智能)可谓是天作之合。


    第二个动力是新的存储器。对于内存内计算来说,存储器的特性往往决定了内存内计算的效率,因此当带有新特性的存储器出现时,往往会带动内存内计算的发展。举例来说,最近很火的ReRAM使用电阻调制来实现数据存储,因此每一位的读出使用的是电流信号而非传统的电荷信号。这样一来,由于电流做累加运算是非常自然而然的操作(把几路电流直接组合在一起就实现了电流的加和,甚至无需额外电路),因此ReRAM非常适合内存内计算,也确实有不少研究组已经在做相关的研究并发表了论文。从存储器推广的角度,新的存储器也愿意搭上人工智能的风潮,因此新存储器厂商也乐于看到有人做基于自家存储器的内存内计算加速人工智能,也会帮助一起推广内存内计算。


    因为内存内计算的两大推力是人工智能和新存储器,因此我们看到的新存储器产品在人工智能和新存储器这两个关键词上至少会有一个,也有不少内存内计算项目会同时横跨两个关键词。


    内存内计算的芯片产品预计会有两种形式。第一种形式是作为一种带有计算功能的存储器IP出售。这样的带内存内计算功能的存储器IP可能是传统的SRAM,也可能是eFlash,ReRAM,MRAM,PCM这样的新存储器。这样的存储器IP往往是一家做内存内计算的公司和一家做存储器的公司(如TSMC或SMIC)联合做推广。


    第二种形式是直接做基于内存内计算的人工智能加速芯片。例如Mythic就计划流片做基于Flash存储器的PCIe加速卡,通过PCIe接口和主CPU做通信,Mythic的内存芯片上存储了权重数据,这样当数据送到Mythic的IPU上后就可以直接读出计算结果。这样一来就省去了权重数据的读取开销。


    640?wx_fmt=jpeg


    那么内存内计算对于人工智能芯片市场会有什么影响呢?首先,我们看到内存内计算本质上会使用模拟计算,因此其计算精度会受到模拟计算低信噪比的影响,通常精度上限在8bit左右,而且只能做定点数计算,难以做浮点数计算。所以,需要高计算精度的人工智能训练市场并不适合内存内计算,换句话说内存内计算的主战场是在人工智能推理市场。即使在人工智能推理市场,由于精度的限制,内存内计算对于精度要求较高的边缘服务器计算等市场也并不适合,而更适合嵌入式人工智能等对于能效比有高要求而对于精确度有一定容忍的市场。此外,内存内计算其实最适合本来就需要大存储器的场合。举例来说,Flash在IoT等场景中本来就一定需要,那么如果能让这块Flash加上内存内计算的特性就相当合适,而在那些本来存储器并不是非常重要的场合,为了引入内存内计算而加上一块大内存就未必合适。基于这样的分析,我们认为内存内计算有望成为未来嵌入式人工智能(如智能IoT)的重要组成部分。


    结语


    随着人工智能和新存储器的兴起,内存内计算也成为了新的热点。内存内计算利用存储器的独特特性,结合模拟计算直接在存储器中完成计算,从而大大减少人工智能计算中的内存读写操作。由于内存内计算的精度受到模拟计算的限制,因此它最适合追求能效比且能接受一定精确度损失的嵌入式人工智能应用。


    640?wx_fmt=gif

    以上文章为转载,不代表本报观点


    640?wx_fmt=jpeg

    展开全文
  • 内存带宽计算

    千次阅读 2014-11-12 19:20:06
    内存带宽计算公式:带宽=内存核心频率×内存总线位数×倍增系数。 先容我从DDR的技术说起,DDR采用时钟脉冲上升、下降沿各传一次数据,1个时钟信号可 以传输2倍于SDRAM的数据,所以又称为双倍速率SDRAM。...

    内存带宽计算公式:带宽=内存核心频率×内存总线位数×倍增系数。


    先容我从DDR的技术说起,DDR采用时钟脉冲上升、下降沿各传一次数据,1个时钟信号可


    以传输2倍于SDRAM的数据,所以又称为双倍速率SDRAM。它的倍增系数就是2。


    DDR2仍然采用时钟脉冲上升、下降支各传一次数据的技术(不是传2次),但是一次预读


    4bit数据,是DDR一次预读2bit的2倍,因此,它的倍增系数是2X2=4。


    DDR3作为DDR2的升级版,最重要的改变是一次预读8bit,是DDR2的2倍,DDR的4倍,所以


    ,它的倍增系数是2X2X2=8。


    需要补充的一点是,内存有三种不同的频率指标,它们分别是核心频率、时钟频率和有效


    数据传输频率。核心频率即为内存Cell阵列(Memory Cell Array)的工作频率,它是内存


    的真实运行频率;时钟频率即I/O Buffer(输入/输出缓存)的传输频率;而有效数据传


    输频率则是指数据传送的频率。DDR3内存一次从存储单元预取8Bit的数据,在I/OBuffer


    (输入/输出缓存)上升和下降中同时传输,因此有效的数据传输频率达到了存储单元核


    心频率的8倍。同时DDR3内存的时钟频率提高到了存储单元核心的4倍。也就是说DDR3-800


    内存的核心频率只有100MHz,其I/O频率为400MHz,有效数据传输频率则为800MHz。


    从SDRAM-DDR时代,数据总线位宽时钟没有改变,都为64bit,但是采用双通道技术,可以


    获得64X2=128bit的位宽。


    下面计算一下一条标称DDR3 1066的内存条在默认频率下的带宽:


    1066是指有效数据传输频率,除以8才是核心频率。一条内存只用采用单通道模式,位宽


    为64bit。所以


    内存带宽=(1066/8)×64×8=68224Mbit。由此可知,如果内存工作在标称频率的时候,可


    以直接用标称频率×位宽,简化公式。


    再根据8bit(位)=1Byte(字节),得68224/8=8528MByte=8.328125GB。


    再以两条标称1066超频到1200的DDR3内存,组成双通道后的带宽:


    超频到1200后,内存核心频率应为1200/8=150MHz,而双通道的位宽=128bit:


    带宽=150×128×8=153600Mbit=18.75GB
    展开全文
  • 计算机中内存地址计算问题

    千次阅读 2014-11-04 21:43:49
    在软件设计师考试中经常会出现这种题目...且按字节编址的内存容量为 ( )KB, 若用 16K*4bit 的 存储器芯片构成该内存,共需(   )片   地址编号从 80000H 到 BFFFFH 且按字节编址的内存容量为 ( )KB, 若用 16K*4bit

    在软件设计师考试中经常会出现这种题目 例如(2013年下半年的软件设计师考试题目)

    地址编号从80000H到BFFFFH且按字节编址的内存容量为(  )KB,若用16K*4bit的存储器芯片构成该内存,共需()片

    首先我们这一点应该非常熟悉就是 一般情况下 在以H结尾的数字 通常是指十六进制数字 ,在16进制中A 10 B  11以此类推。。。。。

    那么内存容量我们就可以这样来计算


     = BFFFF - 80000+1 

    = C0000 - 80000

    =  (C - 8)* 16^4

    =  4* 16^4 = 4* 2^16 

    因为1KB = 2^10bit

    所以 = 4*2^6 = 256KB


    你也可以直接按照十六进制进行计算   = 40000(十六进制) = 4 * 16^4(十进制)


    所以内存容量为(256)KB


    因为内存是按字节编址的,所以256/8 = 32  所以共需要32片。


    展开全文
  • Linux实际内存使用计算

    万次阅读 2019-03-25 11:40:59
    Linux实际内存使用情况计算 通常我们看到Linux用top命令查看系统运行状况,普遍看到Used Memory占到了将近总内存的90%,然后很多人以为系统内存已经不足。其实,这只是Linux的为了提高文件读取的性能的内存使用...

     

    Linux实际内存使用情况计算

     

    通常我们看到Linux用top命令查看系统运行状况,普遍看到Used Memory占到了将近总内存的90%,然后很多人以为系统内存已经不足。其实,这只是Linux的为了提高文件读取的性能的内存使用机制罢了。不同于Windows,windows程序执行完后,会马上释放掉内存,把Memory降下来。而对于Linux,如果你的服务器内存还有足够多的空间的话,Linux会把程序运行的数据缓存起来,加入到Cache中,所以内存会不断增加,直到一定的限度为止.当超过这限度后,内核必须将脏页写回磁盘,以便释放内存。也就是说,当空闲内存低于一个特定的阈值时,内核的守护进程就会进行内存块回收.

     

    如何查看Linux内存使用情况呢,一般的我们可以用top命令。

     

    我们可以看到free 的mem只有763704k(700多M), 已经使用量达到:3160424k(大概3G),而缓存的内存达到:2127220k 差不多2G.

    看起来好像内存的确不够了,但是我们还有约2G+700M的空间可用。

     

    我们用free -m 命令查看下内存的使用情况:

     

     

    以上各参数的解释:
    total:总物理内存的大小。
    used:已使用内存。
    free:可用内存。
    Shared:多个进程共享的内存总额。
    Buffers/cached:磁盘缓存的大小。
    第二行:memory使用情况。
    第三行(-/+ buffers/cache)。
    第四行交换分区使用情况。

     

    区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 

    这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是746M,已用内存是3085M,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

    第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

     

     

    所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached
    如上例:

     

    可用内存的计算为:2942M=746M+118M+2077M

     


    所以,我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,提高文件读取的性能,以方便下次使用。但实际上这些内存,如果需要的话,也是可以立刻拿来使用的。


    所以计算 可用内存=free+buffers+cached=total(3832)-used(889)

     

    相关视频课程推荐《站长必修课:网站是怎样做出来的?》https://edu.51cto.com/sd/3be5b

    网站是怎样做出来的?

     

     

     

    展开全文
  • 内存水线计算

    千次阅读 2016-03-13 11:03:34
    linux内存管理中系统内存相关的参数说明(一)  http://blog.chinaunix.net/uid-27177626-id-4197018.html
  • HashMap内存占用计算

    千次阅读 2014-02-12 10:43:49
    HashMap内存占用计算 HashMap占内存比较大,不少人都更关注于HashMap所占的内存怎么计算。 运行了一下,没找到HashMap的极限容量,但就发现HashMap很耗内存,一下子就OutOfMemoryError了。 Integer...
  • Spark 2.2 内存占用计算公式

    千次阅读 2018-07-06 13:49:53
    在Spark内存管理调优中,...ExecutionMemory用于spark计算中的shuffles、 joins、sorts 、 aggregations这些操作,storageMemory用于缓存数据和保存广播变量数据Spark内存空间计算:ExecutionMemory = spark.shuffl...
  • AIX 与oracle优化(非计算内存计算内存) 转自:http://www.aixchina.net/home/space.php?uid=16133&do=blog&id=21461 通俗的说法: 凡是硬盘上有对应的数据,占用的内存,就是非计算内存,非计算内存...
  • DDR3 内存带宽计算

    千次阅读 2016-08-24 15:17:25
    内存带宽计算公式:带宽=内存核心频率×内存总线位数×倍增系数。   先容我从DDR的技术说起,DDR采用时钟脉冲上升、下降沿各传一次数据,1个时钟信号可以传输2倍于SDRAM的数据,所以又称为双倍速率SDRAM。它的...
  • 例如:进程数据、堆栈、共享内存、内核数据。 永久存储分页(Permanent storage pages):永久存储分页是一些包含永久数据(也就是说,重新启动后仍然存在的数据)的分页。这种永久数据就是文件数据。因
  • 内存地址计算问题

    千次阅读 2017-06-05 11:51:19
    1.内存地址从A4000H到CBFFFH共有几个存储单元是怎么计算的?:CBFFF-A4000+1=28000(十六进制) CBFFF-A4000+1=CC000-A4000=(CC-A4)*16^3=(CC-A4)*2^12=(2*16+8)*2^12=40*2^12=160*2^10 (B)=160 (KB)2.若内存按字节...
  • 内存ram容量计算

    千次阅读 2020-05-09 14:54:07
    ram容量通常是指随机存储器的内存容量,是内存条的关键性参数。内存的容量一般都是2的整次方倍,比如64MB、128MB、256MB等,内存容量越大越有利于系统的运行。进入21世纪初期的台式机中主流采用的内存容量为2GB或4GB...
  • 内存计算技术综述

    千次阅读 2019-05-12 00:41:29
    内存计算技术综述 传送门
  • Java对象内存大小计算

    千次阅读 2018-07-03 14:43:34
    最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好:...
  • 图片内存计算大小

    千次阅读 2017-12-02 21:40:23
    一张1280*740 RGBA4448的图片占内存大小 (M)? 2048*1024*(4+4+4+8)/(8*1024*1024) 解析:第一步:内存中图片大小必须为2^n  第二步:RGBA8888是4位8bit 像素点:4*8 位数*颜色深度 第三步:内存大小 ...
  • 解决 Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足解决 Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足问题问题分析解决办法一解决办法二 解决 Windows 照片查看器无法...
  • 市面上有一些初学者的误解,他们拿spark和hadoop比较时就会说,Spark是内存计算内存计算是spark的特性。请问在计算机领域,mysql,redis,ssh框架等等他们不是内存计算吗?依据冯诺依曼体系结构,有什么技术的程序...
  • 图片内存占用计算

    千次阅读 2008-07-18 16:06:00
    对图片资源在内存中占用量的计算成为J2ME游戏开发者的经常性工作,CoCoMo来解释一下如何计算图片在内存中的占用量: 内存占用量=宽*高*像素字节数,其中像素字节数因机型而异。 例如一张64*64的图片在7210上的内存...
  • mysql内存计算公式

    千次阅读 2013-07-08 15:35:04
    mysql内存计算公式 mysql used mem =key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size + max_connections * ( ...
  • !...第一个我理解为 和 double对齐是16 第二个 是 4*3 = 12 第三个理解为 (1+7)+8= 16 第四个 8* 3 =24; 和运行的出来的结果完全不对啊,,看了好几篇 对齐的文章,,把文章示例抄过来运行都是错的。...
  • 内存大小的计算

    千次阅读 2018-11-20 19:58:44
    十进制 131072 字节 = 128 K Byte 0x4 00 00 = 十进制 262144 字节 = 256 K Byte 内存大小的计算 0XE000 = 十进制 57344 57344字节÷1024字节/K=56K 0X2800 = 十进制 10240 10240字节÷1024字节/K=10K stm32f10...
  • 计算机内存体系与Java 内存模型

    千次阅读 2019-05-26 15:39:41
    让计算机并发执行若干个任务与更充分的利用计算机处理器的效能之间的因果关系,非常的复杂,其中一个重要的复杂性来源是绝大多数的运算任务都不可能只靠处理器计算就能完成的,处理器至少要与内存交互,如:读取运算...
  • 计算机内存带宽详解

    千次阅读 2019-09-27 16:59:38
    内存带宽计算公式:带宽=内存核心频率×内存总线位数×倍增系数。 先容我从DDR的技术说起,DDR采用时钟脉冲上升、下降沿各传一次数据,1个时钟信号可以传输2倍于SDRAM的数据,所以又称为双倍速率SDRAM。它的倍增...
  • 内存计算技术资料整理

    万次阅读 2014-12-13 14:22:32
    先来看一下一张技术的全景图,其中涉及内存计算的技术标成红色。 1)事务处理:主要分为Cache(Memcached, Redis, GemFire)、RDBMS、NewSQL(以VoltDB为首的)三部分,缓存和NewSQL数据库是关注的重点。2)流式处理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,478,814
精华内容 591,525
关键字:

内存内计算