【问题标题】:How many bytes will be written to memory if the cache has a write-back policy?如果缓存有回写策略,将有多少字节写入内存?
【发布时间】:2020-03-28 07:54:56
【问题描述】:

数组 A 包含 256 个元素,每个元素 4 个字节。它的第一个元素存储在物理地址 4096。数组 B 包含 512 个元素,每个元素 4 个字节。它的第一个元素存储在物理地址 8192。假设只有数组 A 和 B 可以缓存在最初为空的、物理寻址的、物理标记的、直接映射的、2K 字节的缓存中,其中 8 字节 块大小。然后执行以下循环。

for(i=0;i

A[i] = A[i] + B[2*i];

在循环执行过程中,如果缓存有回写策略,会有多少字节写入内存?

给出的答案是 0。有人可以解释它是如何0吗?

【问题讨论】:

  • 如果您认为这是其他问题,那是什么,为什么?
  • A 的每个数组元素都会更新,所以应该写回内存。所以,它应该是 256*4 字节 = 1024 字节。
  • 如果使用直写策略,您的答案将如何(如果有的话)改变?如果不改变,这两项政策有什么区别?
  • 在这两种情况下,数据都将被写入缓存,如果有的话
  • 但问题不是询问写入到缓存,而是询问这些写入中有多少会通过缓存进入内存。即缓存无法过滤掉多少存储。这就是回写式缓存而不是直写式缓存的全部意义所在。

标签: caching memory-management cpu-architecture


【解决方案1】:

自从数组 A 的每个元素被更新以来,写入内存的字节数 = 256*4 = 1024 字节。因此,每个元素的缓存都变脏了,并且每个元素都更新了主内存。

【讨论】:

  • 最终在某个时候,如果没有其他对这些位置的写入首先发生(在这种情况下,这些数据将永远不会被写入内存)。但这些商店不必等待,也不会直接导致任何回写。这是回写缓存而不是直写的要点。例如,循环中的mov [mem], eax 可以无限期地运行而不会导致任何内存流量,因为它会不断更新缓存中的相同位置。
猜你喜欢
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 2018-06-24
  • 2017-01-12
  • 1970-01-01
  • 2021-05-05
  • 2020-11-25
相关资源
最近更新 更多