architecture - 什么是存储缓冲区?

标签 architecture hardware intel cpu-architecture

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

最佳答案

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

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

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

    关于architecture - 什么是存储缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105827/

    相关文章:

    data-structures - 存储库模式与 "smart"业务对象

    c - 服务器架构之谜,C编程

    hardware - 冯诺依曼与哈佛建筑

    compiler-errors - 在环境变量CC(MPI,Intel编译器,包装器)中找不到编译器集

    audio - onclick playSound方法在intel xdk中不起作用

    xml - 使用 Xml 数据源 [WCF] 的 SSRS 是可能的,但是否可取?

    linux - 我需要什么硬件来开始编写、编译和运行我自己的内核?我需要购买像树莓派这样的新机器吗?

    python - 在 windows 和 linux 上的 Python 中获取唯一的计算机 ID

    assembly - Intel x86_64 汇编,如何在 x87 和 SSE2 之间移动? (计算 double 的反正切)

    spring - 如何减少使用多层架构实现的服务中的冗余,同时保持整个系统的一致性?