【问题标题】:Would unconditional jump flush the pipeline on x86_64?无条件跳转会刷新 x86_64 上的管道吗?
【发布时间】:2015-06-09 18:51:16
【问题描述】:

当程序执行流程到达无条件跳转时,是否会刷新 CPU 管道? (下一条预取指令是跳转后的下一条指令,还是跳转目标处的指令?)分支目标预测缓冲区会在这里工作吗?

【问题讨论】:

  • 这个问题不够精确。是直接无条件跳转,还是间接无条件跳转?跳跃目标是否正确预测?我们在谈论哪个微架构
  • 直接。我不知道微架构的含义。可能是 AMD64。
  • 这是一个架构,微架构类似于 Bulldozer 或 Haswell。
  • 我唯一能找到的是Intel(R) Core(TM) i7-3770Smicrocode : 0x16。你知道如何在 Linux 上获取这类信息吗?
  • i7-37xx 系列是Ivy Bridge 微架构。

标签: optimization assembly x86 cpu computer-architecture


【解决方案1】:

在大多数架构上,无条件分支的处理方式与条件分支没有太大区别...

您的分支预测器将提前扫描指令,根据之前的访问寻找它认为是分支的指令地址,并预测采用/未采用/目标。

因此对于没有任何预测问题的无条件分支,它将被预测为与给定目标“采取”,而不影响管道。如果他们(和罐子)预测错误,那么您将需要冲洗管道。

【讨论】:

  • 你的意思是,它至少应该经过一次,并且目标应该在预测缓冲区中,对吧?
  • 是的,需要看到它被放入BTB(分支目标缓冲区)中。当然,不能保证它会留在那里。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
相关资源
最近更新 更多