2010-11-16 46 views
0

來自GCC的__builtin_expect可以被程序員用來顯示預期哪些變體經常是罕見的,哪些是罕見的。但是__builtin_expect有唯一的「真」與「假」(0%或100%的概率)來自GCC的__builtin_expect以概率

對於一些大的項目,它是改變很難獲得分析反饋(-fprofile-arcs),有時程序員不知道,哪一個分支的可能性,他有一些節目。

可以給編譯器提示一個分支的概率> 0%和< 100%?

+0

如果「true」和「false」真的意味着100%或0%,那麼編譯器可以完全放棄不可能的分支。如果它們已經意味着0

aschepler 2010-11-16 14:32:09

回答

5

真假意味着「第一個變體更可能」和「第二個變體更可能」。除了這些以外,沒有任何實際需要。編譯器將無法使用該信息。

+0

user434507,你確定「編譯器將無法使用該信息。」 ? – osgx 2010-11-17 02:25:04

+0

「編譯器將無法使用該信息」。我強烈反對。在編譯器(分支預測,寄存器分配,矢量化等)中,有更多細粒度的信息是有價值的。例如,LLVM可以直接在IR中表示頻率信息,但AFAIK不會向用戶公開(http://llvm.org/docs/BlockFrequencyTerminology.html)。 – madmann91 2017-06-28 21:46:12

0

非確定性不是編譯器輸出的理想特性,更不用說語言特性了。只選擇偏好一個分支的部分優化沒有真正的好處,並且我沒有意識到可以做到這一點的編譯器。