【问题标题】:MIPS Architecture) write allocation in cache and multiword blockMIPS 架构)缓存和多字块中的写入分配
【发布时间】:2017-04-25 13:40:40
【问题描述】:

抱歉,第一英语不是我的母语。

多字块注意事项 ... 写未命中 (D$) 不能使用写标签,新块中的一个字数据,以及三个字分配或将在高速缓存中以“乱码”块结束(例如,对于 4 个字块,来自旧块的新 if 数据) ,所以必须先从内存中取出块并支付停顿时间

我正在学习计算机体系结构(教科书使用MIPS),教授说通常write allocate甚至不会从内存中获取数据而只是写入缓存中,这是正确的吗?

然而,对于多字块,写分配需要先从内存中获取数据。我对吗?如果是这样,我不明白这一点。 我看到了 5 年前提出的类似问题,但它没有回答我的问题。 怎么可能“漱口”?任何需要更新的词都用脏位标记。因此,如果它是 4 字块并且只需要更新其中一个字,则在替换块时(回写)或写入完成后(直写)只更新一个。

整个块中只有一个词需要更新,系统可以通过标签来更新,那么为什么要获取内存进行写分配呢?我真的很感激我很困惑的答复。谢谢。

【问题讨论】:

  • 如果您在写分配时进行提取,则整个高速缓存行只需要一个脏位,而不是每个字节一个。您以后也无需进行任何复杂的合并。
  • 整个区块中只有一个词需要更新,系统可以通过标签进行更新。标签不是一行中的脏位。它们是缓存的一部分,可让您判断地址的高位是否匹配,判断一个块是否正在缓存您想要的地址。

标签: caching mips cpu-architecture


【解决方案1】:

对不起,我迟到了 2 年...希望这将帮助其他人在未来遇到此问题。

对于单字块,写入分配可用于写入未命中,因为它将替换缓存中的整个块。如果为被替换的数据设置了脏位,则必须将其写回内存。然后,存储新数据,更新标签,设置脏位。

对于多字块,写未命中表示要存储的字不是当前缓存中任何块的一部分。因此,write allocate 无法放置新的字数据,因为它不知道存储在同一块的其他未更改字中的其他数据。

例如,对于具有 4 个字块的高速缓存,假设您要使用写入分配。在写入未命中时,您将选择一个块来覆盖并将新数据存储在偏移寻址的字中,并更新标记和脏位。但是,其他三个字中的数据仍然是来自被覆盖块的数据。稍后,当您写回此块时,这三个字将覆盖之前存在但不应更改的任何数据。正确保存三个未使用字中数据的唯一方法是在写入之前获取块。

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2018-09-29
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多