c - cpu cache associativity - 理论与实践的混淆

时间:2014-11-16 12:44:13

标签: caching cpu

上下文

还在阅读很多关于cpu缓存的内容。 Debian 64位。 Intel core 2 duo,4路缓存关联性。

以下表达的是我目前的想法。如果我错了,请纠正我,这就是我问的原因。

问题

我经常阅读关于循环性能等等。但是当我读到你必须访问下一个字节时我觉得有点误,因为它们在缓存行中。他们经常忽略这样一个事实,即您可以一次读取多个部分而没有任何风险。

我认为大多数人对缓存关联性并不坚持。我有一个4路缓存,所以我可以在循环中使用4个游标,而不用它来激活我的表现。

为什么?因为4种方式意味着每组有4条线。它也意味着在线路冲突的情况下,内存控制器能够将另外三个中的另一个空闲用于此地址映射。

这就是为什么我倾向于避免购买直接映射缓存控制的cpu(在我的世界中无论如何都找不到它。)

更好地解释了一个假的情况(缓存行32字节,每个整数8个字节,4路缓存关联性):

 [1,2,3,4,5,6,7,8,9,10,11]
  ^       ^       ^

从左到右线性阅读。

即使这三个游标与区域重叠,它们也不会导致缓存丢弃。

因此,唯一需要注意的事情是:

1)不要在循环中读取比缓存关联性更多的不同部分

2)确保以线性方式访问它们或不久前通过该循环中的另一个游标访问已访问过的区域(降低了垃圾的风险)。

我只想确保我刚刚写的是正确的假设。 如果我不清楚,请告诉我。

感谢

0 个答案:

没有答案