gpt4 book ai didi

performance - 现代计算机高速缓存的邻近数据的大小,有利于本地化

转载 作者:行者123 更新时间:2023-12-03 17:22:44 25 4
gpt4 key购买 nike

我有1024个缓冲区的连续内存,每个缓冲区的大小为2K字节。我使用链表来记录可用缓冲区(这里的缓冲区可以被生产者和消费者使用)。经过一些操作后,链接列表中缓冲区的顺序将变得随机。

现代计算机体系结构非常喜欢紧凑的数据,本地化。当需要访问位置时,它将缓存相邻数据。我的计算机的缓存行是64(从64K改正)字节。

问题1.对于我来说,由于我的访问模式是随机的,是否有很多缓存未命中?

问题2.现代计算机缓存的相邻数据的大小是多少?我认为,如果您访问整数数组中的某个位置,它将缓存相邻的整数。但是我的单位数据(2K)比int(4)大得多。因此,我不确定会缓存多少个邻居。

最佳答案

首先,我怀疑“我的计算机的缓存行是64K字节”。它最有可能只有64个字节。让我尝试回答您的问题:

问题1.对于我来说,由于我的访问模式是随机的,是否有很多缓存未命中?

不必要。这取决于缓存后对缓冲区执行的操作数。


因此,如果您缓存2K缓冲区并对其进行大量顺序工作,
缓存命中率会很好。正如Paul所建议的,这在启用硬件预取的情况下甚至更好。
但是,如果您经常在缓冲区之间跳转并相对地执行
每个缓冲区上的工作量较低,缓存命中率将下降。
但是1024 x 2KB = 2MB,因此这可能是L2缓存的大小(如果您也有L3,则L2通常较小)。所以即使
如果您错过L1,那么在这两种情况下,您很有可能会
打L2。


问题2.现代计算机缓存的相邻数据的大小是多少?

通常,获取的邻居数由缓存行大小给出。如果行大小为64B,则可以获取16个整数值。因此,每次读取时,您都填充了一条缓存行。但是,您需要考虑预取。如果您的CPU检测到内存读取是连续的,它将预取更多的邻居并提前带来更多的缓存行。

希望这可以帮助!

关于performance - 现代计算机高速缓存的邻近数据的大小,有利于本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26750797/

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