内存局部性对写入重要吗?

Gaz*_*yer 1 memory caching processor

如果我将值写入内存,并且不再读取它们,如果内存位置不连续,会对性能产生影响吗?(即不在写缓存中)

处理器是否可以在有机会时在后台将它们写入内存,或者是否会导致缓存问题?

Tim*_*ler 6

我们所熟悉的 CPU 中的大多数缓存都是回写式的,这意味着写入不会传播到内存层次结构的下一级,直到出现缓存空间争用并且必须刷新某些内容为止。如果进行单次随机写入,则不太可能看到任何性能影响,但如果进行持续随机写入,您会发现其性能会明显低于顺序写入。

进行随机写入可能需要分配缓存行,因为它可能是该内存段中唯一访问的内容。一旦进行了足够的写入,您将用每行包含一个有效字的行填充数据缓存,并且必须刷新其中一行。由于内存的组织和访问方式,刷新不会比刷新整行快多少,从而使随机写入的速度与顺序写入的 32 字节(典型行大小)的速度大致相同。

我建议您编写自己的程序来测试这一点。分配比最后一级缓存大得多的内存,并对相同数量的随机和顺序 32 位写入进行计时。我打赌您会发现随机写入的速度是顺序写入的 1/8 到 1/4 之间。

对于您来说,另一个因素是随机写入与不访问内存的其他计算的相对平衡。如果它们很罕见,是的,它们会在背景中被淹没。只有当它们成为瓶颈时,您才会注意到性能影响。顺序写入也会出现同样的问题,但没有那么严重。