cpu 分支预测对性能的影响

现在的 cpu 一般都支持分支预测功能。维基百科中有以下描述:

在计算机体系结构中,分支预测器(英语:Branch predictor)是一种数字电路,在分支指令执行结束之前猜测哪一路分支将会被运行,以提高处理器的指令流水线的性能。使用分支预测器的目的,在于改善指令管线化的流程。现代使用指令管线化处理器的性能能够提高,分支预测器对于现今的指令流水线微处理器获得高性能是非常关键的技术。

cpu 预先对将要执行的分支进行预测,预测成功的概率越大,程序的性能就越好。分支预测实际是为流水线服务的,通过分支预测可以提高流水线的性能。当没有分支预测的情况下,cpu 只有当执行完成了当前分支指令之后才能确定要取哪一条指令来执行,也就是说在执行分支指令的同时,流水线中不能进入新的指令,这被称为流水线停顿。

分支预测可以避免流水线停顿的发生。不过当使用分支预测时,当预测失败后,将会带来更多的性能损耗。预测失败时 cpu 会放弃已经执行完成的结果,然后重新获取正确的分支中的指令开始执行。在较长的流水线中,一次分支预测失败可能会损失 10 ~ 20 个 cpu 周期的时间。

分支预测有多种实现方式,每一种方式都有它自己的特点与适应环境。大部分情况下我们无法关闭 cpu 的分支预测功能,少部分情况下是否能够关闭还有待研究。不过分支预测对程序员来说是一种黑盒,是不透明的,但程序员仍旧能够通过合理的调整分支结构来提高预测成功率。

在编写代码时,分支的排布将对性能造成影响。将发生概率大的分支放在前面有助于提高分支预测成功率。linux 中的 likely 与 unlikely 就是为了提高分支预测的成功率所使用的方法,尽管它依赖 gcc 的扩展功能!

同时必须注意的是,流水线与分支预测在提高计算机性能的同时也给指令的执行了带入了更多的不可控因素。指令执行不再是传统的顺序执行的方式,这样既给问题定位带来了更大的挑战,也让程序具体的执行过程变得模糊不清。

cpu 分支预测对性能的影响相关推荐

  1. 阿里程序员工作小技巧:理解CPU分支预测,提高代码效率

    技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,体现也会在优秀程序员在工作效率提升,产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的工作能力 ...

  2. 阿里程序员工作小技巧 | 理解CPU分支预测,提高代码效率

    技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也会体现在优秀程序员在工作效率提升.产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的工作能力 ...

  3. if-else走天下,让CPU分支预测技术浮出水面

    关键字 圈复杂度 CPU分支预测机制 指令 吞吐量 IPS-每秒指令 GIPS-每秒十亿指令 延迟-皮秒 分支预测 if-else走天下 圈复杂度 void sort(int *A) { int i ...

  4. cpu对计算机性能的影响,雷神告诉你CPU制程对性能的影响有多大?

    原标题:雷神告诉你CPU制程对性能的影响有多大? 在平时的不管是手机还是电脑处理器平台发布时,总是会听到一个有关于CPU的专业名词,那就是"制程工艺",而这个制程工艺一般都是几纳米 ...

  5. ssd测试软件和实际 速度,测出真相!实测CPU/内存对SSD性能的影响

    1解析CPU,内存和硬盘三者关系 [PConline 评测]不同于传统的机械硬盘,固态硬盘的组成很"简单",主控+闪存+PCB+外壳(缓存有些SSD直接省去).那实际影响SSD性能 ...

  6. 用三元操作符替代if-else以降低CPU分支预测惩罚实现Unity内函数13倍提速

    测试对象 1,C# (Unity脚本) 2,C# DLL(mcs build的动态链接库再导入Unity) 3,C Native Code(LLVM编译后导入Unity) 被测试函数源码 两个随机数数 ...

  7. #C++# #likely# #unlikely#减少CPU流水线分支预测错误带来的性能损失

    目录 流水线技术 分支预测 什么是likely和unlikely likely/unlikely的原理 likely/unlikely的适用条件 C++20中的likely/unlikely 流水线技 ...

  8. 我们应该搞清楚分支预测

    分支预测的英文名字是「Branch Prediction」 大家可以在Google上搜索这个关键字,可以看到关于分支预测的很多内容,不过要搞清楚分支预测如何工作的,才是问题的关键. 分支预测对程序的影 ...

  9. Cachegrind:缓存和分支预测分析器

    目录 5.1.概观5.2.使用Cachegrind,cg_annotate和cg_merge 5.2.1.运行Cachegrind5.2.2.输出文件5.2.3.运行cg_annotate5.2.4. ...

最新文章

  1. 【网络编程】非阻塞connect详解
  2. Linux下光盘yum源搭建及简单软件安装
  3. 四、记一次失败的 CAS 搭建 之 结果总是那么伤(客户端)
  4. boost::mpl模块实现list_c相关的测试程序
  5. 百度笔试题,malloc/free与new/delete的区别与联系
  6. 零基础学python图文版-杭州零基础学python图文版
  7. 量子计算机退相干问题怎么办,量子退相干
  8. 创建loop15设备挂载镜像文件(.img)
  9. Performance Engineering of Software Systems (一)——准备工作
  10. 经典200例-003 为项目添加已有类
  11. python:多维数组变一维数组
  12. abaqus14安装_Abaqus安装方法
  13. YOLOv4 绘制PR曲线
  14. 互联网发展阶段的三阶段是什么?从门户到搜索,到移动互联网
  15. caffe学习之conver_imageset.bin的使用方法,caffe下图片转lmdb格式类型数据总结
  16. android 流畅动画svg,android svg动画
  17. Md5加密算法的原理及应用
  18. 【民间文学论文】《苗族古歌》中的浪漫主义和物我互渗艺术思想(节选)
  19. 2021-01-30关于IE浏览器被篡改主页无法修改的解决办法
  20. SpringBoot 集成 WebSocket 实现消息群发推送

热门文章

  1. 车险赔付率分析报告_保险公司7月份理赔分析报告
  2. 小议技术业务孰重孰轻-既不能重文轻武,也不能重业务轻技术
  3. 基因表达分析(上)- 差异表达分析
  4. mysql使用联结的好处_MySQL基础之联结表
  5. 584分学计算机报什么大学,高考成绩584分可以上哪些大学,2021年584分怎么填报志愿上什么大学...
  6. 微信公众号html在线编辑器,关于微信公众号文章编辑器不能直接编辑html样式的处理方法...
  7. 广东省产业园区——清远华侨工业园
  8. 快充对电池有损害么?
  9. Vmware ubuntu桥接方式联网
  10. linux卸载nps,CentOS安装nps