美文网首页收藏
第一章 理解高性能程序(10) 不要糊弄分支预测器

第一章 理解高性能程序(10) 不要糊弄分支预测器

作者: 耕田者 | 来源:发表于2022-07-12 21:23 被阅读0次

不要糊弄分支预测器

       为了避免流水线阻塞,最好是没有任何分支结构。遗憾的是编程中不可能不用分支,退而求其次,我们能做的是尽量减少分支。一个经典的减少分支的办法是用位操作取代条件表达式,像这样:

        const int maxValue = 16;

        if (x >= maxValue) x = 0;

        // 等同于

        x = (x + 1) & (maxValue - 1);

       我想我们应当承认,这都是些丑陋的底层优化技巧,最好留在微调优化的阶段或者干脆留给编译器。另一个这种类型的技术是循环展开。另一个更为实用的技术是帮助编译器产生更多有利于分支预测的代码,例如Linux内核中使用宏: likely()和unlikely(), 这两者都使用了GCC编译器的__builtin_expect()预处理指令。通常认为这个预处理指令支持分支预测,它允许编译器对代码进行重新组织,使各种优化成为可能。然而,在老的采用静态分支预测的处理器架构中,使用特殊的指令前缀表示其分支是否有较大可能被执行;但对于采用动态分支预测的新处理器架构,这些指令前缀将被忽略,不产生任何效果。

       由此可以得到一个结论:即随着分支预测器本身越来越好,我们只有在非常少量的情况下才需要去手动干预它们。只有一件事情我们必须谨记:分支预测器的跳转表尺寸有限(较小),不要浪费!总结:不要过多地使用分支,维持良好的代码局部性!

相关文章

  • 为什么需要分支预测器

    CPI = BaseCPI + BranchRate \cdot MissPredictRate \cdot Mi...

  • Git学习笔记(四)分支的创建

    Git分支的操作 分支的创建及使用 分支的简介 分支创建可以理解为复制一份主干程序,使得我们可以在复制版本上进行操...

  • 面对一个问题的时候,如何思考解决

    记录一下思考的逻辑,以便反思 补充1:对待自己,应当去掉降低目标要求的选项分支,应当更重视真实情况,而不要糊弄自己...

  • #python基础入门#02

    <程序的分支结构> 单分支: 二分支: 简单二分支 多分支: 操作符 程序的异常处理: 高级形式: <程序的循环结...

  • 4.1 程序的分支结构

    四、程序的控制结构 4.1 程序的分支结构 程序的控制结构 单分支结构 二分支结构 多分支结构 条件判断及组合 程...

  • Python初学(十二)

    上章说了程序的基本结构,这章说下分支结构。 程序的分支结构 单分支结构:if语句: Python的单分支结构使用i...

  • Python 分支语句的重要性

    多分支条件之间的覆盖是重要问题 程序可运行,但如果不正确,要注意多分支 分支结构是程序的重要框架,读程序先看分支阅...

  • 晨间日记

    明天开始早上记不要糊弄。

  • git 工作流

    [高性能计算组] git 工作流 标准git流 分支介绍 主要分支dds3/ksc/master: 永远处在稳定状...

  • [Java]多线程

    #### 10.多线程 ①理解程序、进程、线程的概念 程序可以理解为静态的代码 进程可以理解为执行中的程序 线程可...

网友评论

    本文标题:第一章 理解高性能程序(10) 不要糊弄分支预测器

    本文链接:https://www.haomeiwen.com/subject/wpbtirtx.html