【问题标题】:what is a store buffer?什么是存储缓冲区?
【发布时间】:2012-06-21 18:42:06
【问题描述】:

谁能解释什么是加载缓冲区以及它与失效队列有何不同。以及存储缓冲区和写入组合缓冲区之间的区别? Paul E Mckenny http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2010.07.23a.pdf 的论文很好地解释了存储缓冲区和失效队列,但不幸的是没有谈到写入组合缓冲区

【问题讨论】:

标签: architecture hardware intel cpu-architecture


【解决方案1】:

无效队列更像是存储缓冲区,但它是内存系统的一部分,而不是 CPU。基本上,它是一个跟踪失效并确保它们正确完成的队列,以便缓存可以获取缓存行的所有权,然后它可以写入该行。加载队列是一种推测性结构,用于跟踪乱序处理器中的运行中加载。例如,可能会出现以下情况

  1. CPU 推测性地从 X 发出负载
  2. 该加载是在存储到 Y 之后按程序顺序进行的,但 Y 的地址尚未解析,因此存储不会继续。
  3. Y 已解析,结果等于 X。在解析到 Y 的存储时,该存储在加载队列中搜索已发出但在程序中存储到 Y 之后存在的推测性加载命令。它会注意到 X 的负载(等于 Y),并且必须压缩那些从负载 X 开始并遵循的指令。

存储缓冲区是存在于 CPU 中的推测结构,就像加载队列一样,用于允许 CPU 推测存储。写组合缓冲区是内存系统的一部分,本质上需要一堆小的写入(想想 8 字节写入)并将它们打包成一个更大的事务(64 字节缓存行),然后再将它们发送到内存系统。这些写入不是推测性的,并且是一致性协议的一部分。目标是节省总线带宽。通常,写入组合缓冲区用于对 I/O 设备(通常用于显卡)的未缓存写入。在 I/O 设备中,通常会通过执行 8 字节写入来对设备寄存器进行大量编程,并且写入组合缓冲区允许在将这些写入发送出缓存时将它们组合成更大的事务。

【讨论】:

  • 我刚刚注意到这个问题,并打算回答它——哎呀,我发明了英特尔的写入组合和加载缓冲区,或者至少我的名字出现在许多专利上——但上面的答案是完美的很好。
  • 存储缓冲区 = 不总是推测性的,也不总是在 CPU 内部。 CPU外部可能有存储缓冲区,例如在通过 L1 和 L2 写入之间。
  • 加载缓冲区 (1) 在计算完加载地址后保持加载,但直到加载真正准备好执行;或者,在您尝试执行加载但确定存在问题后,例如缓存未命中或较早存储到尚未准备好数据的同一地址。 (2) 可用于验证无序负载是否正确推测,如 Martin 所述。
  • 我更喜欢术语“窥探队列”或“探测队列”而不是麦金尼的“无效队列”,因为最后一个仅指一种特定类型,尽管是最常见的。例如。它不适用于更新协议。无论如何,Nathan 是对的,因为失效或窥探或探测最重要地反映了系统中其他处理器完成的存储,您的处理器需要查看。
  • 写入组合缓冲区用于将多个小写入组合成更大的写入。英特尔的 WC 缓冲区与填充缓冲区非常相似,缓存行大小等。它们是缓冲区,因为它们可能被无序填充,至少对于 WC 内存类型。 (它们可能会严格按照其他内存类型的顺序填写。)
猜你喜欢
  • 2019-07-19
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多