11
In order to find avg memory access time we have the formula :

Tavg = h*Tc +(1-h)*M

where  h     = hit rate
       (1-h) = miss rate
       Tc    = time to access information from cache
       M     = miss penalty  (time to access main memory)

我最近一直在解决这个概念上的很多问题。有时我发现有这种令人不安的不一致:

Case 1: M = Tm + Tc
Case 2: M = Tm

意思是,解决方案表明“M”的值是针对某些问题 X 计算的,如上面的“案例 1”,而在其他一些问题 Y 中,计算的值与上面的“案例 2”相同。我尽力分析这些问题,以找出使计算不同的因素是什么。没有帮助。我遇到过 X 和 Y 完全相同的情况,只是值不同,但在案例 1 中对 X 进行计算,在案例 2 中对 Y 进行计算。

我不知道的任何其他原因导致计算不同?先感谢您。

4

3 回答 3

7

不同之处在于计算未命中的延迟时间。如果问题表明时间是未命中惩罚,则应该意味着该时间是在缓存命中时间之外的;所以总未命中延迟是缓存命中的延迟加上惩罚。(显然,您的公式和变量不采用这种方法,将 M(实际上是未命中的总访问时间)标记为未命中惩罚。)

可悲的是,如果一个问题是“内存访问延迟”或“L2 访问延迟”,那么是否访问延迟是指(即,包括 L1 命中的时间)或 L1 未命中所需的额外时间。前者有一些概念上的优势(例如,它可以隐藏细节,例如在命中数据返回之前开始的 L2 访问——例如,通过使用早期未命中检测或未命中预测,甚至对 L1 和 L2 进行并行标签查找)。后者可以更简单地解释 L2 大小或关联性的延迟效应(例如,如果将大小加倍将 L2-only 访问延迟增加 50%,则可能更容易理解 L2-only 延迟通过将大小加倍从 8 个周期增加到 12 个周期和通过四倍大小增加到 18 个周期,而不是看到总延迟从 10 个周期 [Tc = 2] 增加到 14 个周期和 20 个周期。)

(此外,使用未命中惩罚数可以稍微简化访问时间公式——Tavg = Tc + (1-h)Tm——因为总是花费 Tc。)

执行延迟也会出现类似的问题。对于标量流水线,需要一个周期才能执行的指令通常被认为具有零延迟,因为在执行后续相关指令时没有延迟。但是,在考虑超标量实现时,这种延迟的使用可能会令人困惑。

于 2014-02-14T16:51:24.917 回答
2

平均内存访问时间 = % 指令 * (命中时间 + 指令未命中率 * 未命中惩罚) + % 数据 * (命中时间 + 数据未命中率 * 未命中惩罚)

于 2015-04-30T02:53:57.347 回答
1

评论中提出了一个相关问题:

评论:为什么公式中没有命中率?– enitihas 5 月 13 日 18:09

公式中没有命中率的原因是每次访问无论命中还是未命中一级缓存都必须访问一级缓存,因此具有命中时间,即一级缓存的访问延迟。

所以无论访问是否命中/未命中,都需要在公式中包含命中时间(一级缓存的访问延迟)来计算平均访问时间。

于 2016-09-24T06:55:45.437 回答