【问题标题】:CPU SandyBridge Architecture. μops in-flightCPU SandyBridge 架构。飞行中的微操作
【发布时间】:2016-08-12 06:50:28
【问题描述】:

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

加载缓冲区增长了 33%,并且可以跟踪 64 μop 运行中。 Sandy Bridge 略微增加至 36 个存储,总共 100 个同时内存操作,大约是运行中 μop 总数的三分之二。

什么是微操作飞行中?什么是加载缓冲区?

【问题讨论】:

  • 当他们说“uop”时,他们可能是指微操作的“μop”。您可以将加载缓冲区视为保存加载指令结果的缓存(对于存储缓冲区也是如此)。更多详情请参见答​​案here。
  • 飞行中的微操作被记录在重新排序缓冲区中(Sandy Bridge 中的 168 个条目)。当一个操作重命名了它的操作数并插入到调度器中时,它就进入了ROB;当操作被提交(按顺序)时,ROB 条目被释放并且操作不再“进行中”。加载缓冲区跟踪加载地址及其顺序以支持存储转发(以及检测加载不依赖于早期未解析存储的错误预测)。

标签: x86 intel cpu-architecture


【解决方案1】:

Sandy Bridge 处理器是无序处理器 (OOO)。这意味着处理器将尝试执行指令流中的指令,只要它们可以执行,而不管程序文本说执行它们的顺序如何(lot对重新排序不能改变可观察结果这一事实的警告。例如,依赖关系必须在实际执行发生之前可用)。

因此,当指令被解码为微操作 (uop) 时,它们会被考虑执行。处理器在执行的各个阶段具有最大数量的微指令。这就是在飞行中的微控制器。

加载缓冲区是加载微指令结果的临时存储位置。由于许多可以并行执行,因此他们需要预先知道当数据从内存子系统返回时,他们将把数据保存在哪里。拥有 64 个条目意味着您可以“同时”执行 64 个加载微指令。

【讨论】:

  • 更准确地说 - 您可以在任何给定时刻有 64 个负载微指令等待执行或提交。它们不必一起执行,但 fetch 单元可以看到它们,以防某些较年轻的操作可能独立执行。
  • @Leeor:对,这就是我所说的“执行的各个阶段”。我意识到这在技术上是不正确的,但指向不精通 OOO 的人。在不解释其含义的情况下使用“commit”是违背该目标的。
  • 所以,事实上:当(例如):mov rcx, [rax] 那么这条指令(可能)将被划分为 Load microps,这条指令从内存(RAM/Cache)和数据将被放置在加载缓冲区中,对吗?
猜你喜欢
  • 2016-08-06
  • 2018-11-02
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2019-11-03
  • 2018-11-19
相关资源
最近更新 更多