【问题标题】:any cpu implement instruction prefetch both branch of a branch instruction任何 cpu 实现指令预取一个分支指令的两个分支
【发布时间】:2020-11-10 15:29:36
【问题描述】:

由于主流cpu使用指令预取来提升性能,

我想知道的是任何 cpu 都可以预取一个分支指令的两个分支

这样如果谓词失败,我们可以确保指令已经在iCache中。

举个例子:

L_main:
  ...
  add 10, %rax
  cmp %rax, %rbx
  je  L10
  add 20, %rbx
  ...
L10:
  add 20, %rcx
  ...

instruction-prefetcher 可以在 L10je L10 之后预取指令。

【问题讨论】:

    标签: caching cpu


    【解决方案1】:

    是的,基本上这是可能的,分支预测单元始终持有分支的两条路径。

    但问题是,如果他们应该这样做,请记住,过于激进的预取会产生不良影响,因为您可能会减慢实际交易速度。 现代 CPU 具有 90%-95% 的预测准确率和非常长的管道,这意味着您必须在实际执行之前很长时间进行预取,因此在从正在执行的分支到您需要的分支的途中会有更多的分支预取并且它是指数级的(如果你预取每个分支的两个路径)。

    也许对于 BPU 对其预测没有很强信心的分支也预取非预测路径是件好事(您也可以添加一些总线不太忙的条件)。

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2023-03-29
      • 2012-04-06
      • 2015-10-17
      • 2019-01-27
      • 2014-03-07
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多