• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-06-03)  系统原理 |   2 条评论  4 
    文章评分 0 次,平均分 0.0

    利用Intel的vtune测试Hardware Issue选项可以看到分支预测的情况。
    一般来讲

    95%的分支预测成功是正常的
    90%表示还有提高的空间
    75%表示非常糟糕

    如何提高分支预测的效率, 下面列举了一些特例表示可以考虑的优化方向
    case 1

    if(t1==0&&t2==0&&t3==0) {
    // do something
    }

    ====>
    // 合并条件,提高分支预测成功率

    if(t1|t2|t3==0){ 
    // do something
    }

    case 2

    for(int i=0; i<1000; ++i){  // for cpu 密集调用
       if(cond) // 分支预测
         do();
       else 
          do2();
    }

    ==============》

    if(cond){  // 避免了CPU密集调用时进行分支预测
       if(int i=0; i<1000; ++i)   do();
    }else{
       if(int i=0; i<1000; ++i)  do1();
    }
    

    case 3

    for(int i=0; i<10000; ++i){  // 此时要进行多次分支预测
    if(a<10){
     		fun1();
    }else(a<25){
    		fun2();
    }else{a<50}{
    		fun3();
    }else{
    		fun4();
    }
    }

    ==========》

    typedef void(*Func)();
    Func funarray[n];  // 利用函数指针数组来避免多次运行时候的分支预测
    Funarray[1] = &fun1;
    …
    
    for(int i=0; i<10000; ++i){
    	funarray[a]();
    }

    case 4:

    if(color<0)  color=0;

    ================⇒

    color &=~(color>>31);  // 注: 右移 负数补1 正数补0
    
     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/1360.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享