-
第6章——存储器层次结构
存储技术
- 随机访问存储器分为静态RAM(SRAM)和动态RAM(DRAM),静态RAM比动态RAM更快
- SRAM具有双稳态特性,只要有电,就会永远保持它的值,对干扰不敏感,当干扰消除时,电路就会恢复到稳定值
- DRAM对干扰分厂敏感,当电容的电压被扰乱之后,它就永远不会恢复了
- 将DRAM组织成二维阵列而不是线性数组的原因是降低芯片上地址引脚的数量
- 非易失性存储器即使是在关电后,仍然保存着它们的信息
- 存储在ROM设备中的程序通常被称为固件
- 数据流通过称为总线的共享电子电路在处理器和DRAM主存之间来来回回
- 磁盘用读/写头来读写存储在磁性表面的位
- 磁盘对扇区的访问时间有三个主要的部分:寻道时间、旋转时间、传送时间
- 固态硬盘是一种基于闪存的存储技术
局部性
- 局部性是指一个计算机程序倾向于引用邻近于其他最近引用过的数据项的数据项
- 在一个具有良好时间局部性的程序中,被引用过一次的内存位置很可能在不远的将来再被多次引用
- 在一个具有良好空间局部性的程序中,被引用过一次的内存位置的附近位置很可能在不远的将来被引用
存储器层次结构
- 中心思想:对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存
- 缓存命中/不命中:当程序需要第k+1层的某个数据对象d时,如果d刚好缓存在第k层中,称为缓存命中,否则为缓存不命中
- 覆盖一个现存的块的过程称为替换或驱逐这个块,替换策略决定该替换哪个块,随机替换策略会随机选择一个牺牲块,LRU会选择那个最后被访问的时间距现在最远的块
- 如果第k层的缓存是空的,称为冷缓存
- 缓存不命中的种类:强制性不命中或冷不命中:空缓存;冲突不命中:执行放置策略导致冲突;容量不命中:工作集的大小超过缓存的大小
高速缓存存储器
- 高速缓存的结构可以用元组
(
S
,
E
,
B
,
m
)
(S,E,B,m)
(S,E,B,m)来描述,高速缓存的大小
C
=
S
×
E
×
B
C=S\times E\times B
C=S×E×B
- 每个组只有一行的高速缓存称为直接映射高速缓存
- 高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步:组选择、行匹配、字抽取
- 为什么用中间的位来做索引:如果高位用作索引,那么一些连续的内存块就会映射到相同的高速缓存块,那么在任何时候高速缓存都只保存着一个块大小的数组内容;如果以中间位作为索引,相邻的块总是映射到不同的高速缓存行,保证缓存中的所有行都能被有效的利用,充分利用空间局部性
- 组相连高速缓存中每个组都保存有多于一个的高速缓存行
- 替换策略:LFU最不常使用 LRU最近最少使用
- 全相连高速缓存是由一个包含所有高速缓存行的组组成的
- 直写:立即将已经缓存来的字w的高速缓存块写回到紧接着的低一层中。直写每次都会引起总线流量
- 写回:尽可能的推迟更新,只有当替换算法要驱逐这个更新过的块时,才把它写到紧接着的低一层中。写回能显著减少总线流量,但是每个高速缓存行必须额外维护一个修改位,表明是否被修改过
- 只保存指令的高速缓存称为i-cache,只保存程序数据的高速缓存称为d-cache
- 衡量高速缓存性能的指标:不命中率、命中率、命中时间、不命中处罚
- 较大的高速缓存可能会增加命中时间,所以L1高速缓存比L2高速缓存小
-
相关阅读:
模型部署入门教程(六):实现 PyTorch-ONNX 精度对齐工具
12 | 腾讯云代码分析快速部署
C语言-入门-static(十五)
【python海洋专题二十四】南海年平均海流图
C++缺省参数
纸牌游戏洗牌发牌排序算法设计
Python 二进制数据处理与转换
从 MySQL 迁移到 TiDB:使用 SQL-Replay 工具进行真实线上流量回放测试 SOP
自动控制原理5.5---闭环系统的频域性能指标
通付盾Web3专题 | 智能账户:数字时代基础单元
-
原文地址:https://blog.csdn.net/qq_44867112/article/details/127704154