在计算未命中率时是否考虑了强制性失误?

时间:2014-02-20 19:34:51

标签: caching memory computer-architecture

假设我有2MB缓存和3MB工作数据集。因此,当缓存很冷时,它将经历3MB的强制性未命中。然而,在热身之后,只会发生冲突和能力失误。所以,现在的失误率是33.33%。谁能告诉我这是否正确?如果不是,我如何计算未完成的未命中率。

感谢。

3 个答案:

答案 0 :(得分:2)

整体未命中率仍然取决于程序实际对数据执行的操作以及计算机如何将工作集保留在缓存中。因此,访问模式,关联性,替换算法除了容量之外仍然很重要。 可能确实在高速缓存预热之后的1/3内存引用是未命中的,但它不仅取决于数据和/或指令缓存容量。

答案 1 :(得分:1)

你的33%的假设是错误的,因为杰森解释(或者更缺乏更多的信息),完全有可能通过顺序遍历3M获得100%的未命中率,从而在重新使用之前总是颠倒你的数据。

但是为了回答一般问题 - 通过 warm 缓存测量未命中率通常更有趣,因为它代表了处理器在大多数时间内可能处于稳定状态(即 - 在上下文切换,从断电唤醒,刷新等之后不会立即执行的任何时间。)。大多数缓存/ CPU模拟器为此提供了一个预热阶段,并且常见的基准测试通常也会在几次预热迭代后测量性能。

当然,在其他情况下,测量冷行为可能是有趣的,例如,如果你对上述阶段感兴趣的话。或者,如果您正在回答考试问题......

答案 2 :(得分:0)

Miss rate定义为每条指令的未命中数。

假设工作集的第一个数据位于地址0x00,并且缓存每行可以容纳4个字。因此,当您在0x4处访问数据时,您将错过,但数据将被提取到缓存中,用于地址0x00,0x04,0x8,0x0C。现在如果您的下一次访问是0x4,它将会被命中,因为它已经在缓存中。因此,如果您以4个字节的间隔顺序访问数据,则每4次触发一次,因此您的未命中率为25%。

现在,缓存可以容纳这4个字线中的多个(取决于缓存的设计 - 关联性,行数,字/字节访问),这些将再次决定您的容量和冲突未命中。

希望能让您深入了解缓存的工作原理!