Caching c-cpu缓存关联性——理论与实践的困惑 上下文

Caching c-cpu缓存关联性——理论与实践的困惑 上下文,caching,cpu,Caching,Cpu,还在读很多关于cpu缓存的书。 Debian 64位。 Intel core 2 duo,4路缓存关联性 下面是我目前的想法。如果我错了,请纠正我,这就是我问的原因 问题 我经常读到关于循环性能等方面的文章。但是当我读到你必须访问下一个字节,因为它们在缓存线中时,我觉得有点错误。他们经常忽略这样一个事实,即你可以一次阅读多个章节而没有风险 我认为大多数人对缓存关联性的坚持不够。我有一个4路缓存,所以我可以在我的循环中有4个游标,而不用它来提高我的性能 为什么??因为4种方式意味着每组有4行。这也

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

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

问题 我经常读到关于循环性能等方面的文章。但是当我读到你必须访问下一个字节,因为它们在缓存线中时,我觉得有点错误。他们经常忽略这样一个事实,即你可以一次阅读多个章节而没有风险

我认为大多数人对缓存关联性的坚持不够。我有一个4路缓存,所以我可以在我的循环中有4个游标,而不用它来提高我的性能

为什么??因为4种方式意味着每组有4行。这也意味着,在发生线路冲突的情况下,内存控制器能够为该地址映射获取其他三个空闲地址中的另一个

这就是为什么我倾向于避免购买直接映射缓存控制的cpu的原因。无论如何,在我的世界里,我找不到太多这样的cpu

更好的解释是绘制一个伪缓存线32字节,每个整数8字节,4路缓存关联性:

 [1,2,3,4,5,6,7,8,9,10,11]
  ^       ^       ^
从左到右线性读取

即使这三个光标重叠区域,它们也不会导致缓存损坏

因此,只有两件事需要注意:

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

2确保以线性方式访问这些区域,或通过该循环中的另一个光标访问已访问的区域,以减少损坏的风险

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


谢谢

这与C有什么关系?你和我都知道C/C++开发人员比python开发人员或任何更高级的语言更能回答这个问题。既然C社区很大,这就是为什么。