在采用MESI协议(采用了l1和l2包容性)的高速缓存中,是否存在l2可以向l1中已经无效的行发送无效指令的情况。
发布于 2017-12-07 09:46:33
你的意思是“无效请求”?
我想是的,如果L2不根据它所知道的关于L1的信息来过滤它的请求,它可能总是在每次清除一行时向L1发送一个INVD。不知道这对于一个真正的设计是否可行。(从L2逐出的原因可能是硬件或软件预取到L2,而不是响应L1写回。)
或者,如果CPU core可以在L2发送无效的同时使L1中的一行无效,那么INVD可能会在它已经使该行无效之后到达L1。
发布于 2017-12-07 21:16:22
可能会出现这样一种情况: L2根本不知道L1是否有这条线路,因为L1被允许静默地丢弃它。
事实上,如果L2是包含的,那么当从L1中逐出未修改的行(容量驱逐)时,几乎没有任何理由浪费带宽,因为L2已经有了一个副本,并且没有任何更改。因此,很可能L2中的许多行在被从L1中逐出之后很长一段时间仍在那里。当它最终到达(稍后,因为它更大)时,从L2中的逐出将不得不发回一个窥探来强制执行包容性,因为它不能确定该行是否还在L1中。
https://stackoverflow.com/questions/47683202
复制相似问题