Portable branch prediction hints

后端 未结 6 1862
谎友^
谎友^ 2020-12-05 02:07

Is there any portable way of doing branch prediction hints? Consider the following example:

  if (unlikely_condition) {
    /* ..A.. */
  } else {
    /* ..B         


        
6条回答
  •  星月不相逢
    2020-12-05 02:54

    The canonical way to do static branch prediction is that if is predicted not-branched (i.e. every if clause is executed, not else), and loops and backward-gotos are taken. So, don't put the common case in else if you expect static prediction to be significant. Getting around an untaken loop isn't as easy; I've never tried but I suppose putting it an an else clause should work pretty portably.

    Many compilers support some form of #pragma unroll, but it will still be necessary to guard it with some kind of #if to protect other compilers.

    Branch prediction hints can theoretically express a complete description of how to transform a program's flow-control graph and arrange the basic blocks in executable memory… so there are a variety of things to express, and most won't be very portable.

    As GNU recommends in the documentation for __builtin_expect, profile-guided optimization is superior to hints, and with less effort.

提交回复
热议问题