缓存线大小背后的理论和测量是什么?

Leo*_*aar 6 cpu cpu-architecture cpu-cache

高速缓存行通常为64 字节,也存在其他大小。

我非常简单的问题是:这个数字背后是否有任何理论,或者它只是背后的工程师无疑所做的大量测试和测量的结果?

不管怎样,我想知道这些是什么(理论,如果有的话,以及决定背后的各种测试)。

Gab*_*ern 5

一般来说,微架构参数往往通过性能建模而不是某种理论模型来调整。也就是说,不存在像“大O”这样的东西可以用来表征算法的性能。相反,基准测试是使用性能模拟器运行的,这用于指导最佳参数的选择。

话虽如此,缓存行大小在已建立的架构中相当稳定有几个原因:

  • 大小是 2 的幂:为了简化寻址,行大小应该是 2 的幂,因此这限制了缓存行大小的可能选择数量。

  • 软件根据缓存参数进行优化:许多微架构参数对程序员完全隐藏。但缓存行大小是可见的,并且可能对某些应用程序的性能产生重大影响。一旦程序员针对 64 字节缓存行大小优化了代码,处理器架构师就会有动力在未来的处理器中保持相同的缓存行大小,即使底层技术发生了变化,使不同大小的缓存行更容易使用。在硬件中实现。

  • 高速缓存一致性与高速缓存行相互作用:高速缓存一致性协议的验证极其困难,并且高速缓存一致性是处理器中许多错误的根源。一致性是在缓存行级别进行跟踪的,因此更改缓存行将需要重新执行一致性协议的所有验证步骤。因此,改变这个参数需要有强烈的动机。

  • 更改缓存行大小可能会引入错误共享:这是基于缓存参数优化软件的特殊情况,但我认为值得一提。并行程序很难以真正提供性能优势的方式编写。由于数据是在缓存行粒度上进行跟踪的,因此避免错误共享非常重要。如果缓存行大小从一代处理器更改为另一代处理器,则可能会导致新处理器中出现旧处理器中不存在的错误共享。

尽管 64 字节是 x86 和大多数 ARM 处理器使用的行大小,但还使用其他行大小。例如,MIPS 有许多处理器具有 32 字节行大小,有些处理器具有 16 字节行大小。

线路大小经过一定程度的调整,以便为架构预期运行的工作负载提供最佳性能。然而,一旦选择了线路尺寸,并且已经为该架构编写了大量软件,那么由于我上面列出的原因,线路尺寸将来不太可能改变。