(a) 给定一个具有两级高速缓存(L1 和 L2)的内存系统。以下是规格:
- L1缓存命中时间:2个时钟周期
- 一级缓存命中率:92%
- L2 缓存的未命中惩罚(L2 的命中时间):8 个时钟周期
- 二级缓存命中率:86%
- 主存丢失惩罚:37 个时钟周期
- 暂时假设主存命中率为100%。
给定一个包含 37% 数据传输指令(加载/存储)的 2000 条指令程序,计算此场景的 CPI(每条指令的时钟周期)。
For this part, I calculated it like this (am I doing this right?):
(m1: miss rate of L1, m2: miss rate of L2)
AMAT = HitTime_L1 + m1*(HitTime_L2 + m2*MissPenalty_L2)
CPI(actual) = CPI(ideal) + (AMAT - CPI(ideal))*AverageMemoryAccess
(b) 现在让我们在二级缓存和主存之间添加另一级缓存,即三级缓存。考虑以下:
- L3 缓存的未命中惩罚(L3 缓存的命中时间):13 个时钟周期
- 三级缓存命中率:81%
- 主存丢失惩罚:37 个时钟周期
- 其他规格保留为 (a) 部分
对于同样的2000条指令的程序(其中有37%的数据传输指令),计算CPI。
(m1: miss rate of L1, m2: miss rate of L2, m3: miss rate of L3)
AMAT = HitTime_L1
+ m1*(HitTime_L2 + m2*MissPenalty_L2)
+ m2*(HitTime_L3 + m3*MissPenalty_L3)
这个公式正确吗?在这个公式中我应该在哪里将未命中惩罚添加到主内存中?
也许应该加上 L3 的失误惩罚,但我不确定。
(a) 如果您注意到 MissPenalty_L2 参数就是您所谓的主内存丢失惩罚,则 AMAT 计算是正确的。
CPI 有点困难。
首先,我们假设CPU不是流水线的(顺序处理器)。
每条指令有 1.37 次内存访问(一次访问用于获取指令,0.37 次访问是由于数据传输指令)。理想情况是所有内存访问都命中 L1 缓存。
所以,知道:
CPI(ideal) = CPI(computation) + CPI(mem) =
CPI(computation) + Memory_Accesses_per_Instruction*HitTime_L1 =
CPI(computation) + 1.37*HitTime_L1
对于实内存,平均内存访问时间为 AMAT,因此:
CPI(actual) = CPI(computation) + Memory_Accesses_per_Instruction*AMAT =
CPI(ideal) + Memory_Accesses_per_Instruction*(AMAT - HitTime_L1) =
CPI(ideal) + 1.37*(AMAT - HitTime_L1)
(b) 您的 AMAT 计算错误。在 L2 未命中之后,接下来会进行 L3 访问,该访问可能命中,也可能未命中。尝试自己完成练习。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)