0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

应对分支预测有哪些优化措施

麦辣鸡腿堡 来源:轩哥谈芯 作者:义轩 2023-11-29 17:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

应对分支预测有哪些优化措施

下面再来看一下分支预测,这也是 ChatGPT 给出的一个简易答案

// 不利于流水线的循环结构
for (int i = 0; i < N; ++i) {
    if (condition) {
        // 循环体
    }
}


// 更有利于流水线的循环结构
if (condition) {
    for (int i = 0; i < N; ++i) {
        // 循环体
    }
}

上面的案例就是说明,我们应该在循还外进行条件判断,这样即便是预测失败概率 10%,也只有 10%的回滚情况,但是如果放到循环体内部,那么这个 10%的回滚操作将被执行 N 次。

除了把判断语句从循环体中挪出来,还有一些小的技巧供大家参考一下。

合并条件,尽可能减少分支预测失败时对效率的影响

优化前:

if(case1){    if( case2 )    {        do();    }}

优化后:

if( case1 && case2 ){    do();}

优化前:

if( case1 == 0 && case2 == 0 && case3 == 0 ){    do();}

优化后:

if( ( case1 | case2 | case3 ) == 0 ){    do();}

跳转避免分支预测

if else改写成switch形式(switch使用的指针 list 进行跳转的指令,直接跳转到对应分支)。这样就相当于将多个函数使用函数指针的形式存储到数组中,然后通过 case 查表,直接进行调用。

直接运算,避免判断

先说明一些基本位运算知识:

|x| > > 31 = 0     // 非负数右移31为一定为0
~(|x| > > 31) = -1 // 0取反为-1


-|x| > > 31 = -1   // 负数右移31为一定为0xffff = -1
~(-|x| > > 31) = 0 // -1取反为0


-1 = 0xffff
-1 & x = x        // 以-1为mask和任何数求与,值不变

如对于

if(value < 0 ) value = 0

可改成

value &= ~(value > > 31 )

再比如:

if (data[c] >= 128){    sum += data[c];}

可以优化为:

int t = (data[c] - 128) >> 31; // 非负数右移 310,负数右移则为 -1sum += ~t & data[c];     // 这里利用 0 和 -1,正好等同于条件,大于 128 忽略,小于 128
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    20148

    浏览量

    247045
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18604

    浏览量

    386832
  • 预测
    +关注

    关注

    0

    文章

    39

    浏览量

    12568
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CPU分支预测对程序的影响

    分支预测的英文名字是“Branch Prediction”,如果大家在Google上搜索这个关键字,可以看到关于分支预测的很多内容。不过,要搞清楚
    发表于 09-23 14:11 1465次阅读

    如何统计蜂鸟E203的分支预测率?

    想请问大家如何统计蜂鸟E203的分支预测率,我尝试在exu_commit模块里统计,但是发现预测率都有写问题,想请教以下大家
    发表于 06-10 07:05

    基于全局预测历史的gshare分支预测器的实现细节

    为“taken”,否则为“not taken”。 下图为GShare分支预测的具体架构图。 主要模块分支历史寄存器BHR 分支历史
    发表于 10-22 06:50

    提高条件分支指令预测正确率的方法

    寄存器,分别用于记录条件分支指令个数branch_num和预测失败次数prmiss_num。 上图为运行coremark测试程序的波形图,最后预测成功率超过百分之九十。而初始版本的E203处理器
    发表于 10-22 08:22

    蜂鸟E203简单分支预测的改进

    是最简单的静态分支预测,其预测的命中率并不是很高,因此流水线常常需要因为冲刷而浪费很多周期,导致CPU的性能下降。因此,针对题目通过对E203微架构进行优化提升处理器性能的要求,我们想
    发表于 10-24 07:45

    嵌入式处理器动态分支预测机制研究与设计

    嵌入式处理器动态分支预测机制研究与设计针对嵌入式处理器的特定应用环境,通过对传统神经网络算法的改进,结合定制的分支目标缓冲,提出一种复合式动态分支
    发表于 10-06 09:53

    如何应对欧盟玩具安全新指令的措施

    欧盟玩具安全新指令的措施实施后,相关企业应何应对呢?北测检测作为第三方权威检测机构,建议相关企业积极应对欧盟玩具安全新指令的措施,尽量做到以下几点:  1.加快了解国际玩具标准体系。玩
    发表于 01-18 11:22

    优化技巧:提前if判断帮助CPU分支预测

    摘要: 在stackoverflow上有一个非常有名的问题:为什么处理有序数组要比非有序数组快?,可见分支预测对代码运行效率非常大的影响。要提高代码执行效率,一个重要的原则就是尽量避免CPU把
    发表于 06-13 16:27

    如何对分布式天线系统(DAS)进行优化

    什么是分布式天线系统?如何对分布式天线系统(DAS)进行优化
    发表于 05-24 06:03

    对高级持久性威胁(APT)什么应对措施

    高级持久性威胁(APT)的特点是什么?对高级持久性威胁(APT)什么应对措施
    发表于 05-24 06:40

    什么是内存优化那些优化措施

    什么是内存优化那些优化措施
    发表于 01-14 06:22

    安腾处理器中多级分支预测机制

    分支预测技术可消除分支指令之后损失的周期,防止流水线断流。高比率的分支预测精确度是高性能微处理器性能的保证。本文详细分析了安腾处理器(Ita
    发表于 08-21 12:11 12次下载

    揭秘LDO的噪音类型及应对措施

    揭秘LDO的噪音类型及应对措施
    发表于 02-09 17:05 7次下载

    CPU中什么是分支预测

    什么是分支预测 在超标量的流水线架构上,我们得知,CPU 在运行指令的时候,会在一个时钟上做多个操作,也就是涉及到调用前后相关的指令,比如我们在一个简单的判断语句中。 if (n > 0 ) { n
    的头像 发表于 11-29 17:22 1668次阅读

    EMI(电磁干扰):原理、影响与应对措施

    EMI(电磁干扰):原理、影响与应对措施?|深圳比创达电子EMC
    的头像 发表于 03-26 11:22 4844次阅读
    EMI(电磁干扰):原理、影响与<b class='flag-5'>应对</b><b class='flag-5'>措施</b>?