假设内核A正在修改一个变量X,而内核B正在读取该变量(X)。当然,在这种情况下,高速缓存一致性协议将更新核B的高速缓存,因为X已经被核A修改,当然,这种高速缓存一致性将减慢在核B上的执行。然而,假设变量X驻留在其高速缓存中,这种高速缓存一致性也会影响核A的性能吗?
发布于 2012-04-08 00:53:23
是。它可以通过几种方式影响性能。人们使用的标准协议是MSI的一些变体(修改、共享、无效),有时会在协议中添加O(所有者)和E(独占)。在您的示例中,内核A将以已修改(或独占)状态启动,而内核B的读取将强制内核A将其更改为共享状态。此操作占用缓存中的周期,因为内核在任何给定时间都只能执行这么多操作。这对核心A的影响不是很大,因为它不在关键路径中。更大的影响是如果核心A再次执行写入。由于高速缓存线处于共享(或无效)状态,因此它必须发出将自身升级到M或E的请求。该请求必须转到核心B。此操作位于关键路径上,在升级高速缓存块之前无法完成写入。也就是说,写操作通常是缓冲的,处理器在此操作中通常不会被阻塞。
发布于 2012-04-08 00:48:28
是的,在目前使用ME(O)SI一致性协议的微体系结构上,它也会减慢A对X的更新。这样做的原因是B的读操作会在复制之前将包含X的高速缓存线置于“共享”状态,然后A的写操作将不得不使B的副本无效以进入“独占”状态,然后才能再次修改它。
尽管如此,A对X的写入实际上可能不会停止A的执行流水线。这取决于体系结构和编程语言的内存一致性模型,以及写操作是作为原子操作还是作为后续写操作强制退出。
https://stackoverflow.com/questions/10056319
复制相似问题