Memory Hierarchy

  • 我们是如何构建指令 / 数据存储器的?
    • 内存时序
    • 为什么Memory hierarchy有效?
    • 存储器技术
    • Cache的基本原理
    • Cache访问
      • 访问缺失
    • Cache性能的评估和改进
    • 减少cache miss的方法
    • 替换块的选择
    • Cache ABC
      • 访问缺失分类 Classifiying Misses

我们是如何构建指令 / 数据存储器的?

以64位Arm处理器为例,内部有32个寄存器

  • Register file? Flip-flop构建

    • 32个64-bit 寄存器 -> 2Kb = 256Bytes
    • 可以使用多端口,bigger and slower but still ok
  • Instruction / data memory? 也是Flip-flop构建

    • each instruciton address has 64 bits

      -> 2^64 addressible unit

      -> 2^64 bytes -> 2^4 Exbi-bytes = 16EB (不可能的

  • “Primary” instruction / data memory 是单端口的SRAM

    • “Primary” = 在数据通路中

    • 只包含了一个memory的动态的子集

    • 缺失的部分到下一级内存查找

内存时序

对于内存元件M来说:

  • Access:从M中读或写

  • Hit:从M中获取所需数据

  • Miss:M中找不到所需数据

    • 必须从其他的部分得到
    • 没有“miss in register file” 的概念
  • Fill:将数据放到M

  • %_miss = miss rate(未命中率) :#misses / #access

  • t_hit:从M中读或写数据所用时间

  • t_miss:将数据送到M所用时间

  • 表现评估:平均访问时间(average access time)

    t_avg = t_hit + %_miss * t_miss

Problem: 很难在同一结构中做到低 t_hit 和低 %_miss

  • 大内存的结构 -> 低%_miss、高t_hit

    因为内存大所以找到所需数据的概率较高,未命中率低

    但寻找数据的时间相应会提高

  • 小内存的结构 -> 高%_miss、低t_hit

    因为内存小所以找到所需数据的概率较低,未命中率高

    寻找数据的时间降低

Solution: 使用Memory hierarchy,即存储器分层,中间以总线相连

M1 <-> M2 <-> M3 <-> M4 <-> M <->

  • 层次越高:内存越小 -> 高%_miss、低t_hit
  • 层次越低:内存越大 -> 低%_miss、高t_hit

M1中存储最频繁访问的数据,

M2中存储M1 + next most frequently 访问的数据

为什么Memory hierarchy有效?

  • 时间局部性

    最近被访问的指令/数据更可能在短时间内被访问

  • 空间局部性

    最近被访问的指令/数据附近的指令/数据更可能在短时间内被访问

所以,存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。存储器的容量和访问时间随着离处理器距离的增加而增加

存储器技术

  • DRAM

  • SRAM

  • Flash

    是一种电可擦除的可编程制度存储器(EEPROM)

  • 磁盘

Cache的基本原理

直接映射(direct mapped):每个存储器地址仅仅对应到cache的一个位置。

几乎所有的直接映射cache都使用以下的映射方法:

(块地址) mod (cache中的块数)

主存地址0-31被映射到cache的相同位置,该cache有8个字,所以地址X被直接映射到cache字X mod 8,即低log2(8) = 3位都被用作cache索引(index)。所以地址00001、01001、10001、11001都对应于cache中第101块。

由于cache中的每个位置对应于主存中多个不同的地址,所以我们在cache中增加标记(tag) 。标记包含了地址的高位(如上图的高两位),用于判断cache中的字是否就是所请求的字。

还有几位偏置位(offset bits) 用来确定字中的byte

除此之外,cache中还需要增加一个有效位(valid bit) 来标识一个块是否含有一个有效地址。

所以,cache的地址可以分为三个部分:

  • offset bit:最低 log2(block-size in bytes) bits

  • Index:接下来log2(number-of-sets) bits

  • Tag: 剩下的所有位

    (valid bit不在地址中)

Example cache:

8 sets, 32-bit words = 4-byte blocks, 16 bit address

-> 8 sets = 3 bits index

-> 4-byte blocks = 2 bits offset

-> 16 - 3 - 2 = 11 bits of tag

Cache访问

下面是对一个容量为8 blocks的空cache进行9次访问的一个序列(5-bit address, 3-bit index) 暂时不包括offset bits


访问缺失

当出现访问缺失(cache miss)的时候,由两部分来处理:处理器控制单元(Cache controller)和进行初始化主存访问和重新填充cache的独立控制器

如果cache不命中,那么它需要存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中

Cache性能的评估和改进

减少cache miss的方法

直接映射(direct mapping):一个块只能放到cache中一个明确的位置。是一种极端的情况

另一种极端的情况:

全相联(fully associative):一个块可以被放置在cache中的任何位置,因此需要检索cache中所有的项,所以全相联只适合块数较少的cache。

介于直接映射和全相联之间的设计是组相联(set associative):块可以放置到cache中的部分位置(至少两个)。一个块首先被直接映射到一个组,然后检索该组中所有的块是否匹配。

For example:在直接映射的方式下,主存块12只能放置在cache中唯一的块中,该块为(12 mod 8)= 4。在两路组相联cache中,有四个组,主存块12必须放在第(12 mod 4)= 0组中,主存块可以放在该组的任何位置。在全相联的方式下,块地址为12的主存块可以放在cache中8个块的任意一块。

提高相联度的好处在于它通常能够降低缺失率,缺点则是增加了命中时间。

替换块的选择

当直接映射的cache发生缺失时,被请求的块只能放置于cache的唯一位置,而原先占据那个位置的块就必须被替换掉。

在组相联的cache中,被请求的块放置在什么位置需要进行选择,因此替换哪一块也需要进行选择。

在全相联cache中,所有的块都可能被替换。

  • 最常用的方法是最近最少使用(Least Recently Used,LRU)法,被替换的块是最久没有使用的那一块。

对于一个两路组相联cache,跟踪组中两个数据项的使用情况可以这样实现:在每组中单独保留一位,通过设置该位指出哪一项被访问过。

当相联度提高时,LRU的执行就变得困难。

  • Random 随机选一项被替换
  • FIFO
  • NMRU(not most recently used)

Cache ABC

  • Associativity

Decreases conflict misses

Increases t_hit

  • Block size

Increases conflict misses

Decrases compulsory misses

little effect on t_hit, may exacerbate t_miss

  • Capacity

Decreases capacity misses

Increases t_hit

访问缺失分类 Classifiying Misses

Compulsory(cold) : 从来没见过这个地址 -> block size ⬆️

Capacity :cache太小了 -> cache size ⬆️

Conflict:cache相联度太低 -> associativity⬆️

【计算机基础】存储器层次 Memory hierarchy相关推荐

  1. 深入理解计算机系统——第六章 The Memory Hierarchy

    深入理解计算机系统--第六章 The Memory Hierarchy 6.1 Storage Technologies 6.1.1 Random Access Memory Nonvolatile ...

  2. Linux学习-计算机基础

    Linux 学习-计算机基础 一.描述计算机的组成及其功能. 计算机系统是由硬件(Hardware)和软件(Software )两部分组成. 硬件: 从硬件基本结构上来讲,计算机是由运算器.控制器.存 ...

  3. 关于计算机网络传输介质 下列叙述正确的是,《计算机基础》习题1-7

    4. 算法的基本结构中包括( ) A.顺序结构 B.选择结构 C.循环结构 D.逻辑结构 5.关于Excel图表的数据源,下列叙述不正确的是( ) A. 可以修改图表的数据源 B. 图表的数据源必须是 ...

  4. B站收藏6.1w+!这门课拯救你薄弱的计算机基础

    作者 |  Rocky0429 来源 |  Python空间 大家好,我是 Rocky0429,一个对计算机基础一无所知的蒟蒻... 作为一个所谓的计算机科班出身的人来说,特别难为情的是自己的计算机基 ...

  5. 计算机基础-计算机硬件

    一 为何要学习计算机基础 python是编程语言,即python是语言 语言有英语.法语.葡萄牙语等,但凡是语言,都是用来沟通的介质. 程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机 ...

  6. B站收藏 12.5w+!GitHub 标星 6.6k+!这门神课拯救了我薄弱的计算机基础

    大家新年好呀,我是你们的 猫哥,我又回来啦 ~ 相信大家过年都过得开心吧 过得开心,那么就开始学习了哈 ~ 前言 作为一个所谓的计算机科班出身的人来说,特别难为情的是自己的计算机基础很差,相信这不是少 ...

  7. php计算机基础知识,计算机基础知识①

    计算机基础知识 1. 计算机基础知识 硬件 运算器 \ ---> 中央控制器,也就是CPU[Central Process Unit],它是最核心的硬件 控制器 / 存储器 Storage \- ...

  8. 计算机基础- -应用和硬件的关系

    计算机基础- -应用和硬件的关系 文章目录 计算机基础- -应用和硬件的关系 一.应用和硬件的关系 1.支持硬件输入输出的IN指令和OUT指令 2.测试输入和输出程序 3.外围设备的中断请求 4.用中 ...

  9. 计算机基础--认识CPU

    计算机基础- -认识CPU 文章目录 计算机基础- -认识CPU 一.CPU是什么 二.CPU实际做什么 三.CPU的内部结构 1.程序编译执行的过程 2.CPU是寄存器的集合体 计算机语言 汇编语言 ...

最新文章

  1. 链表问题15——将搜索二叉树转换成双向链表
  2. node开启子线程_真Node多线程
  3. OLTP与OLAP是什么?OLTP与OLAP的主要区别是什么?
  4. 年末裁员事件背后的启示录(1)
  5. 【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )
  6. Ubuntu cocos2d-x 3.13版本游戏开发学习系列3 Cocos2d-x的坐标系
  7. Servlet获取Web应用程序的初始化参数
  8. .NET 反编译调试神器:dnSpy了解一下
  9. 8.0.22Mysql的详细安装
  10. oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型
  11. Netty工作笔记0066---Netty核心模块内容梳理
  12. java io类型_Java NIO之Java中的IO分类
  13. 十五、移动端vw+rem等比缩放布局开发的详细步骤:包含px与rem的单位换算、二倍图以及如何使用UI给的设计稿等(开发工具HBuilder)
  14. 截止失真放大电路_聊一下三极管截止、放大和饱和3种工作状态
  15. bzoj5294: [Bjoi2018]二进制(线段树)
  16. stm32增量式编码器使用流程
  17. 古诗词鉴赏,断句的重要性
  18. 思科模拟器(Cisco Packet Tracer7.2.1)安装过程
  19. WiFi共享精灵文件传输新功能:金币话费领不停
  20. 2018年高德地图POI全国数据下载

热门文章

  1. vue.js2.0 新手开发_VueJs2.0建议学习路线
  2. layui table 单元格适应宽高
  3. PHP中的des加密类
  4. 软件测试和系统试验,实验四 软件系统性测试
  5. idea创建文件自定义注释
  6. python守护多线程_Python守护进程(多线程开发)入门实例
  7. 黑苹果挂载不了分区_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!...
  8. qq第三方登录注册php,QQ第三方登录PHP
  9. php输出查询mysql中文乱码_解决php mysql查询插入中文乱码问题
  10. python 简单网页_Python爬虫 (一):爬取一个简单的静态网页