回过头再看 计算机体系结构2----缓存cache

原创 2016年09月28日 09:52:48
什么是缓存(cache)?
     CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便。
 

为什么有缓存?
     众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责读写数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, 访问内存只比访问CPU寄存器慢一点儿. 由于内存的发展都到技术及成本的限制, 现在获取内存中的一条数据大概需要200多个CPU周期(CPU cycles), 而CPU寄存器一般情况下1个CPU周期就够了.所以我们需要缓存技术。也就是在内存和CPU之间加入多层缓存   

缓存是为了解决CPU速度和内存速度的速度差异问题那么把数据放至离CPU更近的缓存, 会给程序带来很大的速度提升所以内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,缓存的读取速度要比内存快很多。
      例如, 做一个循环计数, 把计数变量放到缓存里,就不用每次循环都往内存存取数据了.这样就性能很好,
由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。
     内存与CPU的速度相差太远, 于是CPU设计者们就给CPU加上了缓存(CPU Cache),同样网页浏览器为了加快速度,会在本机存缓存以前浏览过的数据; 传统数据库或NoSQL数据库为了加速查询, 常在内存设置一个缓存, 减少对磁盘(慢)的IO. 

但是缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
     这里要特别指出的是:
     1.因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,相当于浪费了去缓存找的时间,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
     2.因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的。也就是每次都要复制新的




[引申]
CPU缓存
下面是CPU Cache的简单示意图

随着多核的发展, CPU Cache分成了三个级别: L1, L2, L3. 级别越小越接近CPU, 所以速度也更快, 同时也代表着容量越小. L1是最接近CPU的, 它容量最小, 例如32K, 速度最快,每个核上都有一个L1 Cache(准确地说每个核上有两个L1 Cache, 一个存数据 L1d Cache, 一个存指令 L1i Cache). L2 Cache 更大一些,例如256K, 速度要慢一些, 一般情况下每个核上都有一个独立的L2 Cache; L3 Cache是三级缓存中最大的一级,例如12MB,同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个L3 Cache.

从CPU到 大约需要的CPU周期 大约需要的时间(单位ns)
寄存器 1 cycle  
L1 Cache ~3-4 cycles ~0.5-1 ns
L2 Cache ~10-20 cycles ~3-7 ns
L3 Cache ~40-45 cycles ~15 ns
跨槽传输   ~20 ns
内存 ~120-240 cycles ~60-120ns
就像数据库cache一样, 获取数据时首先会在最快的cache中找数据, 如果没有命中(Cache miss) 则往下一级找, 直到三层Cache都找不到,那只要向内存要数据了. 一次次地未命中,代表取数据消耗的时间越长.

版权声明:本文为博主原创文章,未经博主允许不得转载。

计算机体系结构4_分级缓存

一,处理器和内存系统结构                                                        主存在内存体系结构距离CPU最远端,缓存在内存体系结构距离C...
  • u012259202
  • u012259202
  • 2013年11月07日 18:58
  • 1850

cache为什么分为i-cache和d-cache以及Cache的层次设计

从两个方面来回答:  一方面是cache的行为。Icache大多都是顺序取指,碰到分支指令也会跳转,而Dcache访问的模式变化比较大.也就是前者所说的pattern的问题.指令只有读和refill没...
  • bytxl
  • bytxl
  • 2015年12月12日 15:53
  • 7351

多核DSP C6678下CCS5.2 环境下分析L1P,L1D,L2 cache的方法

1.ccs5.2---Tools下的Prolife工具中,提供了L2,L1D的分析 2.对于L1 P \ccsv5\tools\compiler\c6000\doc下面的spru18...
  • feixiaku
  • feixiaku
  • 2013年03月01日 22:16
  • 2786

计算机体系结构--Cache

cache cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。当处理器引用存储...
  • jankin6
  • jankin6
  • 2017年09月12日 19:32
  • 137

计算机体系结构——存储体系

本章重点是页式虚拟存储器映象及地址变换过程;LRU,FIFO的替换算法;LRU的堆栈分析过程;Cache组相联地址映象和LRU块替换;虚存,Cache的性能分析,要求达到综合应用的水平。本章是重点章。...
  • iwainfo
  • iwainfo
  • 2004年12月14日 17:29
  • 9873

Cache的组成结构

在一个Cache中包含多行多列,存在若干类组成方式。在处理器体系结构的历史上,曾出现过更多的的组成结构,最后剩余下来的是我们耳熟能详的Set-Associative组成结构。这种结构在现代处理器微架构...
  • anjiashuai521
  • anjiashuai521
  • 2014年03月09日 14:50
  • 1216

计算机中内存、cache和寄存器之间的关系及区别

1. 寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的...
  • u014074954
  • u014074954
  • 2015年07月28日 10:45
  • 10248

计算机中内存、cache和寄存器之间的关系及区别

1. 寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的...
  • hellojoy
  • hellojoy
  • 2017年01月26日 15:23
  • 10601

计算机体系结构6_缓存结构

一,缓存结构         下图为一个n-way set-associative cache 结构图:                                                ...
  • u012259202
  • u012259202
  • 2013年11月07日 21:16
  • 3070

cache机制

cache机制 转载地址:http://www.cnblogs.com/liloke/archive/2011/11/20/2255737.html 在阅读文章前,您应该具备基本的...
  • orange_os
  • orange_os
  • 2012年08月10日 22:27
  • 8359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:回过头再看 计算机体系结构2----缓存cache
举报原因:
原因补充:

(最多只允许输入30个字)