避免2的权力缓存友好性

时间:2012-08-08 15:34:30

标签: c performance caching optimization memory

假设在速度关键代码中,我们有一对经常一起使用的数组,其中确切的大小无关紧要,只需将其设置为合理的数据,例如。

int a[256], b[256];

这可能是一种悲观,因为低地址位相同会使缓存更难同时处理两个数组吗?是否更好地指定例如300而不是256?

1 个答案:

答案 0 :(得分:6)

将我的评论转到答案:

怀疑二人权可能会有问题,这是正确的。但它通常只适用于超过2步的情况。在你超过L1 cache associativity之前,它并没有变得非常糟糕。但即使在此之前,您可能会遇到错误的别名问题。

以下是两个权力实际上成为问题的两个例子:

在第一个例子中,有4个数组 - 所有这些数组都与4k页开头的相同偏移量对齐。

在第二个例子中,当大小为2的幂时,矩阵的逐列跳跃完全破坏了性能。


在任何情况下,请注意关键概念实际上是数组的对齐,而不是它们的大小。如果您发现自己遇到了减速,只需在阵列之间添加一些填充以打破对齐。