如何在编程中降低分支预测错误的几率 - Duofeng的专栏 - CSDN博客

来源:百度文库 编辑:神马文学网 时间:2024/04/29 04:24:03

如何在编程中降低分支预测错误的几率收藏

条件分支是计算机语言最基本的操作之一。不幸的是,由于条件分支打乱了指令流的顺序,它也是处理器最难高效执行的指令之一。分支有时可以在单个时钟周期内完成执行,有时它们需要花费几十个时钟周期。

分支有两种形式:条件分支和非条件分支。条件分支不是跳转到指定的指令(采纳分支,taken branch),就是执行下面的一条指令(分支落空,fall through)。而非条件分支总是跳转到一个新的位置。对直接跳转来说,这个位置是预先知道的;对间接跳转来说,这个位置则要等到执行时才能知道。

为了决定下一条指令,Pentium® 4 和 Pentium M处理器使用分支目标缓冲区(BTB)和分支历史来预测分支的结果。处理器能够正确地预测到大多数分支的结果. 

程序员怎样在代码中减少分支预测的错误的产生呢.一个经常被忽略的办法是通过小的修改使分支更容易被预测。由于下面的代码,函数具有非常糟糕的分支预测率

if (t1 == 0 && t2 == 0 && t3 == 0)

在这个代码中,被&&分隔的每个条件都使用单独的分支指令进行评估。根据随机数值是奇数还是偶数来决定变量t1, t2,t3是0还是1。因此每个变量为0或1的概率为50%。通过检查t1==0,t2==0,和 t3==0 来决定分支是很难预测的。另一方面,如果使用一个分支来代替要实现的3个条件,那么该分支取真的概率为0.125,取假的概率为0.875。这个概率能够导致更好的分支预测概率。通过如下修改的代码,可以更好地利用分支的可预测性。

if ((t1 | t2 | t3) == 0)

改变代码后,执行相应程序显示分支预测率由74.5%上升到92%,执行时间由原来的12.3秒减少到6.2秒。由于分支预测率的大幅改进,程序的运行的时间减少了50%。

如何在编程中降低分支预测错误的几率 - Duofeng的专栏 - CSDN博客 如何检测和避免代码中的存储转发冲突 - Duofeng的专栏 - CSDN博客 IE编程---DLL绑定 - skyremember的专栏 - CSDN博客 delphi多线程 - 焦祺的编程专栏 - CSDN博客 在C#中使用COM+实现事务控制 - zgqtxwd的专栏 - CSDN博客 浮点数在计算机中存储方式 - virus026的专栏 - CSDN博客 在基于对话框程序中使用WM_KICKIDLE消息 - ruo_gu的专栏 - CSDN博客 在Visual C++中检测和隔离内存泄漏 - WuOu的专栏 - CSDN博客 baozhengw的专栏 - CSDN博客 界面编程总结(1) - 深之JohnChen的专栏 - CSDN博客 OOP面向对象编程——C++ - winnie的专栏 - CSDN博客 运用VC或Java对Office进行编程操作 - etre的专栏 - CSDN博客 keil c编译器错误与解决方法 - babylon_0049的专栏 - CSDN博客 存储技术趋势预测与分析 - 刘爱贵的专栏 - CSDN博客 如何成为优秀开发人员[4]:做正确的事 - 【编程随想】的技术博客 - CSDN博客 如何成为优秀开发人员[0]:怎样算是优秀的? - 【编程随想】的技术博客 - CSDN博客 AGPS简介 - kv110的专栏 - CSDN博客 OpenMAX简介 - shenbin1430的专栏 - CSDN博客 Android flinger - simmer_ken的专栏 - CSDN博客 windows 命令 - orangeman1982112的专栏 - CSDN博客 JNDI概述 - tanghongru1983的专栏 - CSDN博客 指针 - syhhl007的专栏 - CSDN博客 变量命名 - yszwn的专栏 - CSDN博客 什么是PLL - JasonCao的专栏 - CSDN博客