我了解加载存储队列的基本工作原理,即
- 当负载计算它们的地址时,它们会检查存储队列中是否存在相同地址的任何先前存储,如果有,则它们从最近的存储中获取数据,否则从写入缓冲区或数据缓存中获取。
- 当商店计算他们的地址时,他们检查加载队列是否有任何加载违规
我的疑问是当
在第一种情况下,由于存储队列中的一些未解析的存储地址而导致加载访问数据缓存,并且在 L1 数据缓存中访问未命中,并且在可以从缓存中检索数据之前,存储地址已解析。现在,商店确实加载队列检查是否有任何违规行为。从属负载之前已经访问过数据缓存,但由于长时间未命中,尚未从缓存中接收到值。商店是发布加载违规还是进行存储到加载转发并从缓存中取消数据?
当 l1 数据缓存中的加载访问未命中时,加载将放置在 MSHR 中,以免阻塞执行阶段。当未命中解决时,该加载的 MSHR 条目具有有关目标寄存器和物理地址的信息。所以这个值可以在物理寄存器中更新,但是 MSHR 如何与加载队列通信以得知该值可用?这在管道阶段何时发生?因为我在某处读过 MSHR 存储物理地址和 Load-store 队列存储虚拟地址。那么 MSHR 是如何与 LSQ 通信的呢?
我还没有找到任何关于这些疑问的资源。