首页 > 解决方案 > 访问多个数组时 cpu 缓存会做什么?

问题描述

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

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

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

标签: c++cpu-cache

解决方案


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

所以简单地说你当前的代码不会被缓存......好吧,我不会说这些天CPU变得非常好,但是缓存不会有利于你的代码,并且会选择在需要时从内存中调用它在某些情况下会影响你的表现,

希望这能有所启发(=


推荐阅读