- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有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/
我是一名优秀的程序员,十分优秀!