【发布时间】:2023-03-03 09:42:01
【问题描述】:
如果我将值写入内存,而不是再次读取它们,如果内存位置不连续,是否会对性能产生任何影响? (即不在写缓存中)
处理器可以在有机会的时候在后台将它们写入内存,还是会导致缓存问题?
【问题讨论】:
如果我将值写入内存,而不是再次读取它们,如果内存位置不连续,是否会对性能产生任何影响? (即不在写缓存中)
处理器可以在有机会的时候在后台将它们写入内存,还是会导致缓存问题?
【问题讨论】:
CPU 中的大多数缓存都是回写式的,这意味着写入不会传播到内存层次结构的下一级,直到缓存空间发生争用,并且必须刷新某些内容。如果您进行单次随机写入,您不太可能看到任何性能影响,但如果您进行持续随机写入,您会发现其性能会明显低于顺序写入。
进行随机写入可能需要分配高速缓存行,因为它可能是该内存段中唯一访问的内容。一旦你进行了足够多的写入,你就会用每行包含一个有效字的行填满数据缓存,并且必须刷新其中一行。由于内存的组织和访问方式,刷新不会比刷新整行快多少,这使得随机写入的速度与连续写入的 32 字节(典型行大小)大致相同。
我建议您编写自己的程序来测试这一点。分配比上一级缓存大得多的内存,并为相同数量的随机和连续 32 位写入计时。我敢打赌,您会发现随机写入的速度比顺序写入快 1/8 到 1/4。
对您而言,另一个因素是随机写入与不访问内存的其他计算的相对平衡。如果它们很少见,是的,它们会在后台被冲洗掉。只有当它们成为瓶颈时,您才会注意到性能影响。顺序写入也会出现同样的问题,但没有那么严重。
【讨论】: