gpt4 book ai didi

c - 是否可以告诉分支预测器跟随分支的可能性有多大?

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:18 35 4
gpt4 key购买 nike

为了清楚起见,我不打算在这里进行任何形式的可移植性,因此任何将我绑定(bind)到某个盒子的解决方案都可以。

基本上,我有一个 if 语句,它将 99% 的时间评估为真,并且我正在努力争取每一个性能的最后一个时钟,我可以发出某种编译器命令(使用 GCC 4.1.2 和 x86 ISA,如果重要的话)告诉分支预测器它应该为那个分支缓存?

最佳答案

可以,但会产生no效果。异常(exception)是 Netburst 之前的旧(过时)架构,即便如此,它也没有做任何可衡量的事情。

英特尔在 Netburst 架构中引入了一个“分支提示”操作码,并且在一些较旧的架构上为冷跳转(向后预测采用,前向预测未采用)提供了默认静态分支预测。 GCC 使用 __builtin_expect (x, prediction) 实现这一点,其中预测通常为 0 或 1。编译器发出的操作码在所有较新的处理器架构 (>= Core 2) 上被忽略。这实际上做某事的小角落案例是旧的 Netburst 架构上的冷跳案例。英特尔现在建议不要使用静态分支提示,可能是因为他们认为代码大小的增加比可能的边际加速更有害。

除了预测器的无用分支提示外,__builtin_expect 也有其用处,编译器可能会重新排序代码以提高缓存使用率或节省内存。

它不能按预期工作的原因有很多。

  • 处理器可以完美地预测小循环 (n<64)。
  • 处理器可以完美地预测小的重复模式 (n~7)。
  • 处理器本身可以比编译器/程序员在编译时更好地估计运行时分支的概率。
  • 分支的可预测性(= 分支被正确预测的概率)远比分支被采用的概率重要得多。不幸的是,这高度依赖于架构,并且众所周知,预测分支的可预测性非常困难。

在 Agner Fogs manuals 阅读有关分支预测内部工作的更多信息.另见 gcc mailing list .

关于c - 是否可以告诉分支预测器跟随分支的可能性有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54837414/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com