【问题标题】:Write-through scheme in caches高速缓存中的直写方案
【发布时间】:2016-11-22 12:01:09
【问题描述】:

引用 Henessey 和 Patterson 的话,“写入的另一个关键方面是写入未命中时发生的情况。我们首先获取 从内存中块的单词。取出块并将其放入 缓存,我们可以将导致未命中的单词覆盖到缓存块中。我们也 使用完整地址将字写入主存。”

我似乎不明白上面的说法。如果我们覆盖缓存中的单词,这意味着以前,地址的索引是匹配的,但是标签值不同。因此,处理器停止并命令从内存中读取并写入缓存。这显然会替换块的先前内容(Take 1 块包含 1 个单词)。那我们为什么要把这个词再写到内存中呢?我们不是从那里取来的吗?

有人可以详细说明前面的陈述,以及一般的 write-miss 吗? write-miss 是什么意思?

【问题讨论】:

    标签: memory cpu-architecture cpu-cache


    【解决方案1】:

    写入未命中类似于读取未命中(您要查找的条目不在缓存中),除了操作是写入。当发生写未命中时,我们可以做的事情很少。一种是将未命中视为读未命中,我们称之为fetch-on-write,获取数据并修改需要更新的字。您已经提到,如果要修改它们,从内存中获取数据是没有意义的。这是真的,但是一个高速缓存行是由多个字组成的,因此如果后续操作是读取并且它注定要读取的高速缓存行的一个字,那么获取整个高速缓存行是有益的。我相信主要的好处是易于设计。如果您遵循write-allocate 的路径,则为丢失的条目分配新的缓存行并存储新数据。现在我们必须小心,因为如果缓存行由多个字组成,比如 4,则只有一个字具有正确的数据,而其他所有字都是垃圾。这需要在缓存行中维护每个单词掩码,指示哪个单词有效,哪个单词无效。

    这是 Norman P. Jouppi 撰写的一篇关于书面遗漏政策的好文章。 http://dl.acm.org/citation.cfm?id=165154

    【讨论】:

    • 直写式缓存通常仍会读取旧数据,不是吗?您可以像您建议的那样保持子行粒度有效/无效信息并避免读取,但这并不常见,是吗?为了在多级缓存系统中保持缓存一致性,您通常需要 Read-For-Ownership 将行置于 Modified 状态。
    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多