【问题标题】:cache reads and writes缓存读取和写入
【发布时间】:2014-06-14 19:53:21
【问题描述】:

我正在阅读有关缓存写入策略的信息,我只是想知道我是否理解正确。

当读取导致缓存未命中时,它将获取该内存块并将其放入缓存中。那么缓存写入未命中意味着程序要写入的内存位置不在缓存中,对吗?所以我正在阅读write-back的描述,根据wikipedia如下:

最初,只对缓存进行写入。对后备存储的写入被推迟,直到包含数据的缓存块即将被新内容修改/替换。

所以缓存块的内存唯一可以被替换的时间是在读取期间,对吗?写入只会更改内存特定位置的数据(如果命中,这将在缓存块内),但它会使块内的实际内存位置保持不变,对吗?

这是我对它的理解,我只是想确保它是正确的。

编辑:等等,我猜在缓存未命中期间它也会替换/更新缓存块......

【问题讨论】:

    标签: caching memory computer-architecture


    【解决方案1】:

    Wikipedia 实际上解释得很好。一方面,write-backwrite-through 定义了何时将数据写入后备存储(也称为主存储器):

    • 直写 - 写入缓存和后备存储同步完成。
    • 回写(或后写)——最初,只对缓存进行写入。对后备存储的写入被推迟,直到包含数据的缓存块即将被新内容修改/替换。

    另一方面,write allocate vs. no-write-allocate 定义了如何处理写入未命中,即是否将来自后备存储的数据带入缓存:

    • 写入分配(又名写入时提取)– 将未写入位置的数据加载到缓存中,然后执行写入命中操作。在这种方法中,写入未命中类似于读取未命中。
    • 不写分配(又名不写分配或四处写) - 未写入位置的数据不会加载到缓存中,而是直接写入后备存储。在这种方法中,只有系统读取被缓存。

    【讨论】:

    • +1 技术上,write allocate不需要从后备存储加载数据;对于每字节有效位,任何写入都可以分配一个高速缓存行,但不能从后备存储和数据高速缓存块零/分配指令读取,也可以避免读取所有权。旁注:eager 写回已在学术上作为带宽使用优化进行了研究,其中早期写回利用空闲内存通道或打开的 DRAM 页面。 (这也可以通过允许关闭更多缓存来节省能源,或者在 SECDED 仅足以用于 ED 之前断电,而不需要写回。)
    • 哦,无写入分配仍然 caches 写入(即,不是“仅缓存系统读取”),它只是在读取完成之前不会缓存写入对同一个缓存块完成。改写为“在这种方法中,块仅在读取时分配/进入缓存。写入命中将具有其值缓存。” (这显然是必要和适当的,但初学者可能会误解甚至是适度模棱两可的陈述。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2019-06-30
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2013-03-12
    相关资源
    最近更新 更多