缓存中的命中率 - 读取长字节序列

时间:2016-08-11 21:38:15

标签: caching cpu-architecture cpu-cache

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

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

但是,我不确定我是否正确。你觉得怎么样?

1 个答案:

答案 0 :(得分:0)

是的,看起来适合简单的硬件(没有预取的非流水线)。例如64个缓存行有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中的其他链接。