【发布时间】:2014-09-18 11:27:42
【问题描述】:
我正在阅读许多论文,它们要么交替使用存储缓冲区和存储队列,要么它们与不同的结构有关,我就是无法理解。这就是我认为的商店队列:
- 它是一个可关联搜索的 FIFO 队列,以获取顺序保存有关存储指令的信息。
- 它保存存储地址和数据。
- 它保留存储指令的数据,直到指令变为非推测性,即它们达到退休阶段。存储指令的数据只有在到达退出阶段时才会从存储队列发送到内存(在这种情况下为 L1 高速缓存)。这一点很重要,因为我们不希望将推测性存储数据写入内存,因为它会扰乱有序的内存状态,并且在发生错误预测的情况下我们将无法修复内存状态。
- 发生错误预测时,存储队列中与在错误预测指令之后提取的存储指令相对应的信息将被删除。
- 加载指令向 L1 缓存和存储队列发送读取请求。如果在存储队列中找到具有相同地址的数据,则将其转发到加载指令。否则,使用从 L1 获取的数据。
我不确定什么是存储缓冲区,但我认为它只是一些缓冲区空间,用于保存等待写入内存的 已退休 存储指令的数据(同样,L1)。
现在,这就是我感到困惑的原因。在this 论文中,声明“我们提出了可扩展存储缓冲区 [SSB],它将私有/推测值直接放入 L1 缓存,从而消除了传统存储缓冲区的不可扩展关联搜索。”我认为他们正在谈论的不可扩展的关联搜索传统结构就是我所知道的商店队列,因为他们也说
SSB 消除了传统的不可扩展的关联搜索 通过将处理器可见/推测值转发到 直接从 L1 缓存加载。
正如我上面提到的,据我所知,数据转发到负载是通过存储队列完成的。在第一页的脚注中,还指出
我们使用“存储队列”来指代保存存储值的存储 在退休之前和“存储缓冲区”是指存储包含 在释放到内存之前停用存储值。
这与我上面解释的一致,但是它与第一个引号中的“存储缓冲区”冲突。脚注对应于论文中的references 之一。在那个参考文献中,他们说
存储缓冲区是一种存在于当前许多处理器中的机制 完成以下一项或多项:商店访问排序, 延迟隐藏和数据转发。
再次,我认为实现这些的机制称为存储队列。他们后来在同一篇论文中说
非阻塞缓存和缓冲结构,例如写缓冲区, 通常使用存储缓冲区、存储队列和加载队列。
所以,他们分别提到了存储缓冲区和存储队列,但存储队列稍后不再提及。他们说
存储缓冲区维护存储的顺序并允许 只有在所有先前的指令都已完成后才能执行存储 完成
他们的存储缓冲区模型与 Mike Johnson 的模型相同。在约翰逊的书(超标量微处理器设计)中,存储首先以获取顺序进入存储预留站。从那里,它们被发送到地址单元,并从地址单元将它们连同相应的数据一起写入“存储缓冲区”。负载转发是通过这个存储缓冲区处理的。再一次,我认为这种结构称为存储队列。在参考文献 #2 中,作者还提到了
Alpha 21264 微处理器有一个 32 项的推测存储缓冲区 商店在它退役之前一直存在。”
我看了一篇关于 Alpha 21264 的论文,其中指出
存储第一次传输 它们的数据通过数据总线进入推测存储缓冲区。 存储数据保留在推测存储缓冲区中,直到存储退出。 一旦它们退休,数据就会在空闲缓存周期写入数据缓存。
还有,
内部存储器系统维护一个 32 条目的加载队列 (LDQ) 和 一个 32 条目的存储队列 (STQ),用于管理引用,同时它们 正在飞行中。 [...] 商店在完成后以获取顺序退出 STQ 退休并转储到数据缓存中。 [...] STQ CAM 逻辑控制 推测数据缓冲区。它可以绕过投机 存储数据以在较旧的存储之后出现较年轻的加载问题时加载。
因此,听起来在 Alpha 21264 中有一个存储队列,它以获取顺序保存有关存储指令的一些信息,但它不保留存储指令的数据。存储指令的数据保存在存储缓冲区中。
所以,毕竟我不确定什么是存储缓冲区。它只是存储队列的辅助结构,还是存储等待写入 L1 的数据的完全不同的结构。或者是别的什么?我觉得有些作者说“存储缓冲区”时的意思是“存储队列”。有什么想法吗?
【问题讨论】:
标签: cpu-architecture