引用Henessey和Patterson的话,“写入的另一个关键方面是写入未命中时发生的事情。我们首先获取 来自记忆的块的话。块被取出后放入 缓存,我们可以将导致错过的单词覆盖到缓存块中。我们也 使用完整地址将该字写入主存储器。“
我似乎不理解上述陈述。如果我们覆盖缓存中的单词,则意味着之前地址索引匹配,但标记值不同。因此,处理器停止并命令从内存中读取并写入缓存。这显然会取代块的先前内容(Take 1 block包含1个字)。那我们为什么要再把这个词写进记忆呢?我们不是从那里取的吗?
有人可以详细说明以前的陈述,以及一般的写错误吗?写错过什么意思?
答案 0 :(得分:2)
写入未命中类似于读取未命中(您要查找的条目不在缓存中),除了操作是写入。当写错误发生时,我们可以做一些事情。一种是将未命中视为读取未命中,我们将其称为fetch-on-write
,获取数据并修改需要更新的单词。您已经提到,如果要修改数据,则无需从内存中获取数据。这是正确的,但是高速缓存行包含在多个字上,因此如果后续操作是读取并且它指向获取的高速缓存行的一个字,则获取整个高速缓存行是有益的。我相信主要的好处是设计的简易性。如果您遵循write-allocate
的路径,其中为错过的条目分配了新的缓存行,并且存储了新数据。现在我们必须要小心,因为如果缓存行由多个单词组成,比如说4,那么只有一个单词具有正确的数据,而所有其他单词都是垃圾。这需要在缓存行中维护每个字掩码,指示哪个字有效以及哪个字无效。
这是Norman P. Jouppi关于写作失误政策的好文章。 http://dl.acm.org/citation.cfm?id=165154