优化五:关键词优先,提前重启,减少漏判
处理器通常一次只需要缓存块中的一个字(word)。不要等待整个块被加载,而是在请求的字到达后就立即发送给处理器,并让处理器继续执行,同时填充块中的其他字。这两种具体的策略是:
- 关键字优先(Critical word first)——从内存中先请求缺失的字,并在它到达后立即发送给处理器;让处理器在填充块中的其他字时继续执行。
- 提前重启(Early restart)——按正常顺序获取字,但是在请求的块中的字到达后,立即发送给处理器并让处理器继续执行。
通常,这些技术只有在缓存块较大时才有利,因为除非块很大,否则收益很低。注意,在填充块中的其他字时,缓存通常会继续满足对其他块的访问。然而,由于空间局部性,下一个引用很可能是对还没有获取的块的部分。当关键字优先中有第二个请求时,有效的不命中惩罚是从引用到第二个部分到达的不重叠时间。关键字优先和提前重启的效益取决于块的大小和对还没有获取的块的部分再次访问的可能性。
优化六:合并写入缓冲区,减少Miss Penalty
写缓冲器是一种用于暂存待写入下一级存储器的数据的缓冲区,可以让处理器在写操作完成后继续执行,而不必等待数据真正写入。写合并是一种优化技术,可以将多个对连续地址的写操作合并为一个写操作,从而提高内存的利用率和写入速度,减少因为写缓冲器满而导致的停顿。具体来说:
- 写直达缓存是指每次对缓存的写操作都必须同时写入下一级存储器,以保证数据的一致性。由于这样会增加内存访问的延迟和频率,所以写直达缓存依赖于写缓冲器,将待写入的数据和地址暂存在其中,让处理器可以继续执行其他指令,而不必等待数据真正写入下一级存储器。
- 写回缓存是指只有当缓存块被替换出去时才将其写入下一级存储器,以减少内存访问的次数。即使是写回缓存,在替换缓存块时也需要使用一个简单的写缓冲器,将被替换出去的数据和地址暂存在其中,等待合适的时机再将其写入下一级存储器。
- 写合并是指当多个对连续地址的写操作发生时,不是将每个数据单独放入一个写缓冲器的条目中,而是将它们合并为一个数据块,放入同一个条目中。这样做的好处是可以节省写缓冲器的空间,提高内存的利用率,因为多字节的写操作通常比单字节的写操作更快。另外,这样也可以减少因为写缓冲器满而导致的停顿,因为同样数量的数据占用了更少的条目。
写直达缓存和写回缓存是两种不同的缓存写策略,用于处理当处理器对缓存中的数据进行修改时,如何保证缓存和主存之间的数据一致性的问题。它们的主要区别如下:
写直达缓存(Write-through)是指当处理器对缓存中的数据进行写操作时,同时将数据写入到缓存和主存中,这样可以保证缓存和主存的内容始终一致,但是会增加内存访问的延迟和频率,降低系统性能。
写回缓存(Write-back)是指当处理器对缓存中的数据进行写操作时,只将数据写入到缓存中,而不立即写入到主存中,只有当缓存块被替换出去时,才将修改过的数据写回到主存中,这样可以减少内存访问的次数和延迟,提高系统性能,但是会导致缓存和主存的内容不一致。
有些输入输出设备寄存器是映射到物理地址空间中的,这些输入输出地址不能使用写合并技术,因为不同的输入输出寄存器可能不像内存中的数组那样可以按顺序访问。例如,它们可能需要一个地址和一个数据字来访问每个输入输出寄存器,而不是使用一个地址来进行多字节的写操作。这些副作用通常通过将这些页面标记为需要非合并写直达来实现。