2008/12/15

likely / unlikely

likely / unlikelyマクロはコンパイラに分岐予測のヒントを与える.
分岐予測ミスによる投機実行ペナルティを減らすために使う.

プログラムのアルゴリズムには影響を与えないため,ソースを読む際には無視して良い.



// Example
int i = 0;
while (1) {
 i++;
 if (unlikely(i > 100))
  break;
}
上記の例では,ループを抜ける条件式の
if ( unlikely(i > 100) )
が成り立つのは,101回の比較の中で1回のみである. よって,この場合はunlikelyがあった方がコンパイラは 最適化されたコードを生成する.はず.


// Reference
likely()-linux2.6 - LinuxKernelHackJapan

0 件のコメント: