【问题标题】:hit ratio in cache - reading long sequence of bytes缓存中的命中率 - 读取长字节序列
【发布时间】:2016-12-18 19:02:37
【问题描述】:

假设一行缓存的大小为 2^nB。连续读取字节长的连续内存中预期的命中率是多少?

在我看来是 (2^n - 1) / 2^n。

但是,我不确定我是否正确。你怎么看?

【问题讨论】:

  • 你能问你的教授或同学这些琐碎的初学者问题吗?此外,这与 x86 无关,因为真正的 x86 硬件具有预取功能,因此请取消标记。

标签: caching cpu-architecture cpu-cache


【解决方案1】:

是的,看起来适合简单的硬件(非流水线,没有预取)。例如64B 高速缓存行 1 次未命中和 63 次命中。


在实际硬件上,即使是有序的单问题(非超标量)CPU,通常也支持miss under miss (multiple outstanding misses),因此您会看到未命中的情况,直到用完负载缓冲区。这也使内存访问流水线化,这在对不同缓存行的未命中可以同时进行时很有用,而不是等待每个缓存行的完整延迟。

真正的硬件也会有硬件预取。例如,查看英特尔的article about disabling HW prefetching 了解一些用例。

在大多数 CPU 上,硬件预取可能可以跟上一次一个字节的循环,因此如果预取良好,您可能几乎看不到任何 L1 缓存未命中。

请参阅 Ulrich Drepper 的 What Every Programmer Should Know About Memory 以及 标签 wiki 中的其他链接,了解有关真实硬件性能的更多信息。

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多