对于回写高速缓存策略,为什么在写入高速缓存之前应首先从内存中读取数据?

时间:2014-10-31 10:38:34

标签: caching architecture

具有回写高速缓存的高速缓存,对高速缓存存储器执行写操作并立即返回。仅当数据已存在于缓存中时才会这样。如果缓存中没有数据,则首先从较低的存储器中取出数据,然后将其写入缓存中。

我不明白为什么在写入之前首先从内存中获取数据很重要。如果要写入数据,则无论如何都将变为无效。

我确实知道基本概念,但想知道在写入地址之前必须读取数据的原因。

我有以下猜测,

这是针对多处理器环境中的Cache Coherency完成的。其他处理器窥探总线以保持Cache Coherency。写入地址的处理器需要获得独占访问权限,其他处理器必须了解这一点。 但是,这是否意味着单处理器计算机不需要这样做?

由于

2 个答案:

答案 0 :(得分:5)

简短回答

高速缓存中未命中的写入可能会也可能不会获取正在写入的块,具体取决于高速缓存的写入未命中策略(写入时写入错误否-fetch写时错过)。 它不依赖于写入命中策略(回写直写)。

解释

为了简化,我们假设我们有一个级别的缓存层次结构:

-----     ------     -------------
|CPU| <-> | L1 | <-> |main memory|
-----     ------     -------------

L1写策略是fetch-on-write-miss。

缓存存储数据。典型的L1块宽度为32字节,即包含多个字(例如,8 x 4字节字)。

缓存和主内存之间的传输单元是一个块,但CPU和缓存之间的传输可以有不同的大小(1,2,4或8个字节)。

我们假设CPU执行4字节字写

  1. 如果包含该单词的块未存储在缓存中,则表示缓存未命中。整个块(32个字节)从主存储器传输到高速缓存,然后相应的字(4个字节)存储在高速缓存中。

    1. 回写缓存会将块标记为(如您所述,无效)。
    2. 直写式缓存会将更新后的字发送到主内存。
  2. 如果包含该单词的块存储在缓存中,我们会有缓存命中。相应的单词已更新。

  3. 更多信息: 缓存写入策略和性能。 Norman P. Jouppi。
    http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-91-12.pdf

答案 1 :(得分:1)

你的猜测几乎是正确的。但是,这种行为也必须在多核单处理器系统中完成。

您的处理器可以有多个内核,因此在写入缓存行(在WB缓存中)时,发出写入的内核需要获得对该行的独占访问权限。如果用于写入的行被标记为脏,它将被&#34;刷新&#34;在使用新信息写入之前的较低记忆。

在多核CPU中,每个核心都有自己的L1缓存,每个核心都有可能存储共享L2线路的副本。因此,您需要缓存一致性的此行为。

您应该通过阅读 MESI 协议以及它的推导来了解更多信息。