【发布时间】:2018-07-22 02:15:55
【问题描述】:
我很难弄清楚如何知道什么时候会成功或失败。这是我正在做的问题(我有答案,但我不知道他们是如何得到答案的):
2 路集关联缓存由四个集组成。主存包含 2K 块,每块 8 个字。
显示允许我们将地址从主存映射到缓存的主存地址格式。请务必包括字段及其大小。 (我明白这一点,并且已经做了工作并得到了答案)
计算从主内存中位置 8 到 51 循环 3 次的程序的命中率。您可以将命中率保留为分数。答案如下:
循环的第一次迭代:地址 8 未命中,然后是整个 块被带入第 1 组。因此,9-15 被击中。 16是一个小姐, 进入第 2 组、第 17-23 组的整个格挡都是安打。 24 是一个错过,整个 被带入第 3 盘的拦网,25-31 是安打。 32 是未命中,整块 带入第 0 盘,然后 33-39 被击中。 40 是错过,整个街区 带入第 1 组(注意我们不必用 地址 8,因为这是 2 路组关联的),41-47 是命中。 48 是一个 失误,整个拦网带入第二盘,49-51被安打。
对于循环的第一次迭代,我们有 6 次未命中,并且 5*7 + 3 命中,或 38 次命中。在剩余的迭代中,我们有 5*8+4 个命中,或者 每个击打 44 次,再击打 88 次。
因此,我们有 6 次未命中和 126 次命中,命中率为 126/132, 或 95.45%。
我仍然无法弄清楚如何确定哪些内存地址/块将被命中或未命中。
【问题讨论】:
-
属于缓存行的内存地址为命中,否则为未命中(内存地址不属于缓存行)。