什么是商店缓冲?

har*_*ddy 35 architecture hardware intel cpu-architecture

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

Nat*_*ert 35

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

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

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

  • 我刚刚注意到了这个问题,并准备回答它 - 哎呀,我发明了英特尔的写入组合和加载缓冲区,或者至少我的名字是关于许多专利的 - 但上面的答案非常好. (25认同)
  • 加载缓冲区(1)在计算加载地址后保持加载,但直到负载真正准备好执行为止; 或者,在您尝试执行加载后,但确定存在问题,例如缓存未命中或较早存储到尚未准备好数据的同一地址.正如Martin所描述的那样,(2)可用于验证无序负载是否被正确推测. (10认同)
  • 写入组合buifferrs用于将多个小写入组合成更大的写入.英特尔的WC缓冲区非常类似于填充缓冲区,缓存行大小等等.它们是缓冲区,因为它们可能无序填充,至少对于WC内存类型.(它们可能被严格填充以便其他内存类型.) (9认同)
  • 存储缓冲区=并不总是推测性的,并不总是在CPU内部.CPU外部可能存在缓冲区,例如在通过L1和L2写入之间. (8认同)
  • 我更喜欢"snoop队列"或"探测队列"一词来指McKinney的"无效队列",因为最后一个只引用一种特定类型,尽管是最常见的类型.例如,它不适用于更新协议.无论如何,Nathan是对的,因为失效或窥探或探测最重要的是反映系统中其他处理器完成的存储,处理器需要看到. (8认同)
  • 还有其他数据结构 - 在英特尔称为完全缓冲区,在其他地方称为MSHR(未命中状态处理寄存器) - 以线粒度跟踪缓存未命中.当完成高速缓存未命中时,通常直接唤醒一个负载,并且其他负载从加载缓冲器中唤醒 (6认同)
  • 许多芯片(虽然不是英特尔的旗舰处理器)已经结合了LSQ(加载存储队列) (6认同)