【发布时间】:2016-09-04 18:16:15
【问题描述】:
根据此diagram,如果在另一个 CPU 缓存中复制时写入缓存未命中(例如 共享/独占 状态)。步骤是:
1. Snooping cores (with cache line copy) 将状态设置为无效。
2. 当前缓存存储新的主内存值。
为什么其中一个监听内核一开始不能将其缓存线值放在总线上?然后进入无效状态。相同的算法用于现有副本的读取未命中。谢谢。
【问题讨论】:
根据此diagram,如果在另一个 CPU 缓存中复制时写入缓存未命中(例如 共享/独占 状态)。步骤是:
1. Snooping cores (with cache line copy) 将状态设置为无效。
2. 当前缓存存储新的主内存值。
为什么其中一个监听内核一开始不能将其缓存线值放在总线上?然后进入无效状态。相同的算法用于现有副本的读取未命中。谢谢。
【问题讨论】:
你说得对,当你已经在你身边时从内存中获取一行是非常愚蠢的,但是这个图表描述了功能正确性连贯性的最低要求协议(即必须采取什么措施来避免一致性错误),并且仅指示窥探数据以查找修改的行,因为这是唯一正确的副本。您所描述的是一种可能的优化,某些系统确实是这样的。
但是,请记住,当今的大多数系统也使用共享缓存(L2 或 L3,有时甚至超出),而且这通常是包容性的(关于所有内核中存在的所有行)。在这样的系统中,没有必要一直到内存,因为在另一个核心中拥有该行意味着它也在共享缓存中,并且在失效后请求核心可以从那里获取它。因此,您的建议仅适用于没有共享缓存的系统,或具有非严格包容性缓存的系统。
【讨论】: