当前位置: 首页 > 知识库问答 >
问题:

Sandybridge微架构中的堆栈引擎是什么?

蒋泰
2023-03-14

我正在阅读http://www.realworldtech.com/sandy-bridge/,我在理解一些问题时遇到了一些问题:

对于桑迪·布里奇(和P4),英特尔仍然使用罗布这个术语。但是,关键是要理解,在这种情况下,它只引用飞行中uops的状态数组

实际上是什么意思?请说清楚。

共有1个答案

丁勇
2023-03-14

>

  • 像Agner Fog的microarch doc解释的那样,堆栈引擎在流水线的发布阶段处理push/pop/call/ret的rsp+=8/rsp-=8部分(在将uops发布到核心的乱序(OoO)部分之前)。

    因此,核心的OoO执行部分只需处理加载/存储部分,并使用堆栈引擎生成的地址。当8bit位移计数器溢出时,或者当OoO内核直接需要rsp的值时(例如,调用retpushpop之后的sub rsp、8pop通常会导致在Intel CPU上插入额外的uop。AMD CPU显然不需要额外的同步uop)。

    注意,Agner的指令表显示Pentium-M和以后的版本将pop reg解码为一个只在加载端口上运行的uop。但是Pentium II/III将POP EAX解码为2个UOPS;1个ALU和1个负载,因为没有堆栈引擎来处理故障核心之外的ESP调整。除了获取额外的UOP,一长串push/pop和call/ret还会创建对ESP的串行依赖关系,因此在MOV ebp,ESP的值可用或MOV eax,[ESP+16]的地址可用之前,无序的执行必须仔细检查ALU UOP。

    P6 microarch家族(PPro到Nehalem)将uop的输入值直接存储在ROB中。在发出/重命名时,“冷”寄存器输入从体系结构寄存器文件读到ROB(由于读端口有限,这可能是一个瓶颈。请参见寄存器-读延迟)。在执行一个uop之后,结果被写入ROB以供其他uop读取。当uops退役时,体系结构寄存器文件将用ROB中的值更新。

    SNB系列微体系结构(和P4)有一个物理寄存器文件,所以ROB存储寄存器号(即间接级)而不是直接存储数据。对于这部分CPU来说,重新排序缓冲区仍然是一个很好的名称。

    注意,SnB引入了AVX,有256B向量。与只将它们保存在较小的FP寄存器文件中相比,使每个ROB条目足够大以存储双倍大小的向量可能是不可取的。

    SnB简化了uop格式以节省电力。然而,这确实导致了uop微融合能力的牺牲:解码器和uop-cache仍然可以使用2寄存器(索引)寻址模式内存操作数进行微融合,但它们在发出到OOO内核之前是“未分层的”。

  •  类似资料:
    • 问题内容: 最近,我一直在寻找Java虚拟机规范(JVMS),以试图更好地理解使我的程序正常工作的原因,但是我找到了一段我不太了解的部分… 第4.7.4节介绍了 StackMapTable 属性,在该节中,文档介绍了有关堆栈映射框架的详细信息。问题是它有点罗word,我以身作则,学得最好。不读书。 我知道第一个堆栈映射框架是从方法描述符派生的,但是我不知道如何(应该在这里进行解释。)而且,我也不完

    • 本文向大家介绍微服务架构中的DRY是什么?相关面试题,主要包含被问及微服务架构中的DRY是什么?时的应答技巧和注意事项,需要的朋友参考一下 DRY 代表不要重复自己。它基本上促进了重用代码的概念。这导致开发并共享库,但是反过来导致紧耦合。

    • 本文向大家介绍什么是微服务架构?相关面试题,主要包含被问及什么是微服务架构?时的应答技巧和注意事项,需要的朋友参考一下 在前面你理解什么是微服务,那么对于微服务架构基本上就已经理解了。 微服务架构 就是 对微服务进行管理整合应用的。微服务架构 依赖于 微服务,是在微服务基础之上的。 例如:上面已经列举了什么是微服务。在医院里,每一个科室都是一个独立的微服务,那么 这个医院 就是 一个大型的微服务架

    • 我有一个堆栈的ArrayList,我在其中一个堆栈中添加了一个元素,并在列表中循环打印每个堆栈的索引 然后我从上一个堆栈中删除元素,将其添加到下一个堆栈中,打印每个堆栈的索引,并对ArrayList中的所有堆栈继续此操作 然而,当任何堆栈为空时,在获取ArrayList中每个堆栈的索引时会出现非常不寻常的行为。非空的堆栈将具有正确的索引值,而空的堆栈将具有错误的索引值 此外,如果包含元素的堆栈的索

    • 本文向大家介绍PACT 在微服务架构中的用途是什么?相关面试题,主要包含被问及PACT 在微服务架构中的用途是什么?时的应答技巧和注意事项,需要的朋友参考一下 PACT 是一个开源工具,允许测试服务提供者和消费者之间的交互,与契约隔离,从而提高微服务集成的可靠性。 在微服务中的用法: 用于在微服务中实现消费者驱动的契约。 测试微服务的消费者和生产者之间的消费者驱动的契约。

    • 问题内容: 我正在阅读有关JVM体系结构的信息。今天,我了解了操作数堆栈的概念。根据一篇文章: 在字节码指令执行期间使用操作数堆栈,其方式与在本机CPU中使用通用寄存器的方式类似。 我不明白:操作数堆栈到底是什么,以及它在jvm中如何工作? 问题答案: 这是各种单个字节码操作如何获取其输入以及它们如何提供其输出的方式。 例如,考虑将两个s相加的运算。要使用它,您将两个值压入堆栈,然后使用它: 现在