2010-11-16 20 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

非确定性不是编译器输出的理想特性,更不用说语言特性了。只选择偏好一个分支的部分优化没有真正的好处,并且我没有意识到可以做到这一点的编译器。