CMU CSAPP笔记 第六章
分类:
文章
•
2024-03-20 09:00:10
memory hierarchy(csapp-6.1,6.2,6.3)
- 机械硬盘的构造

- 总线
- 局部性原理(locality)
- 通过局部性原理可以设计高速缓存
- 时间局部性(Temporal Locality): 如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。
- 空间局部性(Spatial Locality): 在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址上是临近的
- 顺序局部性(Order Locality): 在典型程序中,除转移类指令外,大部分指令是顺序进行的。顺序执行和非顺序执行的比例大致是5:1。此外,对大型数组访问也是顺序的。指令的顺序执行、数组的连续存放等是产生顺序局部性的原因。
- 储存体系
cache memories(csapp-6.4)
- 高速缓存(cache)
- SRAM内存
- 如果一个系统的内存地址有m位,那么会形成M = 2^m个地址
- 高速缓存会被组织成S=2^s个set,每个set里有E个block,每个block大小为B
- 每个block中有一个位判断是否有效,t个位为标记位(是内存地址位的子集)
-
t = m - s - b
- 组索引
- 一般采用地址的中部,因为对于连续的地址(例如数组),地址的开头大多相同,高速缓存会频繁冲突不命中
- 组索引的位数由cache中有多少组决定
- 块偏移
- 当一个块没有命中时,不仅会读取请求内存地址的数据,还会同时读取旁边的数据,直到填满cache的块,因此而实现了空间局部性
- 快的大小一般大于多个地址中数据的大小,从而可以利用空间局部性
- 但是块太大会导致给定大小的cache行数减少,同时对于不命中的处罚会增加
- 储存器山
编写cache友好的代码(CSAPP-6.6,6.7)
- 通过减少cache miss来提高矩阵相乘速度



- 解决方法
- 分组