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

235 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
# 第二章 缓存优化 - 章节习题与答案详解
## 说明
经扫描三位老师曲冠南、李宏图、谭婧炜佳的全部PPT幻灯片内容本章未发现独立的练习题、思考题或课后作业板块。三位老师在授课过程中均以"例题"形式讲解知识点,这些例题融合在教学流程中,具有习题功能。以下整理本章所有典型例题,供复习参考。
---
## 例题一Alpha AXP机器Cache性能分析
### 原文摘抄
**曲冠南老师 Slide 5、李宏图老师 Slide 7、谭婧炜佳老师 Slide 18同一例题**
> 例 用一个和Alpha AXP类似的机器作为第一个例子。假设Cache不命中开销为50个时钟周期当不考虑存储器停顿时所有指令的执行时间都是2.0个时钟周期访问Cache不命中率为2%平均每条指令访存1.33次。试分析Cache对性能的影响。
>
> 解 CPU时间有cacheIC ×CPIexecution每条指令的平均访存次数×不命中率×不命中开销× 时钟周期时间
> IC ×2.01.33×2 %×50× 时钟周期时间
> IC × 3.33× 时钟周期时间
>
> 考虑Cache的不命中后性能为
>   CPU时间有cache IC×2.01.33×2 %×50×时钟周期时间
>   IC×3.33×时钟周期时间
>   实际CPI 3.33
>      3.33/2.0 = 1.67(倍)
>   CPU时间也增加为原来的1.67倍。
>   但若不采用Cache,则:
>      CPI2.050×1.3368.5
### 参考答案及详细解析
**考点:** Cache性能对CPU执行时间的影响分析涉及平均访存时间公式和CPU时间公式的理解与应用。
**原理:**
- 平均访存时间公式:平均访存时间=命中时间+不命中率×不命中开销
- CPU时间公式CPU时间IC×CPIexecution每条指令平均访存次数×不命中率×不命中开销×时钟周期时间
- CPIexecution2.0(不考虑存储器停顿)
**解题思路:**
1. 已知条件Cache不命中开销50周期CPIexecution2.0不命中率2%平均每条指令访存1.33次
2. 计算有Cache时的CPICPI有cache2.01.33×2%×502.01.333.33
3. 计算性能提升倍数3.33/2.01.67即CPU时间增为原来的1.67倍
4. 计算无Cache时的CPICPI无cache2.050×1.3368.5(仅受存储器访问影响)
**关键结论:** Cache使CPI从68.5降到3.33,性能提升效果显著。
---
## 例题二直接映像与两路组相联Cache性能对比
### 原文摘抄
**曲冠南老师 Slide 7-9、李宏图老师 Slide 9-11、谭婧炜佳老师 Slide 20-22同一例题**
> 例 考虑两种不同组织结构的Cache直接映像Cache和两路组相联Cache试问它们对CPU的性能有何影响先求平均访存时间然后再计算CPU性能。分析时请用以下假设
> (1)理想Cache命中率为100%情况下的CPI为2.0时钟周期为2ns平均每条指令访存1.3次。
> (2)两种Cache容量均为64KB块大小都是32字节。
> (3)在组相联Cache中由于多路选择器的存在而使CPU的时钟周期增加到原来的1.10倍。这是因为对Cache的访问总是处于关键路径上对CPU的时钟周期有直接的影响。
> (4) 这两种结构Cache的不命中开销都是70ns。在实际应用中应取整为整数个时钟周期
> (5) 命中时间为1个时钟周期64KB直接映像Cache的不命中率为1.4%相同容量的两路组相联Cache的不命中率为1.0%。
### 参考答案及详细解析
**考点:** 不同Cache组织结构对平均访存时间和CPU性能的影响分析需要同时考虑不命中率降低和时钟周期增加两个因素。
**原理:**
- 平均访存时间=命中时间+不命中率×不命中开销
- 组相联Cache的时钟周期需乘以增加因子
- CPU时间比较需综合考虑CPI和时钟周期
**解题思路:**
1. 计算两种结构的平均访存时间:
- 直接映像2.00.014×702.98ns
- 两路组相联2.0×1.100.010×702.90ns
2. 计算CPU时间
- 直接映像IC×(2.0×2(1.3×0.014×70))5.27×IC
- 两路组相联IC×(2.0×2×1.10(1.3×0.010×70))5.31×IC
**关键结论:** 虽然两路组相联Cache的不命中率更低1.0% vs 1.4%但由于时钟周期增加10%其平均性能反而略差于直接映像Cache。这说明优化不能只看单一指标需要综合评估。
---
## 例题三伪相联Cache速度比较
### 原文摘抄
**曲冠南老师 Slide 22-24、谭婧炜佳老师 Slide 36-38同一例题**
> 例 假设命中时间为1个周期按直接映象找到的位置处没有发现匹配而在另一个位置才找到数据伪命中需要2个额外的周期。问当Cache容量分别为2 KB和128 KB时直接映象、2路组相联和伪相联这三种组织结构中哪一种速度最快
### 参考答案及详细解析
**考点:** 伪相联Cache的平均访存时间计算包括伪命中率、命中时间的计算。
**原理:**
- 伪相联Cache的平均访存时间公式
- 命中时间伪相联命中时间1路伪命中率×2
- 伪命中率失效率1路失效率2路
- 失效率伪相联失效率2路
- 平均访存时间伪相联命中时间1路失效率1路失效率2路×2失效率2路×失效开销
**解题思路:**
1. 分别计算2KB和128KB两种容量下三种结构的平均访存时间
2. 对于2KB Cache
- 伪相联10.0980.076×20.076×504.844周期
- 直接映像5.90周期
- 两路组相联4.90周期
3. 对于128KB Cache
- 伪相联10.0100.007×20.007×501.356周期
- 直接映像1.50周期
- 两路组相联1.45周期
**关键结论:** 伪相联Cache在两种容量下都是速度最快的兼得了直接映像的快速命中和两路组相联的低失效率。
---
## 例题四:编译器控制预取分析
### 原文摘抄
**曲冠南老师 Slide 27-31、李宏图老师 Slide 26-30、谭婧炜佳老师 Slide 41-45同一例题**
> 假定:
> (1) 使用一个容量为8 KB、块大小为16 B的直接映象Cache它采用写回法并且按写分配
> (2) a、b分别为3×1003行100列和101×3的双精度浮点数组每个元素都是8B。当程序开始执行时这些数据都不在Cache内。
> 对于下面的程序:
> for i = 0 ; i < 3 ; i = i + 1
> for j = 0 ; j < 100 ; j = j + 1
> a [ i ][ j ] = b[ j ][ 0 ] * b[ j+1 ][ 0 ];
> 问:
> 1首先判断哪些访问可能会导致数据Cache失效
> 2其次加入预取指令以减少失效
> 3最后计算所执行的预取指令的条数以及通过预取避免的失效次数。
### 参考答案及详细解析
**考点:** 编译器控制预取的分析,包括判断失效类型、计算失效次数、设计预取策略。
**原理:**
- 分析程序访问模式,判断可能发生的失效类型(强制失效/容量失效/冲突失效)
- 预取通过提前将数据调入Cache来减少失效
- 预取指令应至少提前足够的循环次数进行
**解题思路:**
1. **分析失效类型:** a和b共302块少于Cache总块数因此不会发生容量失效直接映射且a和b连续存储不会发生冲突失效只能发生强制失效。
2. **分析命中和失效规律:** 数组a共150块每次访问均失效数组b在i=0时失效101次i=1和2时无失效总失效次数为251次。
3. **加入预取后:** 假设失效开销很大预取必须至少提前7次循环进行。通过在循环中加入prefetch指令总失效次数降至19次。
**关键结论:** 预取将失效次数从251次降至19次避免了232次失效。但需注意预取指令本身也有开销需保证开销不超过收益。
---
## 例题五两级Cache性能分析
### 原文摘抄
**曲冠南老师 Slide 45-46、李宏图老师 Slide 44-45、谭婧炜佳老师 Slide 60-62同一例题**
> 例 考虑某一两级Cache第一级Cache为L1第二级Cache为L2。
> 1假设在1000次访存中L1的不命中是40次L2的不命中是20次。求各种局部不命中率和全局不命中率。
> 2假设L2的命中时间是10个时钟周期L2的不命中开销是100时钟周期L1的命中时间是1个时钟周期平均每条指令访存1.5次,不考虑写操作的影响。问:平均访存时间是多少?每条指令的平均停顿时间是多少个时钟周期?
### 参考答案及详细解析
**考点:** 两级Cache系统的性能分析包括局部不命中率与全局不命中率的概念及平均访存时间计算。
**原理:**
- 局部不命中率该级Cache不命中次数/到达该级Cache的访问次数
- 全局不命中率该级Cache不命中次数/CPU发出的访存总次数
- 两级Cache平均访存时间命中时间L1不命中率L1×命中时间L2不命中率L2×不命中开销L2
- 每条指令平均停顿时间每条指令平均不命中次数L1×命中时间L2每条指令平均不命中次数L2×不命中开销L2
**解题思路:**
1. **计算不命中率:**
- L1不命中率全局和局部40/10004%
- L2局部不命中率20/4050%
- L2全局不命中率20/10002%
2. **计算平均访存时间:**
- 平均访存时间14%×1050%×10014%×603.4时钟周期
3. **计算每条指令平均停顿时间:**
- 每次访存平均停顿3.41.02.4时钟周期
- 每条指令平均停顿时间2.4×1.53.6时钟周期
**关键结论:** 全局不命中率比局部不命中率更有意义,它反映了最终到达存储器的访问比例。
---
## 例题六第二级Cache相联度选择
### 原文摘抄
**李宏图老师 Slide 48-49、谭婧炜佳老师 Slide 65-66同一例题**
> 例 给出有关第二级Cache的以下数据
> 1对于直接映像命中时间L2 10个时钟周期
> 2两路组相联使命中时间增加0.1个时钟周期即为10.1个时钟周期。
> 3对于直接映像局部不命中率L2 25%
> 4对于两路组相联局部不命中率L2 20%
> 5 不命中开销L2 50个时钟周期
> 试问第二级Cache的相联度对不命中开销的影响如何
### 参考答案及详细解析
**考点:** 第二级Cache相联度选择对不命中开销的影响分析。
**原理:**
- 不命中开销L1命中时间L2不命中率L2×不命中开销L2
- 相联度增加会同时影响命中时间和不命中率
**解题思路:**
1. 直接映像第二级Cache的L1不命中开销1025%×5022.5时钟周期
2. 两路组相联第二级Cache的L1不命中开销10.120%×5020.1时钟周期
3. 取整后再计算1020%×5020.0 或 1120%×5021.0时钟周期
**关键结论:** 对于第二级Cache两路组相联优于直接映像因为不命中率的降低25%→20%带来的收益超过了命中时间的轻微增加0.1周期)。
---
## 总结
本章共包含6道典型例题覆盖了以下核心考点
1. **Cache性能对CPU执行时间的影响**(例题一)
2. **不同Cache组织结构的综合性能评估**(例题二)
3. **伪相联Cache的性能优势分析**(例题三)
4. **编译器控制预取的原理与应用**(例题四)
5. **两级Cache系统的性能分析**(例题五)
6. **第二级Cache相联度的选择策略**(例题六)
这些例题均以"例题"形式出现在授课内容中,体现了理论知识与实际计算的结合,是复习备考的重要参考。