CSAPP阅读笔记-第六章

CSAPP 第六章 存储器层次结构
1. 存储技术
2. 局部性
3. 存储器层次结构
4. 高速缓存存储器
5. 编写高速缓存友好的代码
6. 高速缓存对程序性能的影响
7. 对程序局部性的利用

读前感:
我的理解是对于CPU来说存取速度由快到慢是

寄存器 > 高速缓存(SRAM) > 主存(DRAM) > 硬盘

当然造价和容量排序是反过来的

硬盘 > 主存(DRAM) > 高速缓存(SRAM) > 寄存器

局部性我理解应该是就是把最近用到的数据放到存取速度更快的设备上,这样很有可能下次还会用到这个数据,能彻底理解并充分利用局部性原理的程序会性能更快,当然我觉得这比较难,尤其是新的PC上能否有效要实际测试过才知道。

读后感:

  • 1.存储技术

    DRAM的是一个矩阵,其中每个最小单位cell都用i,j坐标来确定,CPU要访问DRAM会传i再传j。一块DRAM并不是真的全部容量都在一块上,有不同DRAM类型,每种都有不同的设计。CPU和DRAM之间通过总线(bus)来通信,通过IO总线和鼠标键盘磁盘等外部慢速设备通信。

  • 2.局部性

    分为空间局部性和时间局部性,简单理解就是定义了局部变量就立即使用它比先定义,然后中间插入一些别的代码再用会效率高一点,然后数组按照先行再列的方式访问效率比先列再行高,整体思想就是一个缓存的概念。

  • 3.存储器层次结构

    下图简洁明了: 存储器层次结构

  • 4.高速缓存存储器

    简单介绍了SRAM的实现,命中和不命中的各种情况,SRAM内部分组策略等,SRAM也不是越大越好。

  • 5.6.7三章讨论的关于利用局部性原理来提高程序性能,我觉得理论上是对的,但是实际上这点效率的提升肯定不是放在第一位考虑的,程序的稳定健壮和可维护,代码易读必然是放在第一位的,本着木桶原理,这点性能提升可能根本就不是性能的瓶颈,永远不要去猜测性能的瓶颈到底在哪里,而是应该用性能测试工具去发现寻找,总之优化肯定是后期的事情了。而且这些所谓的方法在今天是否还能真的提高程序性能也有待测试,需要在生产环境测过才能确定。主要是理解这种缓存的思想吧。