如果我正在将值写入内存而不是再次读取它们,那么如果内存位置不连续,是否会对性能产生影响? (即不在写缓存中)
处理器有可能在后台将它们写入内存,或者是否会导致缓存问题?
答案 0 :(得分:4)
CPU中的大多数高速缓存都熟悉是回写,这意味着写入不会传播到内存层次结构的下一级,直到存在争用缓存空间,并且必须刷新某些内容。如果您进行单个随机写入,则不太可能看到任何性能影响,但如果您进行持续随机写入,您会发现其性能将显着低于顺序写入。
进行随机写入可能需要分配缓存行,因为它可能是该段内存中唯一访问的内容。一旦你做了足够的写操作,你就会用数字缓存填充每个包含一个有效单词的行,并且必须刷新其中一行。由于存储器的组织和访问方式,刷新速度不会比刷新整行快得多,使得随机写入的速度与连续写入的32字节(典型行大小)大致相同。
我建议您编写自己的程序来测试它。分配比上一级缓存大得多的内存,并为相同数量的随机和顺序32位写入分配时间。我打赌你会发现随机写入介于1/8和1/4之间,与序列一样快。
另一个因素,对于您来说,随机写入与不访问内存的其他计算的相对平衡。如果它们很少见,是的,它们会在背景中变得很红。只有当它们成为瓶颈时,您才会注意到性能影响。顺序写入也会出现同样的问题,但不会那么严重。