Files
2026-05-16 17:16:51 +08:00

159 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第二章 缓存优化 - 各老师章节总结
## 曲冠南老师
### 授课主线概述
曲冠南老师的授课以"Cache性能分析与改进"为核心主线首先回顾存储体系基础知识奠定基本概念框架进而深入分析Cache性能的两个关键指标——平均访存时间和程序执行时间通过公式推导与实例计算帮助学生理解Cache对CPU性能的双重影响。随后系统性地介绍17种Cache优化技术分别从降低不命中率、减少不命中开销、减少命中时间三个维度展开形成完整的知识体系。
### 知识点展开
**1. 存储体系基础与Cache性能分析**
曲老师首先明确平均访存时间的基本公式平均访存时间命中时间不命中率×不命中开销。这一公式是整个Cache优化理论的基础。在此基础上进一步推导出程序执行时间公式CPU时间CPU执行周期数+存储器停顿周期数×时钟周期时间其中存储器停顿时钟周期数访存次数×不命中率×不命中开销。通过Alpha AXP机器的实例详细计算了Cache命中与不命中情况下的CPI变化揭示了一个重要结论Cache对于低CPI、高时钟频率的CPU来说更加重要——因为固定周期数的Cache不命中开销在高时钟频率CPU中实际周期数更大。
在直接映像Cache与两路组相联Cache的对比分析中曲老师引导同学关注一个容易被忽略的细节虽然组相联能降低不命中率但由于多路选择器的存在会使CPU时钟周期增加本题中增加10%),因此需要综合评估,不能仅看单一指标。
**2. 三种类型的不命中3C**
曲老师详细讲解了三种不命中的产生原因及其特性:
- 强制性不命中冷启动不命中首次访问不命中不受Cache容量和相联度影响
- 容量不命中程序所需块不能全部调入Cache受容量影响但不受相联度影响
- 冲突不命中碰撞不命中只在组相联或直接映像Cache中发生相联度越高冲突不命中越少
这一分类为后续针对性优化提供了理论依据。
**3. 降低不命中率的方法8种**
针对三种不命中的直接方法:
- 方法一:增加块大小——可降低强制性不命中,但会增加冲突不命中和不命中开销
- 方法二增加Cache容量——最直接方法但增加成本和命中时间
- 方法三提高相联度——以增加命中时间为代价相联度超过8意义不大2:1经验规则表明N容量的直接映像与N/2容量的两路组相联不命中率相当
其他方法:
- 方法四伪相联Cache——逻辑上把直接映像Cache平分为两区先按直接映像处理若不命中再到另一区查找兼得命中时间小和不命中率低的优点
- 方法五:硬件预取——指令和数据都可预取,需利用存储器空闲带宽,不能影响正常不命中处理
- 方法六编译器预取——在编译时加入预取指令以重叠执行给出了完整的数组访问失效分析案例详细计算了预取前后的失效次数变化从251次降至19次
- 方法七:编译器优化——无需改动硬件,通过软件优化(程序代码和数据重组)降低不命中率,包括数组合并、内外循环交换、循环融合、分块四种技术
- 方法八牺牲Cache——设置全相联的小Cache存放被替换块4项Victim Cache能使4KB直接映像Cache冲突不命中减少20%90%
**4. 减少不命中开销的方法5种**
- 方法一两级Cache——L1小而快L2容量大给出了完整的平均访存时间公式和每条指令平均停顿时间公式区分局部不命中率与全局不命中率全局不命中率是更有意义的指标
- 方法二:让读不命中优先于写——解决写缓冲器导致的问题,常用方案是检查写缓冲器内容
- 方法三:写缓冲合并——提高写缓冲器空间利用率,减少等待时间
- 方法四请求字处理技术——尽早重启动或请求字优先减少CPU等待时间
- 方法五非阻塞Cache技术——允许"不命中下命中",可重叠多次不命中;模拟研究表明对整数程序"一次不命中下命中"就几乎可获得所有好处
**5. 减少命中时间的方法4种**
- 方法一小容量、结构简单的Cache——硬件越简单速度越快标识检测和数据传送可同时进行
- 方法二虚拟Cache——用虚拟地址访问省去地址转换时间清空问题和同义别名问题是挑战虚拟索引物理标识可兼得两者好处但受限于Cache容量≤页大小×相联度
- 方法三Cache访问流水化——Pentium系列从1周期发展到4周期
- 方法四踪迹Cache——存放动态指令序列能提高指令Cache空间利用率但地址映像机制复杂
---
## 李宏图老师
### 授课主线概述
李宏图老师的授课同样围绕Cache性能分析与改进展开内容框架与曲冠南老师基本一致但在部分表述和细节上有所补充和强调。李老师更注重基本概念的清晰界定如不命中率与命中率的关系、局部不命中率与全局不命中率的区分并在例题讲解中提供了更详细的中间步骤便于学生理解计算过程。
### 知识点展开
**1. 基本概念与公式**
李老师首先明确命中率和不命中率的定义不命中率失效率1-H命中率N1为访问M1的次数N2为访问M2的次数。对于CPU访存时间的分析当命中时访问时间为T1命中时间当不命中时访问时间为T1+TM其中TMT2+TB为不命中开销。
平均访存时间公式TAHT11HT1TMT11HTMT1FTM
CPU程序执行时间公式强调存储器停顿时钟周期数"读"的次数×读不命中率×读不命中开销+"写"的次数×写不命中率×写不命中开销。
**2. Cache对CPU性能的双重影响**
李老师同样通过Alpha AXP实例说明CPIexecution越低固定周期数的Cache不命中开销相对影响越大时钟频率较高的CPU即使存储层次相同不命中开销的周期数也较大。因此Cache对于低CPI、高时钟频率的CPU更加重要。
**3. 三种不命中类型**
李老师对3C的讲解与曲老师一致强制性不命中冷启动/首次访问)、容量不命中(程序所需块不能全部调入)、冲突不命中(碰撞/干扰)。强调:相联度越高冲突不命中越少;强制性不命中和容量不命中不受相联度影响;容量不命中随容量增加而减少。
**4. 降低不命中率方法**
李老师对8种方法的概括与曲老师一致对部分方法提供了更详细的解释
- 编译器优化中的循环融合:将访问同样数组的独立循环融合为单个循环,使数据在被替换前能得到反复使用
- 牺牲Cache能减少冲突不命中特别是对小容量直接映像数据Cache效果明显
**5. 两级Cache系统**
李老师给出了更系统的两级Cache平均访存时间公式平均访存时间命中时间L1不命中率L1×命中时间L2不命中率L2×不命中开销L2
重点强调了全局不命中率的意义它指出了CPU访存中最终到达存储器的比例是评价第二级Cache的好指标。
在例题中李老师更详细地展示了两种相联度方案下L1不命中开销的计算过程并指出取整对结果的影响。
**6. 写缓冲合并**
李老师详细描述了写缓冲合并的工作过程:当写缓冲器已有待写入数据时,将新写入地址与已有地址比较,如有匹配且位置空闲则合并数据。这一机制提高了空间利用率,减少了等待时间。
**7. 虚拟Cache**
李老师补充了三种情况下不命中率的比较数据PIDs与单进程相比增加0.3%0.6%PIDs与清空相比减少0.6%4.3%。还提到了同义和别名问题的解决方法:反别名法和页着色。
---
## 谭婧炜佳老师
### 授课主线概述
谭婧炜佳老师的授课在内容上与前两位老师基本一致但有一个显著特点她在课程一开始就补充了存储体系的基础知识包括多级存储层次结构的原理和Cache的三种映像规则直接映像、全相联、组相联这为后续内容提供了更完整的知识铺垫。谭老师同样从平均访存时间和程序执行时间出发系统讲解Cache优化技术。
### 知识点展开
**1. 存储系统基本矛盾与多级存储层次**
谭老师开篇即指出存储系统设计的核心矛盾:容量大、速度快、价格低三者相互制约——速度越快每位价格越高,容量越大每位价格越低,容量越大速度越慢。解决方法是采用多级存储层次结构,利用程序访问的局部性原理:时间局部性(即将使用的信息就是现在使用的信息)和空间局部性(即将使用的信息与现在使用的信息在空间上相邻)。
多级存储层次结构的目标从CPU来看速度接近M1容量和每位价格接近Mn。存储器越靠近CPU访问频度越高最好大多数访问都在M1完成。
**2. Cache三种映像规则**
谭老师详细讲解了Cache的三种映像方式
- 全相联映像主存任一块可放置到Cache任意位置空间利用率最高冲突概率最低实现最复杂
- 直接映像主存每块只能放到Cache唯一位置ji mod M空间利用率最低冲突概率最高实现最简单
- 组相联映像:折中方案,主存每块放到唯一组的任意位置
**3. 平均访存时间**
谭老师给出了完整的平均访存时间公式TAHT11HT1TMT11HTMT1FTM并明确定义了不命中开销(miss penalty)TM为从向M2发出访问请求到把整个数据块调入M1中所需的时间。
**4. 三种不命中类型**
谭老师对3C的讲解中特别指出容量不命中即使采用全相联映像+最优替换策略仍会失效。这一补充说明帮助学生更深入理解容量不命中的本质。
**5. 降低不命中率方法**
谭老师完整覆盖了8种方法其中对编译器优化的四种技术数组合并、内外循环交换、循环融合、分块都给出了具体的代码示例。特别是分块技术不仅给出了修改前后的代码还分析了最坏情况下不命中次数从2N³N²降至2N³/BN²的变化。
**6. 两级Cache系统**
谭老师给出了两级Cache的完整性能分析公式并强调了多级包容性的概念第一级Cache中的数据是否总是同时存在于第二级Cache中。
**7. 虚拟Cache的补充**
谭老师补充了同义synonym或别名alias问题的说明同一个数据在虚拟Cache中存在两个副本操作系统或用户对同一物理地址采用两种以上不同形式虚拟地址访问不允许存在否则会发生错误。
**8. 踪迹Cache**
谭老师指出踪迹Cache与普通Cache的区别普通Cache存放静态指令序列踪迹Cache存放动态指令序列。优缺点包括地址映像机制复杂、相同指令序列可能因条件分支不同选择而重复存放、能够提高指令Cache空间利用率。
---
## 三位老师内容对比总结
三位老师的授课内容基本一致,都围绕"Cache性能分析与改进"这一核心主题展开,主要差异体现在:
1. **谭婧炜佳老师**额外补充了存储体系基础知识多级存储层次结构原理、三种Cache映像规则更适合作为课程导入
2. **曲冠南老师**在伪相联Cache的例题分析中给出了更完整的公式推导
3. **李宏图老师**在例题中展示了更详细的中间计算步骤,便于学生理解
4. 三位老师都给出了几乎相同的17种Cache优化技术列表和相似的总结表格