访问多个阵列时 CPU 缓存的作用是什么?

What cpu cache does while accessing multiple arrays?

本文关键字:作用 是什么 缓存 CPU 阵列 访问      更新时间:2023-10-16

假设我们有 2 个巨大的数组 (20MB+(,我们做这样的事情:

for(int i = 0; i < length; i++) {
arrayA[i] = 13;
arrayB[i] = 13;
}

这将如何加载到缓存中? 何时从缓存中卸载?

老实说,CPU 缓存有点变幻无常,但有一些方法可以改进缓存,对于一个 VOID 多维数组和嵌套向量不惜一切代价,CPU 缓存讨厌这些,也避免任何类型的链表,或者我喜欢称它们为菊花链类型,例如链表、无序映射和其他标准容器, 它们不会平坦地存储在内存中,因此 CPU 不会缓存它,如果您想使用类型安全的平面数组,或者使用 std 数组,或者老派并简单地使用 C 样式的数组,那么您最好的 CPU 缓存朋友是很好的旧矢量,这些都是平面容器,大多数时候会在 CPU 缓存中有空间时被缓存, CPU缓存还有很多,但这只是一个非常非常基本的见解,在缓存方面,在容器方面使用什么和不使用什么,如果你在谷歌和搜索C++缓存友好的代码上,GameDev网络和其他网站上有一些非常好的艺术品,

所以简单地把你当前的代码不会被缓存....好吧,我不会说永远不要,因为 CPU 这些天变得非常好,Buuttttt 缓存不会偏爱您的代码,并且会选择在需要时从内存中调用它,这在某些情况下会影响您的性能,

希望这能带来一些启发(=