深入理解计算机系统第6章笔记

on under auxilary
1 minute read

存储器层次结构

1.高速缓存介于cpu和主存(内存)之间,它们对于应用程序性能的影响最大

2.在简单模型中,存储器系统是一个线性的字节数组,而cpu能够在一个常数时间内访问每个存储器位置,虽然迄今为止这都是一个 有效的模型,但是它没有反映现代系统实际工作的方式

3.cpu是中央处理器(central processing unit),主要由运算器,控制器,寄存器三部分组成

4.sram(static random-access memory):静态随机访问存储器主要用于作高速缓存存储器;dram(dynamic random-access memory):动态随机访问存储器主要用于作主存(内存);rom(read-only memory):只读存储器;sram和dram断电后内容消失

5.总线分为:系统总线,存储器总线,I/O总线.虽然I/O总线比系统总线和存储器总线慢,但是它可以容纳种类繁多的第三方I/O设备

6.dma(direct memory access):直接存储器访问.在磁盘控制器收到来自cpu的读命令后,它将逻辑块号翻译成一个扇区地址,读该 扇区的内容,然后将这些内容直接传送到主存,不需要cpu的干涉.设备可自己执行读或写总线事务,这个过程称为dma(发生在将硬盘 中的数据读到内存中,这个命令是cpu发出的)

7.局部性原理:一个编写良好的程序倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身,这是一个持久的概 念,对硬件和软件系统的设计和性能都有着极大的影响.局部性有两种不同的形式:时间局部性和空间局部性.在一个具有良好时间 局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用;在一个具有良好空间局部性的程序中,如果一个存 储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置

8.局部性小结

a)重复引用同一个变量的程序有良好的时间局部性
b)对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
c)对于取指令来说,循环有好的时间和空间局部性,循环体越小,循环迭代次数越多,局部性越好
d)二维C数组在存储器中是按照行顺序来存放的,对a[i][j]表示每个元素中:for(i=0;j<n;i++)->for(j=0;j<n;j++)的空间局部性 比for(j=0;j<n;j++)->for(i=0;i<n;i++)

9.缓存命中:当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,那么 这就是缓存命中

10.存储器层次结构的本质是,每一层存储设备都是较低一层的缓存.基于缓存的存储器层次结构行之有效,是因为较慢的存储设备 比较快的存储设备更便宜,还因为程序往往展示局部性:
a)利用时间局部性:由于时间局部性,同一数据对象可能会被多次使用.一旦一个数据对象在第一次不命中时被拷贝到缓存中,我们 就会期望后面对该目标有一系列的访问命中
b)利用空间局部性:块通常包含有多个数据对象,由于空间局部性,我们会期望后面对该块中其他对象的访问能够补偿不命中的拷贝 该块的花费

11.高速缓存读写过程

a)读:首先,在高速缓存中查找所需字w的拷贝.如果命中,立即返回字w给cpu,如果不命中,从存储器层次结构中较低层中取出包含字 w的块,将这个块存储到某个高速缓存行中(可能会驱逐一个有效的行),然后返回字w

b)写:写的情况复杂一些,假设要写一个已经缓存了的字w,有2种方法:一种是直写,就是立即将w的高速缓存块写回到紧接着的低一 层中,虽然简单,但是直写的缺点是每次写都会引起总线流量.另一种方法称为写回,尽可能地推迟存储器更新,只有当替换算法要驱 逐更新过的块时,才把它写到紧接着的低一层中.

12.确保代码高速缓存友好的基本方法

a)让最常见的情况运行得快,也即要把注意力集中在核心函数中的循环上而忽略其他部分

b)在每个循环内部缓存不命中数量最小,也即保证有好的时间局部性(对局部变量的反复引用)和空间局部性(步长为1的引用模式)

13.关于存储器山

a)一个程序从存储系统中读数据的速率称为读吞吐量(或读带宽)
b)读带宽的时间和空间局部性的二维函数称为存储器山
c)即使是当程序的时间局部性很差时,空间局部性仍然能补救,并且是非常重要的 d)存储器系统的性能不是一个数字就能描述的,相反,它是一座时间和空间局部性的山,这座山的上升调试差别可以超过一个数量级
e)要使程序运行在存储器的山峰,就是要利用时间局部性,使得频繁使用的字从L1(最快的高速缓存)中取出,还要利用空间局部性, 使得尽可能多的字从一个L1高速缓存行中访问到

csapp
home
github
archive
category