是否有任何标准方法(使用事件探查器)来检查使用这些gcc认可的分支预测宏是否可以在指令流水线方面使某些时钟周期受益?在程序中使用和不使用这些宏的情况下,我们如何测量?测量经过时间是唯一的方法吗?

Windows中是否有类似的分支预测宏(例如,假设有键盘输入?)

-卡特里

最佳答案

我不熟悉会显示分支效率的任何事件探查器。 Linux time程序应该可以很好地帮助您进行基准测试。

在所有现代x86 CPU上,如果JMPcc指令不分支,而只是进入下一条指令,则它们的速度会更快。

GCC的__builtin_expect函数为编译器提供了一个提示-告诉if()的哪一侧应该作为分支,哪一侧应作为分支。仅当您100%确信此功能时,才应使用此功能。 VC++没有等效功能。我不确定ICC。

更好的方法是避免使用这些非标准功能,并使用配置文件引导式优化(PGO),在该程序中运行程序,并记录所有这些分支以找出问题所在。

09-15 14:35