zoukankan      html  css  js  c++  java
  • nn_slow和nn_fast

    #define nn_fast(x) __builtin_expect ((x), 1)
    #define nn_slow(x) __builtin_expect ((x), 0)
    
    __builtin_expect目的是提供分支信息给编译器,让编译器优化代码,减少指令的跳转带了的性能下降。
    处理器里有很多处理单元,可以预加载很多指令进行并行运算,但是如果遇到跳转的指令没有加载到处理
    单元中,所有的预加载指令都必须重新加载。
    
    __builtin_expect ((x), 1) 这个可以告诉编译器,x为真的情况比较多
    __builtin_expect ((x), 0) 这个可以告诉编译器,x为假的情况比较多
    
    if (__builtin_expect ((x), 1)) {
       code1...
    }
    else {
       code2....
    }
    x为真的情况多,编译器编译的时候优化代码,使得执行时,预先加载code1的代码的指令
    
    __builtin_expect ((x), 0)同理,预先加载code2的代码指令。
    
    __builtin_expect不影响到x的值,x为真,__builtin_expect返回的值也为真
    if(nn_fast(x)) == if (x)
    if(nn_slow(x)) == if (x)
  • 相关阅读:
    高斯消元算法
    Fermat小定理的证明
    Pollard Rho 算法简介
    做一些无聊的题
    永远不要相信自己的傲慢
    笔记-数据结构进阶
    笔记-区间问题
    线段树板子
    [DarkBZOJ3694] 最短路
    [CF321D] Ciel and Flipboard
  • 原文地址:https://www.cnblogs.com/bizhu/p/4101193.html
Copyright © 2011-2022 走看看