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-goto
s 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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…