访问多个阵列时 CPU 缓存的作用是什么?
What cpu cache does while accessing multiple arrays?
假设我们有 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 缓存不会偏爱您的代码,并且会选择在需要时从内存中调用它,这在某些情况下会影响您的性能,
希望这能带来一些启发(=
相关文章:
- "using namespace std;"在C++的作用是什么?
- 此代码中的" "是什么,它的基本作用是什么?
- 在模板参数中使用 {} 在 type_trait{} 中时,其作用是什么<T>?
- <<、>>算子在循环中的作用是什么
- 在c++中,减号和加号对字符串的作用是什么
- 窄集(_cast)的作用是什么
- 在这种情况下,#define 的作用是什么?
- 遍历模板参数包,没有争论的专业化的作用是什么?
- 在 c++ 中,没有 **std::fixed** 的 **std::setprecision()** 的作用是什么?
- 访问多个阵列时 CPU 缓存的作用是什么?
- 以下表达式的作用是什么:x = (a1,a2,..,n);
- 私人成员的作用是什么?
- 这段代码的作用是什么?
- *.exp文件的作用是什么
- ifstream::open()真正的作用是什么
- 如何在矩阵中使用指针.这行代码的作用是什么:int r=**(++b);
- 这个函数的作用是什么?与夹紧值有关
- 这个运算符()语法的作用是什么
- std::函数的模板参数中“const”修饰符和引用的作用是什么
- 字符串流在C++编程中的作用是什么