【问题标题】:Can branch predictors predict perfectly when the number of loop iterations is not constant?当循环迭代次数不恒定时,分支预测器能否完美预测?
【发布时间】:2012-09-14 19:57:24
【问题描述】:

如果说是 Intel Core i7,以下代码会导致分支错误预测惩罚吗?

for(i = 0, count = *ptr; i < count; i++) {
    // do something
}

count 可以是 0、1 或 2。

【问题讨论】:

  • 没有足够的迭代使其变得可预测
  • 那里的代码太少了,真的没有意义。如果您在外循环中多次执行此操作,您可能需要说服编译器展开循环(或手动展开循环),以便它可以使用条件指令。

标签: c assembly x86 branch-prediction


【解决方案1】:

如果计数随机变化,则无法预测循环条件。如果它以某种模式运行 - 让我们重复说 0、1、2、1 - 它可以在 core2 或 i7 上完美预测。对于其他模式,这取决于。

请参阅“分支预测”一章中的The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers 以获得更详细的说明。

【讨论】:

  • 如果保证循环至少进入一次呢?这是否给了分支预测器足够的时间来识别迭代次数是由其中一个寄存器的值决定的?
  • 分支预测器不能那样工作。它不检查寄存器的值(还)。
猜你喜欢
  • 2012-08-28
  • 2018-11-30
  • 2014-04-25
  • 2014-03-03
  • 2016-09-14
  • 2016-07-01
  • 2011-02-01
  • 2014-07-31
  • 2015-11-24
相关资源
最近更新 更多