2010年4月7日水曜日

likely()とunlikely()

 

時々とんだ勘違いすることがあるので、忘れないようにmemoです。

Linuxのsourceを眺めてると度々、
if (likely(skb != NULL)) とか、
if (unlikely(local_softirq_pending())) のように、
わざわざif文をlikely() or unlikely()で括ってるものを見かけます。

“un”が頭についてると、ひっくり返したくなる気持ちがこみ上げてきて、
どーしても混乱しちゃうのは私だけですかねぇ?

 

とりあえず・・・・
likely()は、答えが真の場合に高速動作するようにコンパイルしなさい!
unlikely()は、答えが偽の場合に高速動作するようにコンパイルしなさい!

っていう意味です。

それぞれの中身は、
#define likely __builtin_expect(!!(x), 1)
#define unlikely __builtin_expect(!!(x), 0)

__builtin_expect()は、GCCに対し分岐方向のヒントを与えるものです。
第一引数が第二引数の場合は、高速動作するようにしてね!ってね。
# 通常の道をどれにするかのヒントでしょうね(突き進む方向とジャンプする方向)

 

実際にsourceを読む際は、一切無視して構わないってことです。
なのに、時々勘違いしてしまう。

うーむ。

 

新しいノートPCをGetしたことだし、Blogもボチボチ再開しよう。
そんな風に思いながら早5日。

覚えたことを忘れない為に、Blogに書いていたはずなのに、
続かなきゃ意味ないですね(汗)

調べたものや、読んだ書籍など、ネタは溜まってきてるので、
これからちょこちょこと更新するようにします。
# 読んでくれてる方宛? いや未来の自分宛

3 件のコメント: