如果每次访问都有读取未命中,那么使用缓存有什么好处吗?

时间:2017-12-01 03:42:48

标签: caching memory-management cpu-architecture

如果每次访问都有读取错过,使用缓存有什么好处吗?

我的问题旨在更好地理解缓存。

每次访问的读取错过也可能在冷启动期间发生,我是对的吗?

1 个答案:

答案 0 :(得分:2)

如果您只进行读取,并且在每次读取时都错过了所有级别的缓存,那么按照定义缓存并没有帮助。您支付额外的功率和延迟来检查每个级别的缓存,以及额外的功率和(可能)延迟加载整个缓存行的数据,这些数据永远不会被使用(按照定义),除了您读取的数据,因为您的所有访问都会丢失

你没有说你正在做只读。因此,当然,如果您的所有内容都会丢失,但某些内容会被写入,则缓存可以提供帮助。

也许你的意思是所有访问的读取部分,包括读取和写入,都未命中 - 写入的读取部分读取所有权访问存在于大多数基于缓存的系统上,其中必须先写入缓存行(其中一部分)才能写入缓存行。在这种情况下,缓存可能也没有帮助,可能会受到伤害。

  

每次访问的读取错过也可能在冷启动期间发生,我是对的吗?

不,几乎从不。一些读取将会丢失,但是这些读取将在相同的高速缓存行上引入相邻数据,这通常会导致稍后的命中(空间局部性)。即使在冷启动(时间局部性)中,许多读数也将返回到相同位置,这也经常会发生。即使超出单个高速缓存行的动态,现代CPU通常提供硬件预取,它将识别某些访问模式,并在您需要之前引入数据,即使您第一次访问高速缓存行也可能导致命中。

最后,在大多数通用硬件上,你通常无法决定简单地“不使用缓存”,所以即使你的命中率很低,你也要付出内置的缓存成本。

也就是说,有时,当您知道您的访问模式时,您可以向CPU提供提示。例如,x86 CPU提供“非临时存储”指令,这些指令在使用时基本上绕过缓存 - 这意味着不会缓存存储的缓存行。这不一定有助于加快商店本身的速度(这仍然主要支付融入硬件的缓存层次结构的价格),但为了避免用数据污染缓存,开发人员知道不会很快访问。