gpt4 book ai didi

c++ - Xeon 每次内存访问会将多少字节带入缓存?

转载 作者:IT老高 更新时间:2023-10-28 23:16:42 27 4
gpt4 key购买 nike

我正在开发一个系统,用 C++ 编写,在 Linux 上的 Xeon 上运行,它需要尽可能快地运行。 RAM 中有一个超过 10 GB 的大型数据结构(基本上是一个结构数组),其中的元素需要定期访问。我想尽可能地修改数据结构以适应系统的缓存机制。

目前,访问大多是在整个结构中随机进行的,每次读取 1-4 个 32 位整数。在同一个地方发生另一次读取之前的时间很长,因此缓存没有任何好处。

现在我知道,当您从 RAM 中的随机位置读取一个字节时,不仅仅是该字节被带入缓存。我的问题是引入了多少字节?是 16、32、64、4096 吗?这叫缓存线吗?

我希望重新设计数据结构,以尽量减少随机 RAM 访问,并使用缓存而不是与之对抗。知道在随机访问时有多少字节被拉入缓存将告知我做出的设计选择。

更新(2014 年 10 月):在我提出上述问题后不久,该项目就被搁置了。它已经恢复,并根据下面答案中的建议,我围绕 RAM 访问进行了一些实验,因为 TLB 抖动似乎正在发生。我修改了程序以使用大页面(2MB 而不是标准的 4KB)运行,并观察到小幅加速,大约 2.5%。我找到了有关设置大页面的重要信息 herehere .

最佳答案

当今的 CPU 以(通常)64 字节的 block (称为高速缓存行)获取内存。当你读取一个特定的内存位置时,整个缓存行会从主内存中提取到缓存中。

更多信息:http://igoro.com/archive/gallery-of-processor-cache-effects/

关于c++ - Xeon 每次内存访问会将多少字节带入缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8620303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com